关于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);
---------------------------------------
一个偏方,哈哈:)
procedure TForm1.btn1Click(Sender: TObject);
var
P: PHandle;
begin
P := @Application.Handle;
P^ := Handle;
end;