![]() |
HotKey Experimente...
Hi
ich spiele im Moment etwas mit Hotkeys rum... ich möchte drei Systemweite Hotkeys anlegen und auf diese Reagieren. folgender Code basiert auf einem Code aus dem DF. Die Hotkeys werden in einer Ini gespeichert Um die HotKeys zu setzen nutze ich THotKey
Delphi-Quellcode:
Die Werte kommen auch ordnungsgemäß in der Ini-Datei an und werden wieder geladen, aber es passiert nichts :(
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
[.....] procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey=HKA_Reset then MI_ClpResetClick(Self) else if Msg.HotKey=HKA_Code then MI_ClpCodeClick(Self) else if Msg.HotKey=HKA_Decode then MI_ClpDecodeClick(Self); end; procedure TForm1.CreateHotKeys; begin HKA_Reset:=GlobalAddAtom('ResetClp'); HKA_Code:=GlobalAddAtom('CodeClp'); HKA_Decode:=GlobalAddAtom('DecodeClp'); RegisterHotKey(0,HKA_Reset,0,HKVK_Reset); RegisterHotKey(0,HKA_Code,0,HKVK_Code); RegisterHotKey(0,HKA_DeCode,0,HKVK_DeCode); end; procedure TForm1.DestroyHotKeys; begin UnRegisterHotKey(0,HKA_Reset); GlobalDeleteAtom(HKA_Reset); UnRegisterHotKey(0,HKA_Code); GlobalDeleteAtom(HKA_Code); UnRegisterHotKey(0,HKA_DeCode); GlobalDeleteAtom(HKA_DeCode); end; procedure TForm1.LoadFromIni; begin HKVK_Reset:=Ini.ReadInteger('HotKeys','ResetVK',0); HKVK_Code:=Ini.ReadInteger('HotKeys','CodeVK',0); HKVK_Decode:=Ini.ReadInteger('HotKeys','DecodeVK',0); EdtHK_Reset.HotKey:=HKVK_Reset; EdtHK_Code.HotKey:=HKVK_Code; EdtHK_Decode.HotKey:=HKVK_Decode; end; procedure TForm1.SaveToIni; begin Ini.WriteInteger('HotKeys','ResetVK',HKVK_Reset); Ini.WriteInteger('HotKeys','CodeVK',HKVK_Code); Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode); Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode); end; ist da irgendein grober Fehler drin? |
Re: HotKey Experimente...
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen :mrgreen:
Der erste Parameter von RegisterHotKey muss Form1.Handle sein, weil das das Fenster ist, dass die WM_HOTKEY Nachricht bekommt :zwinker: |
Re: HotKey Experimente...
Hi,
Zitat:
Wie Gerrit sagt, musst du schon das Handle des Formulars angeben, sonst landen die WM_HOTKEY-Nachrichten ja irgendwo im Nirvana. ;) Außerdem musst du afaik Msg.WParam überprüfen. Oops... ich sehe gerade, dass du TWMHotKey verwendest. Da bin ich mir nicht ganz sicher, aber ich schätze es wird am Handle liegen ;) Chris |
Re: HotKey Experimente...
Zitat:
da war ich mir sowieso nicht so ganz sicher, weil im DF stannt da Handle...und ich wusste nicht so richtig was da rein sollte...also erstmal 0 :) dagegen das was ich da überprüfen soll ich unverändert und steht da so :) danke euch beiden!!! |
Re: HotKey Experimente...
Nein, tut mir leid, hilft nix :?
Zitat:
|
Re: HotKey Experimente...
Hi,
naja... indirekt habe ich eine Alternative. Ich habe es ein wenig anders gemacht, da mein Projekt ziemlich objekt-orientiert ist. D.h. mein Hotkey hat eine eigene Klasse spendiert bekommen. Aber ich kann mal skizzieren, wie das bei mir aussieht.
Delphi-Quellcode:
Ansonsten ist meine Klasse ähnlich zu dem, was du da "fabriziert" (:mrgreen:) hast. Wenn aber das jetzt auch nicht klappt oder du das nicht verstehst mit der Klasse, dann kann ich auch die ganze Klasse posten.
// Im Konstruktur der Klasse wird ein Handle für die Klasse erzeugt und eine Nachrichten-Methode deklariert. Das sieht so aus:
fHandle := Classes.AllocateHWnd(self.MsgProc); // Wobei fHandle das Feld für das Handle ist und MsgProc die Methode für die Nachrichten ist. // MsgProc sieht so aus: procedure THotkeyItem.MsgProc(var msg: TMessage); begin // Nachrichtenschleifen if msg.Msg = WM_HOTKEY then if Assigned(FOnHotkey) then fOnHotKey(self, self.Name) else DefWindowProc(FHandle, msg.Msg, msg.WParam, msg.LParam); end; // fOnHotKey ist hier nur eine beliebige Methode. Dort kannst du hinschreiben was du willst und was du gerade brauchst Chris PS: Obiger Code ist erfolgreich in meinem ![]() |
Re: HotKey Experimente...
Ich hab noch ne Frage zum Thema hotkeys...
kann ich Hotkeys reservieren die einen Teil statisch und einen Teil beliebig haben? also zum Beispiel Strg + Alt + Zahlentaste |
Re: HotKey Experimente...
Moin Gereon,
Du musst jede gewünschte Tastenkombination einzeln registrieren. |
Re: HotKey Experimente...
Zitat:
naja, muss wohl :) |
Re: HotKey Experimente...
Application.Handle duerfte am besten funktionieren. Das ist das eigentliche Hauptfenster der Applikation.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz