Entwickler-Ecke

Sonstiges (Delphi) - Geschichten rund um Shift-Stati...


tommie-lie - Mo 14.10.02 14:57
Titel: Geschichten rund um Shift-Stati...
Hallo Leute,

Es gibt unter Delphi die OnKey-Events. Damit konnte ich bereits die Strg-, Alt- und Shift-Stati rausbekommen. Wie kann ich jedoch zwischen den rechten und den linken Tasten unterscheiden? In der Hilfe steht etwas von Virtual-Keys, aber mit der beschriebenen API-Funktion "GetKeyState" funktioniert es nicht so wie ich will (kurz gesagt: es funzt gar nicht...). Gibt es eine andere Möglichkeit rauszufinden, ob die rechte oder linke Strg-, Alt- oder Shift-Taste gedrückt wurde, oder kann mir jemand die richtige Benutzung von GetKeyState beibringen? Wo wir grad dabei sind: Die rechte Alt-Taste ist ja Alt GR. Wie kann ich diese als einzelne Taste bewerten und nicht als Strg-Alt?

Außerdem konnte ich im OnKey-Event die Maustasten nicht abfragen. Also ob die rechte, die mittlere oder die linke Maustaste gedrückt wurde, als die Taste (auf der Tastatur) gedrückt wurde. Zumindest geht es nicht mit den in der Hilfe beschriebenen ssRight, ssLeft und ssMiddle Konstanten die eigentlich zur TShiftState gehören. Liegt das daran, daß ich das OnKey-Event abfrage und dort die Maus unterbunden wird, oder gibt's da einen anderen Trick?

Tschüß
Thomas


Andreas Pfau - Sa 19.10.02 20:08


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function KeyIsPressed(VirtualKey: Integer): Boolean;
begin
 Result := GetKeyState(VirtualKey) And 128 <> 0;
end;

function KeyIsToggled(VirtualKey: Integer): Boolean;
begin
 Result := GetAsyncKeyState(VirtualKey) And 1 <> 0;
end;


Erklärung: Bei getKeyState ist das höchste Bit (128) 1, wenn die Taste grdeückt ist. Bei GetAsyncKeystate ist das niedrigste Bit (1) 1, wenn die Taste seit der letzten abfrage gedrückt wurde.

In der Online-Hilfe steht, das mit Rechts/Links funzt nur unter NT. Lies mal nach suchbegriff "GetKeyState".