//这是我以前的一个问题的讨论:
有一个消息,值为787($0313),截获它,任务按钮上的菜单就弹不出来。这个消息没有找到任何定义和介绍。
鼠标消息还是没有发现,估计得用钩子勾住鼠标。Application本身也是一个窗口(就是哪个按钮呀)。如下就不一样了。
InsertMenu(GetSystemMenu(Application.Handle, False), 0, MF_BYPOSITION + MF_STRING, 0, 'test');
在TApplication.CreateHandle中有如下代码:
SysMenu := GetSystemMenu(FHandle, False);
DeleteMenu(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
DeleteMenu(SysMenu, SC_SIZE, MF_BYCOMMAND);
if NewStyleControls then DeleteMenu(SysMenu, SC_MOVE, MF_BYCOMMAND);
去掉就可以了选择菜单Project->Options。在Packages页中关闭Build with runtime packages 选项(即不选中); 并在Dicectorise/Conditionals页中Search path中添加一项[$DELPHI]\Source\VCL。
将DelphiX\Lib目录下的Forms.dcu改名为OriginForms.dcu。 打开DelphiX\Source\VCL目录下的Forms.pas屏蔽掉TApplication.CreateHandle中如下代码:
SysMenu := GetSystemMenu(FHandle, False);
DeleteMenu(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
DeleteMenu(SysMenu, SC_SIZE, MF_BYCOMMAND);
if NewStyleControls then DeleteMenu(SysMenu, SC_MOVE, MF_BYCOMMAND); 选择菜单Project->Build 你的工程即可(请先保存工程,因为有时Build后会兰屏,主要是因为装了一些构件。重运行Delphi即可)。 最后,选择菜单Project->Options。去掉刚才在Dicectorise/Conditionals页中Search path中添加的[$DELPHI]\Source\VCL这一项。
将DelphiX\Source\VCL目录下的Forms.dcu 复制到DelphiX\Lib目录。再删除DelphiX\Source\VCL目录下其它无用了的*.dcu文件。
在Application中的WndProc中没有对这3个消息(SC_SIZE、SC_MOVE、SI_MAXIMIZE)的处理。而且,Application也只有Minimize和Restore这两个功能函数。我想这是由于Delphi的普通应用的风格决定的。一般其它窗口不包含在主窗口之中(即使是MDI程序,非子窗口也是这样),因此,对于应用的最大、移动的操作在逻辑上存在矛盾,所以Borland将这3个应用上的菜单项删除了。
有一个消息,值为787($0313),截获它,任务按钮上的菜单就弹不出来。这个消息没有找到任何定义和介绍。
鼠标消息还是没有发现,估计得用钩子勾住鼠标。Application本身也是一个窗口(就是哪个按钮呀)。如下就不一样了。
InsertMenu(GetSystemMenu(Application.Handle, False), 0, MF_BYPOSITION + MF_STRING, 0, 'test');
在TApplication.CreateHandle中有如下代码:
SysMenu := GetSystemMenu(FHandle, False);
DeleteMenu(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
DeleteMenu(SysMenu, SC_SIZE, MF_BYCOMMAND);
if NewStyleControls then DeleteMenu(SysMenu, SC_MOVE, MF_BYCOMMAND);
去掉就可以了选择菜单Project->Options。在Packages页中关闭Build with runtime packages 选项(即不选中); 并在Dicectorise/Conditionals页中Search path中添加一项[$DELPHI]\Source\VCL。
将DelphiX\Lib目录下的Forms.dcu改名为OriginForms.dcu。 打开DelphiX\Source\VCL目录下的Forms.pas屏蔽掉TApplication.CreateHandle中如下代码:
SysMenu := GetSystemMenu(FHandle, False);
DeleteMenu(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
DeleteMenu(SysMenu, SC_SIZE, MF_BYCOMMAND);
if NewStyleControls then DeleteMenu(SysMenu, SC_MOVE, MF_BYCOMMAND); 选择菜单Project->Build 你的工程即可(请先保存工程,因为有时Build后会兰屏,主要是因为装了一些构件。重运行Delphi即可)。 最后,选择菜单Project->Options。去掉刚才在Dicectorise/Conditionals页中Search path中添加的[$DELPHI]\Source\VCL这一项。
将DelphiX\Source\VCL目录下的Forms.dcu 复制到DelphiX\Lib目录。再删除DelphiX\Source\VCL目录下其它无用了的*.dcu文件。
在Application中的WndProc中没有对这3个消息(SC_SIZE、SC_MOVE、SI_MAXIMIZE)的处理。而且,Application也只有Minimize和Restore这两个功能函数。我想这是由于Delphi的普通应用的风格决定的。一般其它窗口不包含在主窗口之中(即使是MDI程序,非子窗口也是这样),因此,对于应用的最大、移动的操作在逻辑上存在矛盾,所以Borland将这3个应用上的菜单项删除了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货