Tastaturabfrage mit PollKeyEvent, wie?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Tastaturabfrage mit PollKeyEvent, wie?

Beitrag von thosch »

Hallo,

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;
 

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Tastaturabfrage mit PollKeyEvent, wie?

Beitrag von thosch »

Habs nun alleine hinbekommen, nach dem in der Freepascal Doku vorhandenen Beispiel.

Antworten