TSpeedButton gedrueckt halten

Rund um die LCL und andere Komponenten
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

TSpeedButton gedrueckt halten

Beitrag von Eclipticon »

Guten Abend,

ich verwende in einem Projekt TSpeedButtons und moechte, dass die Ereignisbehandlungsroutine wiederholt wird, wenn sie gedrueckt bleiben. Gibt es dazu schon eine Loesung? Man sieht es ja auch am Draw-Style des Buttons, dass er noch gedrueckt ist ...

Wenn nein, was haltet ihr von folgender:

Code: Alles auswählen

//OnMouseDown-Handler:
Pressed := true;
while Pressed do begin
 // something
end;
 
// OnMouseUp und OnMouseLeave-Handler:
Pressed := false;
Danke!

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TSpeedButton gedrueckt halten

Beitrag von m.fuchs »

Kommt darauf an. Wie häufig sollen denn die Wiederholungen sein?
Das erscheint mir nämlich eher eine Anwendung für einen Timer zu sein der bei OnMouseDown aktiviert und bei OnMouseUp / OnMouseLeave deaktiviert wird.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: TSpeedButton gedrueckt halten

Beitrag von Eclipticon »

Guter Ansatz!

Ich sollte aber dazu sagen, dass "something" ziemlich lange dauern kann, weil ich damit Hardware ansteuere und keine Ahnung habe, wann meine Funktion wieder zurueckkommt. Aus diesem Grund haette ich nur sehr ungern einen fixen Timer verwendet ...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TSpeedButton gedrueckt halten

Beitrag von m.fuchs »

Eclipticon hat geschrieben:[...] "something" ziemlich lange dauern kann, weil ich damit Hardware ansteuere und keine Ahnung habe, wann meine Funktion wieder zurueckkommt. Aus diesem Grund haette ich nur sehr ungern einen fixen Timer verwendet ...
Achso, du hast Sorge dass sich die Timeraufrufe ins Gehege kommen? Dagegen gibt es ja diese Minipattern:

Code: Alles auswählen

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  // do something
  Timer1.Enabled := True;
end;
Wobei ich zugeben, dass das grad nicht so elegant wirkt auf mich. Man müsste nämlich beim Reaktivieren am Ende von der OnTimer-Methode noch prüfen ob der SpeedButton noch gedrückt ist. Vielleicht gibt es da noch eine schönere Lösung.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten