![]() |
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
Delphi-Quellcode:
zuweisen, sondern eine Verzweigung, ob entweder ein
OnDblClick
Delphi-Quellcode:
oder
DoClick
Delphi-Quellcode:
ausgeführt werden soll, im
DoDblClick
Delphi-Quellcode:
implementieren.
OnClick
|
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
|
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
Ein Doppelklick wird durch die Mauseinstellungen des Betriebssystems des Benutzers bestimmt. Der Benutzer kann den Zeitraum festlegen, innerhalb dessen der zweite Mausklick erfolgen muss, damit zwei aufeinander folgende Mausklicks als Doppelklick erkannt werden. Bei jedem Doppelklick auf ein Steuerelement wird das Click-Ereignis ausgelöst. Wenn Sie z. B. über einen Ereignishandler für das Click-Ereignis und für das DoubleClick-Ereignis eines Form verfügen, wird das Click-Ereignis und das DoubleClick-Ereignis ausgelöst, wenn auf das Formular doppelgeklickt wird und beide Methoden aufgerufen werden. Bei einem Doppelklick auf ein Steuerelement, das das DoubleClick-Ereignis nicht unterstützt, wird das Click-Ereignis möglicherweise zweimal ausgelöst. Damit dieses Ereignis ausgelöst wird, müssen Sie den StandardClick-Wert von ControlStyles auf true festlegen. ![]() ![]() Zitat: Normalerweise initiiert ein einzelner Klick eine Benutzeroberflächenaktion, und mit einem Doppelklick wird die Aktion erweitert. Beispielsweise wird mit einem Klick für gewöhnlich ein Element ausgewählt und dieses mit einem Doppelklick bearbeitet. Die Windows Forms-Klickereignisse lassen jedoch nur schwer ein Szenario zu, in dem ein Klick und ein Doppelklick inkompatible Aktionen ausführen, da eine mit dem Click-Ereignis oder dem MouseClick-Ereignis verknüpfte Aktion vor der mit dem DoubleClick-Ereignis oder dem MouseDoubleClick-Ereignis verknüpften Aktion ausgeführt wird. Dieses Thema zeigt zwei Lösungen für dieses Problem auf. Eine Lösung besteht darin, das Doppelklickereignis zu behandeln und die Aktionen bei der Behandlung des Klickereignisses per Rollback zurückzusetzen. In wenigen Situationen müssen Sie möglicherweise das Klick- und Doppelklickverhalten simulieren, indem Sie das MouseDown-Ereignis behandeln und die DoubleClickTime-Eigenschaft und die DoubleClickSize-Eigenschaft der SystemInformation-Klasse verwenden. Sie messen die Zeit zwischen den Klicks, und wenn ein zweiter Klick erfolgt, bevor der DoubleClickTime-Wert erreicht wird und der Klick innerhalb eines durch DoubleClickSize definierten Rechtecks stattfindet, führen Sie die Doppelklickaktion aus; andernfalls führen Sie die Klickaktion aus. Gewusst wie: Unterscheiden zwischen Klicks und Doppelklicks ![]() |
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
|
AW: TImage Doppelklick bei gesetzten OnClick Event
Eigentlich ich dieses Problem leicht zu lösen:
Bei einem Click gibt es folgende Messages: wm_LButtonDown wm_LButtonUp Bei einem DoppelClick gibt es folgende Messages: wm_LButtonDown wm_LButtonUp wm_LButtonUp Man setzt eine globale Variable BU auf 0 mit dem Auftreten von wm_LButtonDown. wm_LButtonUp erhöht sie um 1. Bei BU>1 wird die gewünschte DBLCLICK-Aktion ausgeführt.
Delphi-Quellcode:
private
procedure MyMouseEvent(var Msg: TMsg; var Handled: Boolean); .... var BU : Cardinal; ... procedure TForm2.MyMouseEvent(var Msg: TMsg; var Handled: Boolean); BEGIN case Msg.message of wm_LButtonDown:BEGIN BU:=0; END; wm_LButtonUp: BEGIN INC(BU); END; else begin end; end; if BU>1 then BEGIN WinApi.Windows.Beep(1500,50); BU:=0; END; END; |
AW: TImage Doppelklick bei gesetzten OnClick Event
Und wann wird das gewünschte 'OnClick' Ereignis ausgelöst? :gruebel: Ich find meine Lösung mit dem Timer echt einfach:
Delphi-Quellcode:
Ein Click startet einen Timer, der das Click-Ereignis -leider verzögert- auslöst.
Procedure TMyForm.FormCreate(Sender : TObject);
Begin DeferredClickTimer.Enabled := False; DeferredClickTimer.Interval := GetDoubleClickInterval()+50; // Ich glaub, die Methode heißt so. End; Procedure TMyForm.MyControlClick(Sender : TObject); Begin DeferredClickTimer.Enabled := False; DeferredClickTimer.Enabled := True; End; Procedure TMyForm.MyControlDoubleClick(Sender : TObject); Begin DeferredClickTimer.Enabled := False; ExecuteTheDoubleClickMethod(); End; Procedure TMyForm.DeferredClickTimerTimer(Sender : TObject); Begin DeferredClickTimer.Enabled := False; ExecuteTheClickMethod(); End; Der Doppelklick stoppt den Timer. Ich glaube, ohne Timer geht es nicht, denn ich muss ja wissen, ob nich doch das 2.Click vom Doubleclick kommt. |
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
|
AW: TImage Doppelklick bei gesetzten OnClick Event
Zitat:
|
AW: TImage Doppelklick bei gesetzten OnClick Event
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe hier was Schönes gefunden:
Es nennt sich TRIPLECLICK... ![]() EXE und SOURCE sind im Anhang.
Delphi-Quellcode:
unit Unit2;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; type TForm2 = class(TForm) ListBox1: TListBox; TripleClickTimer: TTimer; Memo1: TMemo; procedure ListBox1DblClick(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure TripleClickTimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } TripleClick : Boolean; public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure MM(s:string); begin Form2.Memo1.Lines.Add(s); end; procedure TForm2.FormCreate(Sender: TObject); begin Memo1.Lines.Add(' ListBox1Click: startet einen Timer'); Memo1.Lines.Add(' ListBox1DblClick: Auswertung'); end; procedure TForm2.ListBox1Click(Sender: TObject); begin TripleClick := TripleClickTimer.Enabled; end; procedure TForm2.ListBox1DblClick(Sender: TObject); begin TripleClick := False; TripleClickTimer.Interval := GetDoubleClickTime(); TripleClickTimer.Enabled := True; while TripleClickTimer.Enabled do begin Application.ProcessMessages; end; if TripleClick then MM ('Triple click on item: ' + ListBox1.Items[ListBox1.ItemIndex]) Else MM ('Double click on item: ' + ListBox1.Items[ListBox1.ItemIndex]); end; procedure TForm2.TripleClickTimerTimer(Sender: TObject); begin TripleClickTimer.Enabled := False; end; end. |
AW: TImage Doppelklick bei gesetzten OnClick Event
Ok ich komm jetzt nicht mehr mit :shock:, brauche ich jetzt den Timer? Wenn ja ist das so wie Hathor es beschrieben hatte die Lösung?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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