Win10 - Laz 1.6
Ich habe unter Delphi gern den RxSpeedButton benutzt: AllowTimer:=true bewirkt, dass das Ereignis nach einer einstellbaren Zeit automatisch wiederholt wird, wenn der Button z.B. durch die Maus gedrückt bleibt.
Gibt es solch einen Button auch für Laz?
oder
Wie kann man das anders erreichen?
Danke für Hinweise.
Wiederholungs-Button?
Re: Wiederholungs-Button?
Die Komponente kenne ich nicht, aber mit einem normalen TButton und einem TTimer sollte das kein Problem sein.
Code: Alles auswählen
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption:=TimeToStr(Now);
end;
-
- Beiträge: 32
- Registriert: Mi 7. Sep 2016, 18:27
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Wiederholungs-Button?
Ich persönlich kenne so ein Verhalten nicht, aber wenn du das häufiger brauchst, kannst du dir mit ganz paar Zeilen eine Komponente bauen. In OnTimer würde ich den Code nicht reinpacken, denn dann kann man deinen Button nicht mehr via Tastatur bedienen. Eher sowas:
Code: Alles auswählen
{ TRepeatButton }
TRepeatButton = class(TButton)
private
FRepeatTime: Integer;
FTimer: TTimer;
procedure SetRepeatTime(AValue: Integer);
protected
procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;
procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;
public
constructor Create(TheOwner: TComponent); override;
published
property RepeatTime: Integer read FRepeatTime write SetRepeatTime default 1000;
end;
[...]
{ TRepeatButton }
procedure TRepeatButton.SetRepeatTime(AValue: Integer);
begin
if (FRepeatTime = AValue) and (FRepeatTime < 50) then exit;
FRepeatTime:=AValue;
end;
procedure TRepeatButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
if not Assigned(FTimer) then
begin
FTimer:=TTimer.Create(Self);
FTimer.Interval:=FRepeatTime;
FTimer.OnTimer:=OnClick;
end;
end;
procedure TRepeatButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
if Assigned(FTimer) then FreeAndNil(FTimer);
end;
constructor TRepeatButton.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FRepeatTime:=1000;
end;
www.devstructor.com Devstructor.com - Lazarus Tutorials and more
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Wiederholungs-Button?
.
Zum Code von Devstructor: Muss das nicht ein OR sein ?
Zum Code von Devstructor: Muss das nicht ein OR sein ?
Code: Alles auswählen
procedure TRepeatButton.SetRepeatTime(AValue: Integer);
begin
if (FRepeatTime = AValue) OR (FRepeatTime < 50) then exit;
FRepeatTime:=AValue;
end;
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 32
- Registriert: Mi 7. Sep 2016, 18:27
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten: