![]() |
OnClick-Ereignis Wiederholen
Moin, moin,
ich möchte gerne folgendes realisieren (vermutlich sehr simple): Wenn ich auf einen Button drücke wird meine OnClick-Routine ausgeführt. Dies aber leider nur einmal. Wenn ich die Routine ein zweites mal starten möchte, muss ich noch einmal auf den Button klicken. Daher meine Frage: Wie stelle ich es an, dass die Routine immer wieder aufgerufen wird, solange ich den Button gedrückt halte? Gruss, Freddy |
Re: OnClick-Ereignis Wiederholen
Herzlich willkommen in der Delphi-PRAXiS, Freddy.
Hier ein Muster ohne Wert:
Delphi-Quellcode:
Falls du die Maus nicht festhalten willst, dann nimmst du einen Button mit der Eigenschaft Down.
procedure TDemoForm.DemoButtonMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var i: Integer; begin // DemoButtonDown bitte als private variable von Form deklarieren DemoButtonDown := true; i := 0; while DemoButtonDown do begin Inc(i); StatusBar.SimpleText := IntToStr(i); Application.ProcessMessages; end; end; procedure TDemoForm.DemoButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DemoButtonDown := false; end; Freundliche Grüße vom marabu |
Re: OnClick-Ereignis Wiederholen
Delphi-Quellcode:
würde ich sagen... ^^
...
while DemoButtonDown do begin demobutton.Click; end; |
Re: OnClick-Ereignis Wiederholen
:hi:
Du könntest auch eine Funktion am Ende der Prozedur aufrufen, die im Grunde den selben Code wie die Prozedur enthält (bis auf den function-Aufruf). Nicht schön, aber sollte funktionieren und ist einfach (Ich sage nicht, dass die Anderen Möglichkeiten nicht einfach sind :mrgreen:). |
Re: OnClick-Ereignis Wiederholen
Hallo zusammen,
vielen Dank für die Hinweise. Ich habe daraus folgende Lösung gebastelt, die genau das tut, was ich wollte (vielleicht geht's ja noch einfacher?): (Änderung: Ich verwende die MouseDown-Routine, da die Click-Routine erst ausgeführt wird, wenn der Knopf losgelassen wird!)
Delphi-Quellcode:
Gruss,
procedure Tfrm_ProMonZ.DemoButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin ButtonDown := true; while ButtonDown do begin //Anweisungen Application.ProcessMessages; end; end; procedure Tfrm_ProMonZ.DemoButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ButtonDown:=false; end; Freddy [edit=sakura] [delphi]Tags Mfg, sakura[/edit] |
Re: OnClick-Ereignis Wiederholen
Ich würde es mal so probieren:
Delphi-Quellcode:
Das GetKeyState bewirkt, dass die Schleife solange läuft, bis die Maustaste losgelassen wird. Vorteil ist allerdings, dass du nicht auf das Event MouseUp des Buttons angewiesen bist. Denn es gibt garantiert möglichkeiten, wie man das Event umgehen kann und dann hängst in einer ollen Schleife fest. So kann es nicht passieren, da die Maustaste bei jedem Durchlauf abgefragt wird.
procedure Tfrm_ProMonZ.DemoButtonClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin while GetKeyState(VK_LBUTTON)<0 do begin //Anweisungen Application.ProcessMessages; end; end; Allerdings nur ein Versuch und noch nicht getestet. |
Re: OnClick-Ereignis Wiederholen
Yo, auch ne gute Idee. Hab Deine Lösung implementiert, da sie ja noch deutlich einfacher ist (nur eine Ereignisroutine statt zwei. Zudem brauche ich keine globale Variable).
Du meinstest natürlich die MouseDown-Routine und nicht die Click-Routine. Ich hab das entsprechend geändert.
Delphi-Quellcode:
Gruss,
procedure Tfrm_ProMonZ.DemoButton[b]MouseDown[/b](Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin while GetKeyState(VK_LBUTTON)<0 do begin //Anweisungen Application.ProcessMessages; end; end; Heiko [edit=Luckie]Delphi-Tags gesetzt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 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