AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Zweiten Klick von Doubleklick verhindern / ignorieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zweiten Klick von Doubleklick verhindern / ignorieren

Offene Frage von "himitsu"
Ein Thema von Getox · begonnen am 8. Jan 2020 · letzter Beitrag vom 22. Sep 2021
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 15:26
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?
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:01
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:03
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
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:06
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:12
Na ja, mein Vorschlag bezieht sich konkret auf
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 16:57
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.

......

P.S.: Ich weiß, dass das Deine Frage nicht beantwortet, bin aber der festen Meinung, dass ihr das anders angehen müsst
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 17:05
Der Anwender kann mit Windowsprogramnen nicht umgehen? Weil einen Doppelklick auf eine Schaltfläche macht man ja eher nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 8. Jan 2020, 17:06
Ich weiß, dass das Deine Frage nicht beantwortet,
Haste doch gemacht.

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:
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Jan 2020 um 17:18 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 11:53 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