AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Seltsames Verhalten von GetAsyncKeyState?
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Verhalten von GetAsyncKeyState?

Ein Thema von Glados · begonnen am 21. Okt 2017 · letzter Beitrag vom 23. Okt 2017
Antwort Antwort
Glados
(Gast)

n/a Beiträge
 
#1

Seltsames Verhalten von GetAsyncKeyState?

  Alt 21. Okt 2017, 15:50
Edit: Problem wurde gelöst. Ich lasse Get(Async)KeyState einfach weg.

Ich habe ein ListView. sagen wir mal halb gefüllt und mit Report-Ansicht.
Wenn ich im leeren Bereich des LlistViews das mit dem ListView verbundene Popupmenu per Rechtsklick anzeigen lasse und dann mit der linken Maustaste auf ein ListView-Item klicke, wird folgendes nur jedes zweite Mal ausgeführt:
Delphi-Quellcode:
if (GetAsnyKeyState(VK_RBUTTON) = 0) and (GetAsnyKeyState(VK_APPS) = 0) then
 showmessage('X'); // hier werden meine ToolButtons enabled/disabled
Wenn ein Item selektiert ist, schalte ich ToolButtons in meiner Toolbar auf Enabled True. Ist keins selektiert false.
Wenn ich oben genannte Schritte jetzt befolge (PopupMenu anzeigen, dann linksklick auf ein Item), bleiben meine Items auf Enabled false.

In einem anderen Forum lese ich
Zitat:
Probier mal "GetAsyncKeyState", wichtig !! am Anfang Deiner Funktion sollte einmal "GetAsyncKeyState" aufgerufen werden, da diese Funktion in Abhängigkeit vom nächsten/vorherigen Aufruf der Funktion reagiert.
Was hat es denn damit auf sich?

Ich habe es mal getestet und es funktioniert glaube ich. Aber alles doppelt aufrufen? Wieso?
Delphi-Quellcode:
GetAsyncKeyState(VK_RBUTTON);
GetAsyncKeyState(VK_APPS);

if (GetAsyncKeyState(VK_RBUTTON) = 0) and (GetAsyncKeyState(VK_APPS) = 0) then
 showmessage('X'); // hier werden meine ToolButtons enabled/disabled
Führe ich dieses doppelte GetAsyncKeyState aus, bekomme ich meine Items so wie ich sie brauche.

Geändert von Glados (22. Okt 2017 um 15:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: Seltsames Verhalten von GetAsyncKeyState?

  Alt 23. Okt 2017, 10:57
GetAsyncKeyState hat zwei Werte (Bits) in seinem Result, der "doppelte" Aufruf sollte sich hier (2) eigentlich garnicht auswirken, im Gegensatz zu (1), aber da wäre dein Vorgehen eher tödlich.

Test: Drücke die Tasten so lange, bis du diesen Dialog siehts.
[EDIT] Lies die Dokumentation und bedenke deine falsche Auswertung (4) -> MSDN-Library durchsuchenGetAsyncKeyState.

Delphi-Quellcode:
1: Ord(GetAsyncKeyState(...)) <> 0 // LSB: Taste wurde zwischen jetzt und dem letzten Aufruf von GetAsyncKeyState gedrückt.
2: GetAsyncKeyState(...) < 0 // MSB: Taste ist "jetzt" gedrückt, während des Aufrufs !!!
3: GetKeyState(...) // Taste wurde gedrückt, als Windows mit der aktuellen Aktion anfing (als die aktuell verarbeitete Message "gesendet" wurde)

4: GetAsyncKeyState(...) = 0 oder GetAsyncKeyState(...) <> 0 // MSB *und* LSB auswerten, das kann nur schief gehen, darum hilft hier der "tödlich" doppelte Aufruf
Ich empfehle dir auch den Unterschied zwischen GetAsyncKeyState und GetKeyState zu lernen und dann Letzeres zu verwenden.
http://blog.m-ri.de/index.php/2008/0...-zu-verwenden/
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Okt 2017 um 11:30 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: Seltsames Verhalten von GetAsyncKeyState?

  Alt 23. Okt 2017, 11:05
Zitat:
Edit: Problem wurde gelöst. Ich lasse Get(Async)KeyState einfach weg.
.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

AW: Seltsames Verhalten von GetAsyncKeyState?

  Alt 23. Okt 2017, 11:29
Das Edit war garnicht aufgefallen.

Aber zumindestens weißt du nun warum es nicht ging. ... = 0
GetKeyState kennt nur "jetzt" und kein gleichzeitiges "zuletzt".
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Okt 2017 um 11:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz