首页  编辑  

关于Delphi程序在任务栏按钮的菜单问题

Tags: /超级猛料/VCL/Form,窗体/Application Form/   Date Created:

关于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;

TaskMenu.pas (3.5KB)
img_15001.bmp (74.9KB)
img_25325.bmp (42.2KB)