Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Zweiten Klick von Doubleklick verhindern / ignorieren (https://www.delphipraxis.net/203055-zweiten-klick-von-doubleklick-verhindern-ignorieren.html)

Getox 8. Jan 2020 14:26

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?

BerndS 8. Jan 2020 15:00

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.

Uwe Raabe 8. Jan 2020 15:01

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:
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;
Kann aber durchaus noch unerwartete Nebenwirkungen haben. Daher use on your own risk.

MyRealName 8. Jan 2020 15:03

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

MyRealName 8. Jan 2020 15:06

AW: Zweiten Klick von Doubleklick verhindern / ignorieren
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1454637)
Eventuell kannst du diese Sequenz im OnCreate oder einem anderen geeigneten Event des zweiten Formulars (wegen Handle) aufrufen:
Delphi-Quellcode:
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;
Kann aber durchaus noch unerwartete Nebenwirkungen haben. Daher use on your own risk.

Kann aber auch sein, dass die 2. Klick Message noch garnicht in der Queue ist, da man ja noch im Code ist und die weiteren Windows Messages noch nicht behandelt wurden oder auch (durch die sehr schnellen Laufzeiten des Delphi Codes) der 2. Klick noch garnicht gemacht wurde, während man noch im OnCreate Event ist.

himitsu 8. Jan 2020 15:06

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:
//var Msg: TMsg;
while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do // oder nur WM_LBUTTONDOWN und WM_LBUTTONUP
  ;
Oder für x Zeit nach Anzeige solche Ereignisse ignorieren.

Uwe Raabe 8. Jan 2020 15:12

AW: Zweiten Klick von Doubleklick verhindern / ignorieren
 
Na ja, mein Vorschlag bezieht sich konkret auf
Zitat:

Zitat von Getox (Beitrag 1454632)
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.

Natürlich kann man diese Messages nur dann entfernen, wenn sie schon in der Queue vorhanden sind. Daher auch mein Hinweis auf den geeigneten Event.

sakura 8. Jan 2020 15:57

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 ;-)

Luckie 8. Jan 2020 16:05

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.

himitsu 8. Jan 2020 16:06

AW: Zweiten Klick von Doubleklick verhindern / ignorieren
 
Zitat:

Zitat von sakura (Beitrag 1454654)
Ich weiß, dass das Deine Frage nicht beantwortet,

Haste doch gemacht. :zwinker:

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:

Zitat:

Zitat von Getox (Beitrag 1454632)
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.

Natürlich kann man diese Messages nur dann entfernen, wenn sie schon in der Queue vorhanden sind.
Ratet mal, warum ich z.B. etwas von einer Pause (Sleep) schrieb. :angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Seite 1 von 4  1 23     Letzte »    

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