主窗口在任务栏上的右键菜单能改吗
delphi做的formmain在任务栏的右键菜单始终只有三项,
像foxmail,网络吸血鬼,protel99等等只要是delphi做的都一样
问题点数:20、回复次数:10Top
1 楼sundayboys(sunboy)回复于 2001-04-29 09:26:00 得分 0
好像用vc改起来方便些,delphi太困难了。Top
2 楼vince12()回复于 2001-04-29 09:38:00 得分 3
用API函数解决。Top
3 楼Fox_110(防暴狐狸)回复于 2001-04-29 16:43:00 得分 5
procedure TForm1.FormActivate(Sender: TObject);
var
menuh:HMENU;
begin
menuh:=getsystemmenu(findwindow('Tform1','Form1'),False);
InsertMenu(menuh,MF_MENUBREAK,0,100,'加入菜单项');
end;
但是要加入响应事件才有作用。Top
4 楼Musicwind(Musicwind)回复于 2001-04-29 17:03:00 得分 5
var
menuh:HMENU;
begin
menuh:=getsystemmenu( Form1.Handle, False);
InsertMenu(menuh,MF_MENUBREAK,0,100,'加入菜单项');
menuh:=getsystemmenu( Application.Handle, False);
InsertMenu(menuh,MF_MENUBREAK,0,100,'加入菜单项');
end;
Top
5 楼Musicwind(Musicwind)回复于 2001-04-29 17:04:00 得分 0
回复人:Musicwind(风里来雨里去) (2001-4-29 17:03:00) 得0分
procedure TForm1.FormCreate( Sender: TObject );
var
menuh:HMENU;
begin
menuh:=getsystemmenu( Handle, False);
InsertMenu(menuh,MF_MENUBREAK,0,100,'加入菜单项');
menuh:=getsystemmenu( Application.Handle, False);
InsertMenu(menuh,MF_MENUBREAK,0,100,'加入菜单项');
end;
Top
6 楼Musicwind(Musicwind)回复于 2001-04-29 17:05:00 得分 0
除了 InsertMenu, 还有许多相关函数,查看 Win32Help(Delphi里带的)Top
7 楼sanjianxia(三剑侠)回复于 2001-04-29 17:40:00 得分 0
我也想知道!Top
8 楼Kingron(单身走我路……)回复于 2001-04-29 18:36:00 得分 5
不是,这个问题bcb说过了,不是form的菜单,而是application的菜单!
必须修改VCL的源代码才可以的。下面是以前的讨论:
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个应用上的菜单项删除了。 Top
9 楼snjun(XX)回复于 2001-04-30 14:48:00 得分 0
多谢kingron老兄和解惑的各位兄弟姐妹
我是一个delphi新手,听kingron一说又发现了delphi
的目录下还有这多好东东,大开眼界,呆会儿就给分Top
10 楼kingsong(牛大锅)回复于 2001-04-30 16:32:00 得分 2
长见识了Top




