![]() |
Delphi-Version: 2009
Doppelclick auf Button startet OnClick Event zweimal
Hallo,
Hierzu findet sich im Internet keine einfache Lösung. Wenn man auf einen Button zweimal klickt wird das OnClick Event zweimal hintereinander ausgeführt. Auch den Button sofort im OnClick zu disablen nützt nichts. Grüße Alex |
AW: Doppelclick auf Button startet OnClick Event zweimal
Hi,
TButton scheint kein DoubleClickEvent bereitzustellen. Am besten du nimmst dir einen TSpeedButton o.ä. Oder du baust dir selbst nen Countdown rein, indem du selber bestimmen kannst wie lange man Zeit für einen DoubleClick hat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn1: TButton; mmo1: TMemo; procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private FBtnLastClickTime: Cardinal; procedure ResetBtnLastClickTime; procedure OnBtnClicked; procedure OnBtnDblClicked; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} const cBtnDblClickTimeout = 1000; procedure TForm1.btn1Click(Sender: TObject); begin if FBtnLastClickTime + cBtnDblClickTimeout > GetTickCount then begin OnBtnDblClicked; ResetBtnLastClickTime; end else begin OnBtnClicked; FBtnLastClickTime := GetTickCount; end; end; procedure TForm1.FormCreate(Sender: TObject); begin ResetBtnLastClickTime; end; procedure TForm1.ResetBtnLastClickTime; begin FBtnLastClickTime := 0; end; procedure TForm1.OnBtnClicked; begin mmo1.Lines.Add('Click'); end; procedure TForm1.OnBtnDblClicked; begin mmo1.Lines.Add('Doubleclick'); end; end. |
AW: Doppelclick auf Button startet OnClick Event zweimal
Hallo Alex,
ich vermute mal, daß du einen LMDspeedbutton verwendest, und RepeatedClick auf true steht ?
Delphi-Quellcode:
object LMDSpeedButton1: TLMDSpeedButton
Left = 136 Top = 176 Width = 73 Height = 22 OnClick = LMDSpeedButton1Click RepeatedClick = True <---------------- ??? .... end |
AW: Doppelclick auf Button startet OnClick Event zweimal
Ich benutz den ganz gewöhnlichen TButton. Möcht das auch nicht ändern wenns nicht sein muss.
Wichtig ist, daß ich den Sender mit bekomm, da mehrere Buttons auf ein OnClick reagieren. Ausserdem wird der Button zum Starten genutzt und nach einigen Sekunden kann er zum Abbrechen genutzt werden. Timer sind hier auch unpraktisch. |
AW: Doppelclick auf Button startet OnClick Event zweimal
Du kannst entweder eine eigene WindowProc Methode schreiben, dort das WM_LBUTTONDBLCLK abfangen (1.Beispiel), oder einen kleinen Hack benutzen (2.Beispiel)
Delphi-Quellcode:
type
TForm1 = class(TForm) ... private FOldButtonWndProc: TWndMethod; procedure NewButtonWndProc(var Message: TMessage); ... implementation procedure TForm1.FormCreate(Sender: TObject); begin FOldButtonWndProc:= Button1.WindowProc; Button1.WindowProc := NewButtonWndProc; end; procedure TForm1.NewButtonWndProc(var Message: TMessage); begin if Message.Msg <> WM_LBUTTONDBLCLK then begin FOldButtonWndProc(Message); end; end;
Delphi-Quellcode:
// Das hier direkt nach dem uses des interface Teils deiner Form
type TButton = class(StdCtrls.TButton) protected procedure WndProc(var Message: TMessage); override; end; ... implementation procedure TButton.WndProc(var Message: TMessage); begin if Message.Msg <> WM_LBUTTONDBLCLK then begin inherited; end; end; |
AW: Doppelclick auf Button startet OnClick Event zweimal
Das Überschreiben der TButton Klasse funktioniert.
Schnell und ohne den bestehenden Code ändern zu müssen. Hat CodeGear wohl vergessen... Mercy! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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-2025 by Thomas Breitkreuz