2011-04-11 78 views
4

在Delphi 2009中,我們遇到了分層窗口和系統菜單的問題。也就是說,我們的分層窗口(沒有邊框)沒有系統菜單。當我說系統菜單時,我指的是單擊應用程序圖標時獲得的菜單,右鍵單擊它的標題欄或(在Windows 7中,添加shift鍵)右鍵單擊任務欄中的應用程序:分層窗口的系統菜單?

Control Menus

當您嘗試訪問系統菜單,如通過右鍵單擊這種分層窗口的任務欄圖標,而不是分層窗口上升。爲什麼是這樣?是否有某種風格要設置,或者某種事件要處理?

這是一個匆忙製作的演示,展示了這個問題。不過,它可以真正以任何形式與bsNone邊界樣式進行復制。

http://ompldr.org/vODd5dw

回答

13

您需要添加回WS_SYSMENU風格,與bsNone邊框樣式刪除。

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

謝謝,這很有道理。 – 2011-04-11 21:12:03

+2

順便說一下,它的正式名稱是系統菜單。 – 2011-04-11 21:28:30