2012-07-24 12 views
5

Dire che ho un modulo, con una barra dei menu. Ho un elemento sulla barra dei menu, un TMenuItem, per il quale posso assegnare una combinazione di tasti di scelta rapida, ad esempio "Ctrl-I". Ma quando assegno la proprietà "ShortCut" per TMenuItem, sembra modificare l'aspetto visivo della voce di menu per mostrare il codice di scelta rapida piuttosto che ascoltare automaticamente il tasto di scelta rapida da premere e attivare il codice ActionManager.Aggiunta di una hot-key alla mia app Delphi

Il mio google-fu sembra non riuscire oggi, sto solo cercando articoli su come assegnare global-hot-key per Windows, non su come assegnare hot-keys specifici per l'applicazione che funzionano solo sul modulo attivo.

Qualcuno può delineare per me i passaggi necessari per aggiungere un tasto di scelta rapida oltre la semplice aggiunta della proprietà di scelta rapida nel menu. Sto pensando da qualche parte che probabilmente ho bisogno di impostare il modulo per ascoltare l'input da tastiera e intrappolare il keypress e rispondere ad esso? Ma non sono esattamente sicuro di dove o quale sarebbe il modo di fare Delphi.

+4

Normalmente, non c'è alcun problema nel fare ciò che si desidera. Funziona, automaticamente. Dato che stai usando un gestore di azioni, dovresti usare la proprietà 'ShortCut' del' TAction', non il 'TMenuItem'. –

+0

Sì, basta assegnare la proprietà ShortCut e va tutto bene. –

+0

Pensate alle voci di menu come a "un modo dinamico di presentare le mie azioni definite staticamente", quindi, ho impostato le mie azioni e non le proprietà delle mie voci di menu. Le proprietà della voce di menu hanno origine nell'elenco di azioni o gestore di azioni e si propagano all'esterno. –

risposta

6

Sembra che tu stia utilizzando Azioni (ActionManager), quindi assegna invece il collegamento all'azione pertinente. (Assegnazione l'azione al MenuItem sarà quindi assegnare il collegamento alla voce di menu, anche.)

+0

Questo ha funzionato, grazie! –

-1

Si consideri l'esempio di maniglie delle finestre non sono forniti per il messaggio VCL, per il quale usiamo WM_HOTKEY. Questo messaggio viene inviato dalla finestra registrata nel tasto di scelta rapida di Windows che consente al programma di rispondere ad esso, anche senza lo stato attivo:

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 domanda indica chiaramente che i tasti di scelta rapida del sistema non sono ciò che è richiesto –

+0

in ogni caso, è una soluzione utile che mostra come impostare il tasto di scelta rapida globale – jimsweb

Problemi correlati