Delphi重现完整的任务栏菜单

第一种方法

   在 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.然后,运行就行了!!!
    再看看任务栏的菜单??!!!行了吧!!!!!



发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 2 = 5