delphi程序中的隐藏主菜单,使用Alt键自动显示

War*_* P 26 delphi menu delphi-xe

首先,我要说我在Windows Vista和Windows 7中憎恶这个功能.其次,我想这样做. 是一个问题,询问如何在WPF中执行我想要的操作.

我想做同样的事情,但在Delphi中,使用VCL库存组件,TMainMenu或Action Manager菜单,或一些可用的第三方组件,甚至Toolbar2000或其他一些库.

Windows Vista/Windows 7资源管理器主菜单的功能:

  • 应用程序启动时它不可见
  • 按下并释放Alt使其可见
  • 再次按下并释放Alt使其再次不可见
  • 重复.
  • 热键可以处理菜单项,即使菜单不可见*

(*Windows资源管理器热键示例:Microsoft Windows资源管理器中的Ctrl + A即使菜单不可见也会选择所有菜单,Alt + T =调出工具弹出菜单,即使隐藏整个菜单也是如此).

在此输入图像描述

更新:可以在此处下载使用已接受答案的演示.(HiddenMenu.zip)

And*_*and 32

使用TMainMenuTActionList往常一样.

然后做

procedure TForm1.FormShow(Sender: TObject);
begin
  Self.Menu := nil;
end;
Run Code Online (Sandbox Code Playgroud)

(或者只是Menu在设计时删除关联)和

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_MENU) or (Key = VK_F10) then
    Menu := MainMenu1;
end;
Run Code Online (Sandbox Code Playgroud)

procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_EXITMENULOOP:
      SetMenu(Handle, 0);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

不要忘记将表单设置KeyPreviewtrue.

(请注意,由于快捷方式由快捷方式处理TActionList,即使菜单"已消失",它们也能正常工作.)