分层窗口的系统菜单?

分层窗口的系统菜单?

问题描述:

在Delphi 2009中,我们遇到了分层窗口和系统菜单的问题。也就是说,我们的分层窗口(没有边框)没有系统菜单。当我说系统菜单时,我指的是单击应用程序图标时获得的菜单,右键单击它的标题栏或(在Windows 7中,添加shift键)右键单击任务栏中的应用程序:分层窗口的系统菜单?

Control Menus

当您尝试访问系统菜单,如通过右键单击这种分层窗口的任务栏图标,而不是分层窗口上升。为什么是这样?是否有某种风格要设置,或者某种事件要处理?

这是一个匆忙制作的演示,展示了这个问题。不过,它可以真正以任何形式与bsNone边界样式进行复制。

http://ompldr.org/vODd5dw

您需要添加回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