Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Taste AltGr
galagher - Fr 12.03.21 20:35
Titel: Taste AltGr
Hallo!
Ich möchte die AltGr-Taste abfragen und bin einzig auf dies hier gestossen:
https://www.c-plusplus.net/forum/topic/232511/erledigt-welchen-key-code-hat-alt-gr/6
Man kann diese Taste also mit
GetAsyncKeyState(165) = -32767 auswerten.
ssAltGr gibt es bei Delphi nicht, bei Lazarus schon. Es ist mir nicht gelungen,
ssAltGr in Delphi nachzubauen.
Also habe ich mir eine Funktion erstellt:
Delphi-Quelltext
1: 2: 3: 4:
| function ssAltGr_in_Shift: Boolean; begin Result := (GetAsyncKeyState(165) = -32767); end; |
Ich hätte aber gerne eine Abfrage wie
Delphi-Quelltext
1:
| if (ssAltGr in Shift) then |
Doch wie mache ich das?
ssShift, ssAlt, ssCtrl sind andere Datentypen...
galagher - Sa 13.03.21 22:43
Th69 hat folgendes geschrieben : |
Wenn es dir nur um die Syntax bzgl. in geht, dann erzeuge einen eigenen set-Datentyp und eine Funktion (oder analog zu Shift eine Eigenschaft) dazu. |
Ist überlegenswert, ja!
Danke! Habe es jetzt so implementiert.
hRb - So 14.03.21 16:13
Hallo galagher,
ich hatte vor mal in ein Programm ins Keydown-Ereignus folgende Prozedur eingebaut, um den Tastencode anzuzeigen
(etwas abgespeckt)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| procedure KeyStatus(Key: Integer; Shift: TShiftState);
var T: string; b1, b2, b3: Integer; begin with Fi[FiNrAktiv] do begin kyShift := false; kyAlt := false; kyStrg := false; kyStrg2 := false; kyAltGr := false; kyStrgAlt := false; if GetKeyState(16) and (-32768 + 128) <> 0 then b1 := 1 else b1 := 0; if GetKeyState(17) and (-32768 + 128) <> 0 then b2 := 1 else b2 := 0; if GetKeyState(18) and (-32768 + 128) <> 0 then b3 := 1 else b3 := 0; if (b1 = 1) and (GetKeyState(160) and (-32768 + 128) <> 0) then begin kyShift := True; T := 'Li-Shift'; end else if (b1 = 1) and (GetKeyState(161) and (-32768 + 128) <> 0) then begin kyShift := True; T := 'Re-Shift'; end; if (b2 = 1) and (GetKeyState(162) and (-32768 + 128) <> 0) then begin kyStrg := True; T := 'Li-Strg'; end else if (b2 = 1) and (GetKeyState(163) and (-32768 + 128) <> 0) then begin kyStrg2 := True; T := 'Re-Strg'; end; if (b3 = 1) and (GetKeyState(164) and (-32768 + 128) <> 0) then begin kyAlt := True; T := T + 'Alt'; end else if (b3 = 1) and (b2 = 1) and (GetKeyState(165) and (-32768 + 128) <> 0) then begin if kyStrg = True then begin kyStrg := false; kyAltGr := True; T := 'AltGr'; end; end; if (GetKeyState(20) and (-32768 + 128) <> 0) then T := 'li-Feststell-Shift'; if kyStrg2 = True then kyStrg := True; Form1.Statusbar1.Panels[6].Text := T + IntToStr(Key); end; end; |
Gruß hRb
galagher - Mo 15.03.21 07:43
hRb hat folgendes geschrieben : |
ich hatte vor mal in ein Programm ins Keydown-Ereignus folgende Prozedur eingebaut, um den Tastencode anzuzeigen |
Meine einfache Funktion tut's doch auch! Leider kann man
AltGr nicht in
TShiftState unterbringen, aber was soll's!
In dem Zusammenhang: Weiss jemand, warum es
AltGr bei Delphi nicht gibt? :nixweiss:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!