![]() |
Key abfrage
In Basic frage ich den Status von einem Key so ab
Delphi-Quellcode:
Wie kann ich das für nonvcl in Delphi abfragen ?
'// Prüfe den Key oder Mouse Button status.
FUNCTION IsKeyDown (BYVAL CheckKey AS LONG) AS LONG LOCAL KeyDown AS LONG KeyDown = GetAsyncKeyState(CheckKey) FUNCTION = BIT(KeyDown, 15) END FUNCTION Hab hier beim suchen nicht das passende gefunden gruss Emil |
Re: Key abfrage
|
Re: Key abfrage
Hallo Emil,
so?
Delphi-Quellcode:
33 = Bild auf
if (GetAsyncKeyState(33) and 15) = 1 then ShowMessage('ist gedrückt') else ShowMessage('ist nicht gedrückt');
34 = Bild ab GetAsyncKeyState ist in Windows.pas definiert. |
Re: Key abfrage
Zitat:
Ansonsten ist das richtig was du sagst ;) gruss Emil |
Re: Key abfrage
Zitat:
Danke für eure Hilfe. Wenns mal fertig stell ich den Source Online EDIT: Also das richtige resultat bekomme ich nicht
Delphi-Quellcode:
wird immer 0 zurückgegeben .. hmm
function IsKeyDown(CheckKey: Integer): SmallInt;
begin result := (GetAsyncKeyState(CheckKey) and 15); end; function IsLButtonDown: Integer; begin Result := IsKeyDown(1); end; // Überprüfe SHIFT key status function zIsShiftKeyPressed: Integer; begin Result := IsKeyDown(16); end; // Überprüfe CTRL key status. function zIsCtrlKeyPressed: Integer; begin Result := IsKeyDown(17); end; // Überprüfe rechten Mouse button status function IsRButtonDown: Integer; begin Result := IsKeyDown(2); end; gruss Emil |
Re: Key abfrage
Zitat:
|
Re: Key abfrage
Hallo,
hab's bei mir ausprobiert, so funktioniert es, es ist ja kein 33 and 15 sondern ein Ergebnis der Funktion and 15, was immer die Funktion warum auch ausgeben mag. |
Re: Key abfrage
Zitat:
Zur Klärung einfach mal die ![]() MSDN: GetAsyncKeyState() If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks. Mit anderen Worten: Teste Bit 15 wenn du den aktuellen Tastenstatus haben willst, teste Bit 0, wenn du wissen willst, ob die Taste seit dem letzten Aufruf gedrückt wurde. Aktueller Status:
Delphi-Quellcode:
Status seit letztem Aufruf:
if GetAsyncKeyState(VK_UP) and 128 = 128 then
Delphi-Quellcode:
Dein Code funktioniert bisher, weil du alle Bits des unteren Nibbles ausmaskiert hast und da ist Bit 0 mit drin. Da MSDN aber nur Bit 0 definiert, verlässt du dich auf das undokumentierte Verhalten, dass alle anderen Bits 0 sind.
if GetAsyncKeyState(VK_UP) and 1 = 1 then
Ansonsten kann natürlich bei einem AND 15 auch 1 rauskommen, ich war bei der Umrechnung mit der 16 verrutscht. Dezimale Angaben sind meist etwas schwerer handlebar bei Bitmasken, da gelobe ich mir lieber hexadezimale Angaben, da sieht man sowas eher. |
Re: Key abfrage
Zitat:
Bekomme immer 0 zurückgeliefert Egal ob ich nur mit der Maus drüber gehe oder drücke hmmm hab irgendwas an der Schüssel heute :) EDIT: Möchte auch nicht abfragen welcher Key gedrückt wurde das weiss ich ja weil ich ihn übergebe sondern den status ob geklickt oder nur drübergefahren. Versuchs mal anders ;) Ich bin innerhalb der WinProc WM_PAINT da kann ich den Status zu dem zeitpunkt nicht gleichzeitig über WinMessagen abfragen deshalb der umweg.
Delphi-Quellcode:
aber es kommt immer 0 bei raus das ist mein problem das mein nächstes Bitmap nicht angezeigt wird
if PtInRect(rc, lp) then
if IsLButtonDown <> 0 then if ButtonHandle = GetFocus() then begin if (GetCursor = LoadCursor(0, IDC_ARROW)) and (StateMax > 1) then UseState := 2; end else if StateMax > 4 then UseState := 5 else begin if StateMax > 2 then UseState := 3; end; wenn ich mit der Maus drüberfahre. gruss EMil |
Re: Key abfrage
Hallo,
Zitat:
Für die "erweiterte" Fragestellung von Emil scheint es jedenfalls nicht geeignet zu sein. PS.: Mein Code bestand genau aus der hier geposteten Zeile, die Funktion habe ich ansonsten bisher noch nicht benötigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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 by Thomas Breitkreuz