关于Delphi程序在任务栏按钮的菜单问题
我们知道,Delphi编写的程序,在任务栏的按钮上面的菜单,只有几项:
而一般的Windows的程序,菜单上面有更多的项目:
虽然使用的时候没有什么关系,但始终是不舒服!那么能不能把Delphi编写的程序的菜单也改成和其他程序一样呢?当然可以!
方法如下:
首先,重载主窗体的CreateParams,修改如下:
procedure TFrmModal.CreateParams(var Para: TCreateParams);
begin
inherited;
if Application.MainForm <> nil then Para.WndParent := GetActiveWindow;
end;
然后在主窗体的OnCreate中添加如下代码:
with Application do
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
OK,按F9运行你的程序看看?:-)。
注意,一定要对主窗体进行上面的操作哦。
BUG:
感谢stanely发现这个BUG:最小化只是最小化application这个窗体,应用程序主窗体没反应阿!
解决方法,拦截WM_SYSCOMMAND消息:
procedure TFrmMain.WMSysCommand(var msg: TMessage);
begin
if msg.WParam = SC_MINIMIZE then
Self.WindowState := wsMinimized
else
inherited;
end;
这样还有一个额外的好处,就是Windows在平铺和排列窗口的时候,不会出现空白的情况了,很正常的。
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
此文章由 http://www.ositren.com 收集整理 ,地址为:
http://www.ositren.com/htmls/67989.html