2012-07-24 34 views
5

Supongamos que tengo un formulario, con una barra de menú en él. Tengo un elemento en la barra de menú, un TMenuItem, para el cual puedo asignar un combo de tecla de acceso directo, por ejemplo, por ejemplo "Ctrl-I". Pero cuando asigno la propiedad "Cortocircuito" para el TMenuItem, parece que solo cambia la apariencia visual del elemento del menú para mostrar el código de acceso directo en lugar de escuchar automáticamente la tecla de acceso directo que se va a presionar y activar mi código de ActionManager.Agregar una tecla de acceso rápido a mi aplicación Delphi

Mi google-fu parece fallar hoy, solo encuentro artículos sobre cómo asignar global-hot-keys para Windows, no cómo asignar teclas específicas de aplicación que solo funcionan en el formulario activo.

¿Alguien puede describirme los pasos necesarios para agregar una tecla de acceso rápido más allá de solo agregar la propiedad del acceso directo en el menú. Estoy pensando en algún lugar en el que probablemente necesite configurar el formulario para escuchar la entrada del teclado y atrapar la pulsación de tecla y responder a ella? Pero no estoy exactamente seguro de dónde o cómo sería la forma Delphi de hacerlo.

+4

Normalmente, no hay ningún problema en hacer lo que desee. Simplemente funciona, automáticamente. Como está utilizando un administrador de acciones, debe usar la propiedad 'ShortCut' de' TAction', no '' TMenuItem'. –

+0

Sí, solo asigne la propiedad ShortCut y todo está bien. –

+0

Piense en los elementos del menú como simplemente "una forma dinámica de presentar mis acciones definidas estáticamente", por lo tanto, configuré mis acciones, y no las propiedades de mi menú. Las propiedades del elemento del menú se originan en la lista Acción, o en el administrador de acciones, y se propagan hacia afuera. –

Respuesta

6

Parece que está utilizando acciones (ActionManager), así que asigne su atajo a la acción relevante en su lugar. (Asignación de la acción a la Menultem entonces asignará el acceso directo al elemento de menú, también.)

+0

Esto funcionó, ¡gracias! –

-1

Considere el ejemplo de identificadores de ventana no se hayan previsto mensaje VCL, para lo cual usamos WM_HOTKEY. Este mensaje se envía por ventana registrada en la tecla rápida de Windows que permite que el programa responda, incluso sin el foco de entrada:

type 
TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    private 
    { Private declarations } 
    // Declare a event handler 
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    // Registering a hotkey Ctrl+Alt+F5 
    RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5); 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
    // Unregisters a hotkey 
    UnRegisterHotKey(Handle, 0); 
end; 

procedure TForm1.WMHotKey(var Msg: TWMHotKey); 
begin 
    // This procedure is called when a window message WM_HOTKEY 
    inherited; // We give the form to process the message, 
       // if she already has its handler 
    Beep;  // We perform additional actions 
end; 
+1

-1 pregunta claramente que las teclas rápidas de todo el sistema no son lo que se requiere –

+0

de todos modos, es una solución útil que muestra cómo configurar la tecla rápida global – jimsweb

Cuestiones relacionadas