![]() |
Zweiten Klick von Doubleklick verhindern / ignorieren
Mahlzeit,
Ich habe hier einen TADVGlowbutton. Dieser öffnet ein anderes Formular bzw. holt es in den Vordergrund, falls es bereits geöffnet ist. Das Problem ist, dass die Kunden dort immer einen doppelklick auf den Button machen. Auf dem zweiten Formular ist eine Checkbox genau an der Position wo auf dem ersten Formular der besagte Button ist, wenn beide Formulare maximiert sind. Also: Kunde macht Doppelklick, der erste Klick öffnet das zweite Formular, der zweite Klick des Doppelklicks wird für die Checkbox des zweiten Formulars registriert, der Status der Checkbox wird geändert und die Kunden speichern anschließend ohne sich zu wundern, warum das Formular überhaupt im Bearbeitungsmodus ist. Ich muss nun irgendwie verhindern, dass der Zweite Click die Checkbox trifft. Ein DoubleClick Event hat der Button leider nicht. Ich habe schon ein "abort" am Ende der onClick Methode versucht. Klappt natürlich nicht. Ich habe schon überlegt, ob man irgendwie die Message des Zweiten Klicks aus der Message Queue entfernen kann, weiß aber nicht ob und wie das gehen kann. Ich hab schon überlegt die Checkbox für den Zeitraum zwischen erstem Klick und der endgültigen Anzeige zu deaktivieren. Aber das Anzeigen des zweiten Formulars und das öffnen der Daten darin wird augenscheinlich erstmal komplett ausgeführt, bevor der zweite klick vom Computer verarbeitet wird und ich habe irgendwie keinen greifbaren Punkt an dem ich die Checkbox wieder aktivieren könnte. Hat jemand eine Idee, wie ich das lösen kann? |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Hallo,
man könnte die Checkbox im OnActivate des andern Formular deaktivieren danach einen kurzen Timer aktivieren, der die Checkbox wieder aktiviert. Klingt zwar irgendwie komisch, sollte aber gehen. |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Eventuell kannst du diese Sequenz im OnCreate oder einem anderen geeigneten Event des zweiten Formulars (wegen Handle) aufrufen:
Delphi-Quellcode:
Kann aber durchaus noch unerwartete Nebenwirkungen haben. Daher use on your own risk.
var
M: TMsg; begin M.Message := 0; while PeekMessage(M, Handle, WM_LBUTTONDOWN, WM_LBUTTONUP, PM_REMOVE) do begin if (M.Message = WM_QUIT) then PostQuitMessage(M.wparam); end; end; |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Na das Problem beschreibst Du ja selbst schon. Den 2. Klick kriegt die Checkbox vom Formular, welches sichtbar wird bzw. in den Vordergrund kommt. Normalerweise würde man beim OnClick-Event erstmal den Button abschalten, und dann erst das Form aufmachen, aber das hilft ja bei dir nicht, da der 2. Klick nicht auf diesem Button ausgeführt wird.
Schmutzige Lösung : Diesen Nutzern einen OnShow-Timer von 500 ms reinbauen, der das Formular Enabled := True setzt (muss natürlich vorher false sein). Dann geht der klick auf ein disabled area |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Zitat:
|
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Geht nicht.
Du könntest per Sleep(größer als Doppelklickinterval) die Anzeige verzögern und dann vor Anzeige eingegangende Mausereignisse löschen.
Delphi-Quellcode:
Oder für x Zeit nach Anzeige solche Ereignisse ignorieren.
//var Msg: TMsg;
while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do // oder nur WM_LBUTTONDOWN und WM_LBUTTONUP ; |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Na ja, mein Vorschlag bezieht sich konkret auf
Zitat:
|
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Betrifft das Problem alle Kunden oder nur einige? Wenn es alle betrifft, dann trainiert das Programm dieses Verhalten an und bricht an dieser Stelle mit der Logik, wieso? Wenn es nur wenige sind, dann darauf hinweisen, dass diese ihr "Verhalten" überarbeiten müssen. Grundsätzlich tust Du Dir aber keinen Gefallen solche Sonderfälle auch noch zu "korrigieren", indem Du eine Lösung suchst, die jenes Problem behebt.
...:cat:... P.S.: Ich weiß, dass das Deine Frage nicht beantwortet, bin aber der festen Meinung, dass ihr das anders angehen müsst ;-) |
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Der Anwender kann mit Windowsprogramnen nicht umgehen? Weil einen Doppelklick auf eine Schaltfläche macht man ja eher nicht.
|
AW: Zweiten Klick von Doubleklick verhindern / ignorieren
Zitat:
Wenn jemand dort Doppelklickt, wo man nur einmal zu klicken hat, welches hier auch noch ein Standardverhalten aller Programme dieses Betriebssystem ist (Einfachklick auf Buttons), dann ist das schon ein gewisses Fehlverhalten dieses Benutzers. PS: Bei Einfachklick oder Doppelklick auf Icons auf dem Desktop, bzw. auf Dateien im Explorer ... dort kann der Benutzer sich sein Lieblingsverhalten im System einstellen (wobei dort der Standard ein Doppelklick ist, was man für Touchscreens aber gern mal ändert), aber Buttons sind immer gleich und das sogar im Android, Linux, Mac uvm. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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