ich tüftle gerade eine Tastaturabfrage aus, die ich mal bewusst so gehalten habe, als hätte ich den Auftrag, diesen Teil
innerhalb der GetMessage() Funktion innerhalb des Windows API zu implementieren.
Die Tastaturabfrage funktioniert aber nicht. Ich habe mir dazu eine GetMessage Funktion nachgebaut und prüfe nun auf den Empfang der WM_KEYDOWN Message.
Diese erhalte ich jedoch nicht. Was läuft hier falsch?
Code: Alles auswählen
const
PREV_KEY = $40000000;
EXT_KEY = $01000000;
if keypressed then
begin
Msg.message := WM_KEYDOWN;
waspressed := true;
kev := PollKeyEvent;
(*
{ $ifdef linux}
_key := RawReadKey;
FindSequence(_key,cchr,scan);
{ $endif}
*)
Flags := GetKeyEventFlags(kev);
ShftState := GetKeyEventShiftstate(kev);
//Shift_State ist vom Typ TShiftState wie aus der LCL bekannt
if (ShftState and kbCtrl) = kbCtrl then Include(Shift_State,ssCtrl) else Exclude(Shift_State,ssCtrl);
if (ShftState and kbAlt) = kbAlt then Include(Shift_State,ssAlt) else Exclude(Shift_State,ssAlt);
if (ShftState and kbShift) = kbShift then Include(Shift_State,ssShift) else Exclude(Shift_State,ssShift);
Key := GetKeyEventCode(kev);
c := GetKeyEventChar(kev);
//So sähe wohl die Zuweisung des Tastaturereignisses innerhalb von GetMessage aus
wmkey.Msg := Msg.message;
wmkey.CharCode := cchr;
wmkey.Keydata := Longint(scan shl 16);
wmkey.Keydata := wmkey.Keydata or PREV_KEY;
Msg.message := wmkey.Msg;
Msg.WParam := wmkey.KeyData;
//Zeichencode und Scancode an eine Speicherstelle
case scan of
1,2,4,8: wmkey.Keydata := wmkey.Keydata or 16777216;
{.$FF01..$FF2A: wmkey.Keydata := wmkey.Keydata or 1073741824;}
end;
c := #0; s := #0; key := 0; scan := 0;
Result := true;
end
else
if waspressed then
begin
Msg.message := WM_KEYUP;
wmkey.Keydata := wmkey.Keydata xor PREV_KEY; //So habe ich die WinAPI Doku verstanden
Result := true;
end;