2011-06-24 15 views
25

En primer lugar, permítame decir que abomino de esta característica en Windows Vista y Windows 7. En segundo lugar, quiero hacerlo. Here es una pregunta sobre cómo hacer lo que quiero aquí, en WPF.Menú principal oculto en un programa delphi, que se muestra automáticamente con la tecla Alt

Quiero hacer lo mismo, pero en Delphi, usando componentes de stock VCL, menús TMainMenu o Action Manager, o algunos componentes de terceros disponibles, incluso Toolbar2000 o alguna otra biblioteca.

característica de Windows Vista/Windows 7 explorador principal-menús:

  • no es visible cuando se inicia la aplicación
  • presionar y soltar Alt hace visible
  • presionar y soltar Alt de nuevo lo hace invisible de nuevo
  • repetible.
  • teclas de acceso rápido trabajan en los elementos de menú, incluso cuando el menú es invisible *

(* Explorador de Windows teclas de acceso rápido Ejemplo: Ctrl + A en el Explorador de Microsoft Windows selecciona todo, incluso cuando los menús son invisibles, Alt + T = abrir Menú emergente de herramientas, incluso cuando todo el menú está oculto).

enter image description here

Actualización: demostración utilizando respuesta aceptada puede ser descargado here. (HiddenMenu.zip)

+0

Me encanta su honestidad! –

+0

Hay muchas características en el Explorador de Windows que aborrezco. ocultar extensiones para tipos de archivos conocidos/registrados, "uso compartido de archivos simplificado" y la profundidad de 9 niveles que necesita para ingresar a los cuadros de diálogo para cambiar los permisos del archivo NTFS son algunos de mis "menos favoritos". :-) –

Respuesta

31

Usa un TMainMenu con un TActionList como de costumbre.

Después, realice

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

(o simplemente quitar la asociación Menu en tiempo de diseño) y

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

y

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

No se olvide de establecer de KeyPreview a la forma true.

(Tenga en cuenta que, dado que los atajos son manejados por el TActionList, trabajan incluso si el menú es 'ido'.)

+7

+1 ¡Buen trabajo! –

+0

@David: No es tan agradable como a uno le gustaría ... Parece que la acción no se activa si haces clic en el elemento del menú. Estoy trabajando en ello ... –

+0

+1 para 'WM_EXITMENULOOP' –

Cuestiones relacionadas