![]() |
Delphi-Version: 7
WM_KEYDOWN in ApplicationEventsMessage()
Moin, Moin.
Ich muss mit TApplicationEvents Tastatureingaben (incl. Tastenkombinationen) auswerten. Je nach Tastenkombination werden verschiedene MenuEinträge oder Speedbuttons aufgerufen. Meine Lösung ist ...
Delphi-Quellcode:
Für fast alle Kombinationen funktioniert das auch; aber leider nicht für die Fälle ALT+Taste und SHIFT+ALT+Taste. Hmm, war lange Zeit "inaktiv" und habe leider gar keine Idee. Das Erkennen von ALT+Taste wäre aber sehr wichtig! Wo ist der Fehler??
procedure TfoMain.ApplicationEventsMessage(var Msg:tagMSG;var Handled:Boolean);
var Shift : TShiftState; Key : Word; procedure GetShiftState(var Shift:TShiftState); var KeyboardState : TKeyboardState; begin Shift:=[]; GetKeyboardState(KeyboardState); if (KeyboardState[vk_Shift] and 128=128) then Shift:=Shift+[ssShift]; if (KeyboardState[vk_Control] and 128=128) then Shift:=Shift+[ssCtrl]; if (KeyboardState[vk_Menu] and 128=128) then Shift:=Shift+[ssAlt]; end; begin if Msg.message=WM_KeyDown then begin GetShiftState(Shift); Key:=Msg.wParam; if Shift=[] then // ...................................................... xx case Msg.wParam of vk_F1 : begin m_HelpCommandsClick(nil); Handled:=true end; // .. end else if Shift=[ssShift] then // ......................................... Shift+xx case Msg.WParam of ord('O') : begin sbuInsertOperation.Click; Handled:=true end; // .. end else if Shift=[ssCtrl] then // ........................................... Ctrl+xx case Msg.WParam of vk_Up : begin sbuUpSizeFont.Click; Handled:=true end; // .. end else if Shift=[ssAlt] then // ............................................. Alt+xx Showmessage('alt+xx')// wird NICHT erkannt else if Shift=[ssShift,ssCtrl] then // ............................. Shift+Ctrl+xx case Msg.WParam of ord('L') : begin sbuLoad.Click; Handled:=true end; // .. end else if Shift=[ssShift,ssAlt] then // ............................... Shift+Alt+xx Showmessage('shift+alt+xx') // wird als Shift+xx erkannt else if Shift=[ssCtrl,ssAlt] then // ................................. Ctrl+Alt+xx Showmessage('ctrl+alt+xx'); end; end; |
AW: WM_KEYDOWN in ApplicationEventsMessage()
Delphi-Quellcode:
if Msg.message=WM_SYSKEYDOWN then
|
AW: WM_KEYDOWN in ApplicationEventsMessage()
Ok, funktioniert jetzt alles wie gewünscht!
Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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