2011-06-24 15 views
25

Po pierwsze, pozwól mi powiedzieć, że obrzydzę tę funkcję w Windows Vista i Windows 7. Po drugie, chcę to zrobić. Here to pytanie, jak zrobić to, co chcę tutaj, w WPF.Ukryte menu główne w programie delphi, automatycznie pokazane za pomocą klawisza Alt

Chcę zrobić to samo, ale w Delphi, używając komponentów giełdowych VCL, menu TMainMenu lub Menedżera akcji, lub niektórych dostępnych komponentów stron trzecich, nawet Toolbar2000 lub innej biblioteki.

funkcja systemu Windows Vista/Windows 7 Explorer main-menu:

  • to nie jest widoczne, gdy aplikacja rozpoczyna
  • naciskając i zwalniając klawisz Alt sprawia, że ​​widoczne
  • naciskając i ponownie uwalniając Alt czyni go niewidzialnym ponownie
  • powtarzalny.
  • skróty klawiszowe działają na pozycji menu, nawet gdy menu jest niewidoczny *

(* Windows Explorer Hotkeys przykład: Ctrl + A w Eksploratorze Windows wybiera wszystkie, nawet jeśli menu są niewidoczne, Alt + T = wychować Menu podręczne Narzędzia, nawet gdy całe menu jest ukryte).

enter image description here

Aktualizacja: Demo stosując przyjętą odpowiedź można pobrać here. (HiddenMenu.zip)

+0

Kocham swoją szczerość! –

+0

Jest wiele funkcji w Eksploratorze Windows, których brzydzę się. ukryj rozszerzenia znanych/zarejestrowanych typów plików, "uproszczone udostępnianie plików", a 9-poziomowa głębokość, którą musisz przejść do okien dialogowych, aby zmienić uprawnienia do plików NTFS, to niektóre z moich "najmniej ulubionych". :-) –

Odpowiedz

31

Użyj TMainMenu z TActionList jak zwykle.

Następnie zrobić

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

(lub po prostu usunąć skojarzenie Menu w czasie projektowania) oraz

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

i

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

Nie zapomnij ustawić formularz na KeyPreview do true.

(Zauważ, że ponieważ Skróty są obsługiwane przez TActionList, pracują nawet jeśli menu jest „zniknął”.)

+7

+1 Dobra robota !! –

+0

@David: Nie tak miły, jak by się chciał ... Wygląda na to, że akcja nie zostanie wywołana, jeśli klikniesz element menu. Pracuję nad tym ... –

+0

+1 dla 'WM_EXITMENULOOP' –

Powiązane problemy