[gelöst] Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

[gelöst] Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von willi4willi »

Ich möchte, wenn ich auf eine Komponente (oder Formular) einmal mit der Maus klicke, eine bestimmte Methode aufrufen und wenn ich doppelt klicke, eine andere.

Beispiel:

Code: Alles auswählen

unit Unit1;
{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormClick(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation
{$R *.lfm}

procedure TForm1.FormClick(Sender: TObject);
begin
  Memo1.Lines.Add('Klick');
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  Memo1.Lines.Add('DblKlick');
end;

end.
Wenn ich aber den Doppelklick ausführe, wird immer auch der einfache Klick vorher ausgeführt. Wie kann ich das verhindern?

Hat jemand eine Idee?
Zuletzt geändert von willi4willi am Di 6. Mai 2025, 19:40, insgesamt 1-mal geändert.
 

Viele Grüße

Willi4Willi

------------

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1201
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von kralle »

Moin,
Gibt es bei dem Mouse-Klick auch ein ein Event, das beim Loslassen der Taste aktiv wird?
Dann könntest Du ja zählen, wie oft die Taste in einer bestimmten Zeit gedrückt und losgelassen wurde und dann in die entsprechende Prozedure springen.

Gruß Kralle
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Mathias
Beiträge: 6921
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von Mathias »

Wen man intern in die Event-Handler schaut, wird ein Doppelcklick aus 2 Mauscklicks zusammen gesetzt.
Und ein einfacher Klick wird immer aus einem MouseDown und MouseUp zusammengesetzt.
Nur solches Arbeiten werden in einem Framework wie die LCL, GTK und co. einem abgenommen und vereinfacht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5156
Registriert: Fr 8. Apr 2011, 09:01

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von wp_xyz »

Ich würde im OnClick einen Timer starten, dessen Intervall auf die Doppelklickzeitspanne eingestellt ist. Im OnTimer-Event des Timers führst du dann den für den Einfachklick vorgesehenen Code aus. Falls vorher der zweite Klick eines DoppelKlick kommt, wird der Timer nochmals neu getrigger, aber der Einfachklick-Code wird nicht ausgeführt. Stattdessen kommt dann einfach das OnDblClick-Event.

Siehe Code im beigefügten Mini-Projekt.

Eine schöne Benutzerführung ist das aber nicht, denn die Reaktion auf den Einfachklick kommt verzögert - was ganz schön irritieren kann. Es sollte zumindest ein Sanduhr-Cursor angezeigt werden. Daher würde ich mir überlegen, ob es nicht andere Lösungen für deine Benutzeroberfläche gibt.
Dateianhänge
click_dblclick.zip
(2.04 KiB) 46-mal heruntergeladen

charlytango
Beiträge: 1063
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von charlytango »

willi4willi hat geschrieben: Di 6. Mai 2025, 17:36 Hat jemand eine Idee?
Ja -- bevor ich so einen Stunt veranstalte, würde ich mir die Empfehlung von wp_xyz zu Herzen nehmen
wp_xyz hat geschrieben: Di 6. Mai 2025, 18:06 Daher würde ich mir überlegen, ob es nicht andere Lösungen für deine Benutzeroberfläche gibt.
und mir ein anderes Konzept für die Benutzeroberfläche überlegen.

Ich verwende Doppelcklicks um die 80% Aktionen anzustoßen, alles andere geht über Controls, Menüs oder Kontextmenüs (=PopupMenü: dafür sind die ja auch da).
Die Rechte Maustaste macht in Abhängigkeit vom rechts geklickten Control ein Kontextmenü auf in dem die möglichen Aktionen für dieses Control angeboten werden.
So etwas kann durchgängig ohne technische Klimmzüge mit Bordmitteln gebaut/zusammengeklickt werden und funktioniert verlässlich.

Wenn es mehrere mögliche Aktionen auf dem Formular gibt, alle in einer Actionlist verwalten und die einzelnen Actions dann nur den Menüpunkten oder Controls zuordnen. Wenn es etwas ein oder auszuschalten gibt, bietet sich das Event OnContextPopup an das vor der Anzeige des Popups gefeuert wird

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von Niesi »

willi4willi hat geschrieben: Di 6. Mai 2025, 17:36 Ich möchte, wenn ich auf eine Komponente (oder Formular) einmal mit der Maus klicke, eine bestimmte Methode aufrufen und wenn ich doppelt klicke, eine andere.

Hat jemand eine Idee?
Gibt es das schon? Schließlich ist der einfache Mausklick im Doppelklick enthalten - mir fällt kein Programm ein, in welchem der Doppelklick etwas wirklich anderes macht als der einfache Klick.

Wäre doch auch verwirrend für die User, oder?
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von willi4willi »

.
Ich werde wohl die Lösung von wp_xyz mit dem Timer nehmen. Vielen Dank für den Tipp!

Warum möchte ich, dass Click und DblClick unterschiedliche Methoden aufrufen sollen, verwenden?

In einem Diagramm soll der Click auf ein Element bewirken, dass eine Information über dieses Element in einem Fenster angezeigt wird. Bei einem Doppelclick hingegen soll die Information veränderbar sein.
Man kennt soetwas aus einem Dateimanager:
  • Datei auswählen = Click,
  • Datei starten = Doppelclick,
  • Datei umbenennen = verzögerter Doppelclick.
Das scheint mir in der Bedienung einfach und logisch zu sein.

Ich möchte
  • mit der Maus darüberfahren = Erklärung (als Hint),
  • mit der Maus klicken = Details anzeigen,
  • mit der Maus doppelt klicken = Element-Details ändern.
Gedacht ist das für eine Gantt-Diagramm-Komponente, wobei ich nicht OnClick und OnDblClick, sondern OnMouseUp verwende. Dort werte ich die Eigenschaften von Button (mbLeft) und Shift (ssLeft, ssDouble) aus. Aber das ist das gleiche Problem. Ich dachte es gibt eine elegantere Methode als mit einem Timer.

Vielen Dank nochmals an alle!

.
 

Viele Grüße

Willi4Willi

------------

TBug
Beiträge: 179
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von TBug »

Hallo,
Niesi hat geschrieben: Di 6. Mai 2025, 18:59 Gibt es das schon? Schließlich ist der einfache Mausklick im Doppelklick enthalten - mir fällt kein Programm ein, in welchem der Doppelklick etwas wirklich anderes macht als der einfache Klick.
Zahlreiche Programme, mit welchen man Tag für Tag arbeitet, machen dies so.

Windows-Explorer zum Beispiel:
einfacher Klick = auf den Editor zum Andern des Namen der Datei umschalten
Doppelklick = Datei öffnen (bzw. verknüpfte Standard-Operation ausführen)

Also kein außergewöhnlicher Wunsch.

wp_xyz
Beiträge: 5156
Registriert: Fr 8. Apr 2011, 09:01

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von wp_xyz »

willi4willi hat geschrieben: Di 6. Mai 2025, 19:39 Ich möchte
  • mit der Maus darüberfahren = Erklärung (als Hint),
  • mit der Maus klicken = Details anzeigen,
  • mit der Maus doppelt klicken = Element-Details ändern.
Ich würde für den letzten Punkt einen "Edit"-Button oder "Edit"-Eintrag im Menü oder Kontext-Menü spendieren (sowie einen Tastatur-Shortcut), also statt Doppelklick einen Einfachklick zum Auswählen plus Button-Klick zum Starten des Editors, oder Rechtsklick für Auswählen und Öffnen des Kontextmenüs plus Klick auf dem Kontextmenü-Eintrag. Beispiel Explorer: Einfachklick plus F2/Kontextmenü. Etwas zu ändern sollte meiner Meinung nach dem User sowieso nicht zu einfach gemacht werden, nicht dass es irrtümlich geschieht.

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: [gelöst] Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von willi4willi »

Danke für die Tipps!

Es ist jetzt schon ein neues Thema: "Wie gestalte ich eine einfach zu bedienende Oberfläche" geworden.

Sicherlich ist das auch ein interessantes Thema für eine Diskussion bei einem unserer Treffen.

Für mich als Fazit: Ein Doppel-Klick ist nicht optimal zu realisieren.
 

Viele Grüße

Willi4Willi

------------

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 282
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: [gelöst] Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von h-elsner »

Ich möchte

mit der Maus darüberfahren = Erklärung (als Hint),
mit der Maus klicken = Details anzeigen,
mit der Maus doppelt klicken = Element-Details ändern.
Ja und was schadet es, wenn die Klickaktion beim Doppelklick auch ausgeführt wird? Zum Editieren musst du die Information ja auch anzeigen.
Was ich sagen will ist, dass man Klick- und Doppelklickaktionen auf ein Element nur machen kann (und soll) wenn die kombinierbar sind, also der Doppelklick quasi eine Erweiterung der Klickaktion ist.
Beispiel Dateimanager:
Einfachklick -> Datei wird ausgewählt
Doppelklick -> Datei wird ausgeführt. Dazu muss sie aber vorher ausgewählt sein.

Das macht die Bedienung wieder logisch. Völlig unabhängige Aktionen bei Klick und Doppelklick würde ich wiederum dem Benutzer nicht zumuten.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 587
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von Niesi »

TBug hat geschrieben: Do 8. Mai 2025, 20:51 Hallo,
Niesi hat geschrieben: Di 6. Mai 2025, 18:59 Gibt es das schon? Schließlich ist der einfache Mausklick im Doppelklick enthalten - mir fällt kein Programm ein, in welchem der Doppelklick etwas wirklich anderes macht als der einfache Klick.
Zahlreiche Programme, mit welchen man Tag für Tag arbeitet, machen dies so.

Windows-Explorer zum Beispiel:
einfacher Klick = auf den Editor zum Andern des Namen der Datei umschalten
Doppelklick = Datei öffnen (bzw. verknüpfte Standard-Operation ausführen)

Also kein außergewöhnlicher Wunsch.

Die Programme machen das allerdings nur in einer passenden Reihenfolge:

- ein Klick: Datei auwählen
- Doppelklick: Datei auswählen und Datei öffnen

Vermutlich kannst Du es so gestalten, dass etwas nach einem Einfachklick blau wird und nach einem Doppelklick rot. Es wird nach einem Doppelklick immer erst blau werden und dann rot.

Die Lösung mit dem timer ginge sicher - aber ist es erstrebenswert, nach einem Einfachklick ein delay zu haben, weil erst noch abzuwarten ist, ob es ein Doppelklick wird?
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
Zvoni
Beiträge: 376
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: [gelöst] Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von Zvoni »

*seufz*

einfacher Click --> Details werden angezeigt (TEdit's locked bzw. nicht enabled)
Doppelclick --> Code für "einfacher click" wird ausgeführt (Details werden angezeigt), danach werden die TEdit's auf enabled gestellt

Wo ist jetzt das Problem?
Im Doppelclick-Event einfach NUR den Code zum enablen der TEdit's und fertig
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

TBug
Beiträge: 179
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: Doppel-Klick auf Formular ruft zusätzlich OnClick auf - Wie verhindern?

Beitrag von TBug »

Niesi hat geschrieben: Fr 9. Mai 2025, 09:17 Die Programme machen das allerdings nur in einer passenden Reihenfolge:
- ein Klick: Datei auwählen
- Doppelklick: Datei auswählen und Datei öffnen
Nicht ganz, denn Dein Beispiel geht von einer nicht ausgewählten Datei aus.

Ist die Datei jedoch bereits ausgwählt, dann offnet ein Doppelklick die Datei, wo hingegen ein Einfachklick die Namensanzeige in den Editiermodus versetzt. Es sind eben zwei komplett Unterschiedliche Aktionen, denn es wird beim Doppelklick nicht auch gleichzeitig in den Editiermodus geschalten.

Antworten