2011-04-11 2 views
4

Delphi 2009의 계층화 된 윈도우 및 시스템 메뉴에 문제가 있습니다. 즉, 레이어가없는 계층화 된 윈도우에는 시스템 메뉴가 없습니다. 내가 시스템 메뉴를 말할 때, 응용 프로그램의 아이콘을 클릭하거나, 타이틀 바를 마우스 오른쪽 버튼으로 클릭하거나 (Shift 키를 추가하여 Windows 7에서) 작업 표시 줄의 응용 프로그램을 마우스 오른쪽 버튼으로 클릭 할 때 나타나는 메뉴를 참조합니다 :계층화 된 Windows 용 시스템 메뉴?

Control Menus

당신은, 예를 시스템 메뉴에 액세스하려고 할 때 그런 계층화 된 창의 오른쪽에있는 작업 표시 줄 아이콘을 클릭하면 계층화 된 창이 나타납니다. 왜 이런거야? 어떤 종류의 스타일을 설정할 것인가, 또는 어떤 종류의 이벤트를 처리 할 수 ​​있습니까?

다음은 신속하게 문제를 보여주는 데모입니다. 하지만 실제로 bsNone borderstyle을 사용하여 어떤 형식 으로든 재현 할 수 있습니다.

http://ompldr.org/vODd5dw

답변

13

당신은 bsNone 테두리 스타일로 제거되는 WS_SYSMENU 스타일을 다시 추가해야합니다.

type 
    TLayeredForm = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

... 

procedure TLayeredForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.Style := Params.Style or WS_SYSMENU; 
end; 
+0

감사합니다. –

+2

그건 그렇고, 공식적인 이름은 시스템 메뉴입니다. –