2012-07-24 19 views
5

Powiedz, że mam formularz z paskiem menu na nim. Mam element na pasku menu, TMenuItem, dla którego mogę przypisać kombinację klawiszy skrótu, na przykład "Ctrl-I". Ale kiedy przypisuję właściwość "ShortCut" dla TMenuItem, wydaje się, że po prostu zmienia się wygląd elementu menu, aby pokazać kod skrótu zamiast automatycznego słuchania skrótu klawiszowego, który ma zostać naciśnięty i uruchomienia mojego kodu ActionManager.Dodawanie skrótu klawiszowego do mojej aplikacji Delphi

Mojego google-fu chyba dzisiaj nie udaje się, znajduję tylko artykuły o tym, jak przypisać globalne klawisze skrótów dla okien, a nie jak przypisać specjalne klawisze skrótów, które działają tylko w aktywnym formularzu.

Czy ktoś kontur dla mnie niezbędne kroki, aby dodać klawisz skrótu poza prostu dodanie właściwości skrótu w menu. Zastanawiam się gdzieś, gdzie prawdopodobnie będę musiał ustawić formularz tak, aby nasłuchiwał wejścia klawiatury i pułapki na naciśnięcie klawisza i reagował na to? Ale nie jestem do końca pewien, gdzie i jak powinien wyglądać sposób Delphi.

+4

Zwykle nie ma problemu w tym, co chcesz. Działa po prostu automatycznie. Ponieważ używasz menedżera akcji, powinieneś użyć właściwości 'ShortCut' z' TAction', a nie 'TMenuItem'. –

+0

Tak, wystarczy przypisać właściwość ShortCut i wszystko jest w porządku. –

+0

Pomyśl o elementach menu jako o "jednym dynamicznie zbudowanym sposobie prezentacji moich statycznie zdefiniowanych działań", dlatego konfiguruję moje działania, a nie moje właściwości elementu menu. Właściwości elementu menu pochodzą z listy akcji lub menedżera akcji i rozprzestrzeniają się na zewnątrz. –

Odpowiedz

6

Wydaje się, że za pomocą działań (ActionManager), więc przypisać skrót do właściwego działania zamiast. (Przypisanie akcji do MenuItem następnie przypisać skrót do menu, zbyt.)

+0

To zadziałało, dzięki! –

-1

Rozważmy przykład klamki okienne nie są przewidziane w komunikacie VCL, dla którego używamy WM_HOTKEY. Ta wiadomość jest wysyłana listem okna w systemie Windows skrótu, który pozwala programowi na nią odpowiedzieć, nawet bez naciskiem wejściowych:

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 pytanie wyraźnie stwierdza, że ​​ogólnosystemowe klawisze skrótów nie są wymagane, tak czy inaczej, –

+0

jest to przydatne rozwiązanie pokazujące, jak skonfigurować globalny skrót klawiszowy – jimsweb

Powiązane problemy