Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#44

Re: Maus sperren während Tastatureingabe

  Alt 19. Nov 2008, 22:50
Achso, langsam blicke ich durch. Vielen Dank.

Hier der aktualisierte Plan für morgen:

1. Host-App startet DLL und die Hooks
2. DLL erkennt einen Tastatur-Tastendruck (Ausnahme Strg oder Shift) und sagt der Host-App "WM_ANYKEYPRESSED", die Host-App merkt sich den GetTickCount()
3. DLL erkennt einen Maus-Tastendruck und fragt Host-APP "WM_LMB_KEY_CONFIRM", was dann von der Host-App mit 10 oder 0/Irgendwas/Timeout beantwortet wird, diese Entscheidung ist abhängig vom Abstand zum zuvor gemerkten GetTickCount(), der größer oder kleinergleich 3 Sekunden ist
4a. Wird nicht 10 geantwortet, dann akzeptiert die DLL das Mausereignis
4b. Wird 10 geantwortet, dann verwirft die DLL das Mausereignis und sendet an die Host-App "WM_LMB_LOCKED"
5. Host-App reagiert auf "WM_LMB_LOCKED" und setzt den Systemmauszeiger auf crNo (hier mein anderes Problem)
6. Die Host-App setzt den 3-Sekunden-VCL-Timer zurück bzw. startet ihn neu.
7. Schlägt der VCL-Timer zu, deaktiviert er sich selbst und der Systemmauszeiger wird wieder neutralisiert. Zu diesem Zeitpunkt ist dann auch der Abstand zwischen den GetTickCount() wieder größer als 3 Sekunden und somit kann der Benutzer auch wieder klicken (VCL-Timer ist unabhängig von der Entscheidung, ob Klick erlaubt ist oder nicht und ist GUI Bestandteil)


Ereignisse, die wegfallen: WM_LMB_UNLOCKED (-> nun im Timer der Host-App) und WM_LMB_BLOCKED (Host-App reagiert auf WM_LMB_KEY_CONFIRM und führt selbst ein grafisches Ereignis aus, wenn ein Klick verboten ist), WM_LMB_LOCKED (Die Host-App erkennt den illegalen Klick und sendet die Antwort 10 für die Unterbindung, deswegen kennt sie zu diesem Zeitpunkt schon, dass jetzt eine Sperrphase eingetreten ist)

Hey, irgendwie taucht das NonVCL-Timer-Problem nicht mehr in meinem Plan auf

Weiterer Vorteil: Die DLL muss nun die Information mit den (variablen) 3 Sekunden nicht mehr kennen
Daniel Marschall
  Mit Zitat antworten Zitat