【问题标题】:Hidden Main Menu in a delphi program, automatically shown using Alt keydelphi 程序中隐藏的主菜单,使用 Alt 键自动显示
【发布时间】:2011-09-22 02:09:13
【问题描述】:

首先,让我说我讨厌 Windows Vista 和 Windows 7 中的这个功能。其次,我想做它。 Here 是一个问题,询问如何在 WPF 中执行我想要的操作。

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

Windows Vista/Windows 7 资源管理器主菜单的特点:

  • 应用启动时不可见
  • 按下并释放 Alt 使其可见
  • 再次按下并释放 Alt 使其再次不可见
  • 可重复。
  • 热键适用于菜单项,即使菜单不可见*

(* Windows 资源管理器热键示例:即使菜单不可见,Microsoft Windows 资源管理器中的 Ctrl+A 也会全选,Alt+T = 显示工具弹出菜单,即使整个菜单都隐藏)。

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

【问题讨论】:

  • Windows 资源管理器中有很多我讨厌的功能。隐藏已知/注册文件类型的扩展名、“简化文件共享”以及您需要进入对话框以更改 NTFS 文件权限的 9 级深度是我“最不喜欢的”。 :-)

标签: delphi menu delphi-xe


【解决方案1】:

像往常一样使用TMainMenuTActionList

那就做吧

procedure TForm1.FormShow(Sender: TObject);
begin
  Self.Menu := nil;
end;

(或在设计时简单地删除 Menu 关联)和

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

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

不要忘记将表单的KeyPreview 设置为true

(请注意,由于快捷方式是由TActionList 处理的,因此即使菜单“消失”也可以使用。)

【讨论】:

  • @David:没有想象中的那么好...如果您单击菜单项,似乎不会触发该操作。我正在努力……
  • 不确定,但 FormKeyDown 的 if 子句中是否缺少 Key := 0;
  • @Uwe:不,你也想要默认行为。
  • '按下并释放 Alt 使其可见'。虽然用OnKeyUp 替换OnKeyDown 可能没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 2011-10-27
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多