【问题标题】:System Menu for Layered Windows?分层窗口的系统菜单?
【发布时间】:2011-08-03 09:17:57
【问题描述】:
我们在 Delphi 2009 中遇到了分层窗口和系统菜单的问题。也就是说,我们的分层窗口(没有边框)没有系统菜单。当我说系统菜单时,我指的是单击应用程序图标时获得的菜单,右键单击其标题栏或(在 Windows 7 中,添加 shift 键)右键单击任务栏中的应用程序:
当您尝试访问系统菜单时,例如通过右键单击此类分层窗口的任务栏图标,分层窗口会升起。为什么是这样?是否需要设置某种样式或处理某种事件?
这是一个匆忙制作的演示,显示了该问题。不过,它确实可以用任何带有 bsNone 边框样式的形式复制。
http://ompldr.org/vODd5dw
【问题讨论】:
标签:
delphi
winapi
vcl
layered-windows
systemmenu
【解决方案1】:
您需要重新添加 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;