Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hidden Main Menu in a delphi program, automatically shown using Alt key

First, let me say that I abominate this feature in Windows Vista and Windows 7. Second, I want to do it. Here is a question asking how to do what I want here, in WPF.

I want to do the same thing, but in Delphi, using VCL stock components, TMainMenu or Action Manager menus, or some available third party components, even Toolbar2000 or some other library.

Feature of Windows Vista/Windows 7 explorer main-menus:

  • it's not visible when the app starts
  • pressing and releasing Alt makes it visible
  • pressing and releasing Alt again makes it invisible again
  • repeatable.
  • hotkeys work on menu items, even when menu is invisible*

(* Windows Explorer Hotkeys Example: Ctrl+A in Microsoft Windows Explorer selects all even when the menus are invisible, Alt+T = bring up Tools popup menu, even when the whole menu is hidden).

enter image description here

Update: Demo using accepted answer can be downloaded here. (HiddenMenu.zip)

like image 627
Warren P Avatar asked Jun 24 '11 14:06

Warren P


1 Answers

Use a TMainMenu with a TActionList as usual.

Then do

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

(or simply remove the Menu association at design time) and

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

and

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

Don't forget to set the form's KeyPreview to true.

(Notice that, since the shortcuts are handled by the TActionList, they work even if the menu is 'gone'.)

like image 187
Andreas Rejbrand Avatar answered Sep 28 '22 03:09

Andreas Rejbrand