第一种方法
在 OnCreate 中加入 GetSystemMenu(Application.Handle, True);
第二种方法
从我开始用CB起,我就一直在琢磨着这个问题:
为何CB做出来的程序,在任务栏上的菜单只有那三项呢??
直到今天,我仔细研究了Forms.pas 这个文件,才解决了这个问题!!!!!
CB的程序在任务栏上的是Application的,这是谁都知道的,可是为何却只有那三项,而不是完整的呢?就因为在Forms.pas里,在建立Application的时候,就已经把另外的那几项删掉了。可是我看完了整个Application,还是没有发现它到底在那里会删除另外几项的原因。没办法,只好另外想办法了。就是不让Application在任务栏显示,而把Form显示在任务栏上。这样就会有完整的菜单了。
先在E:\cbuilder5\CBuilder5\Source\Vcl里找到Forms.pas,然后Copy一份到另外,我们就修改这个另外的文件。
在Forms.pas的procedure TApplication.CreateHandle; 处,第6105行,
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);
SetWindowLong(FHandle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); //《—–我加的。
end;
end;
procedure TApplication.Initialize;事件中,第6716行,
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance); //************************************
SetWindowLong(FMainForm.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW); // 我加的
if (FMainForm.Caption=’) then FMainForm.Caption:=Application.Title; // 也是。
end;
end;
修改完了。
然后测试。先新建一个新文件。然后,Project->Add to Project…选择我们已经修改了的Forms.pas.然后,运行就行了!!!
再看看任务栏的菜单??!!!行了吧!!!!!