Скрытое главное меню в программе Delphi, автоматически отображается с помощью клавиши Alt - PullRequest
26 голосов
/ 24 июня 2011

Во-первых, позвольте мне сказать, что я отказался от этой функции в Windows Vista и Windows 7. Во-вторых, я хочу это сделать. Здесь - вопрос, как сделать то, что я хочу, здесь, в WPF.

Я хочу сделать то же самое, но в Delphi, используя стандартные компоненты VCL, меню TMainMenu или Action Manager или некоторые доступные сторонние компоненты, даже Toolbar2000 или какую-то другую библиотеку.

Функция главного меню проводника Windows Vista / Windows 7:

  • не видно при запуске приложения
  • нажатие и отпускание Alt делает его видимым
  • повторное нажатие и отпускание Alt снова делает его невидимым
  • повторяемым.
  • горячие клавиши работают с пунктами меню, даже когда меню невидимо *

(* Пример с горячими клавишами Windows Explorer: Ctrl + A в Microsoft Windows Explorer выбирает все, даже когда меню невидимы, Alt + T = вызывает всплывающее меню Tools, даже когда все меню скрыто).

enter image description here

Обновление: Демонстрацию с использованием принятого ответа можно загрузить здесь . (HiddenMenu.zip)

1 Ответ

32 голосов
/ 24 июня 2011

Используйте TMainMenu с TActionList как обычно.

Тогда сделай

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, они работают, даже если меню «пропало».)

...