Einzelnen Beitrag anzeigen

Noob

Registriert seit: 26. Mär 2013
3 Beiträge
 
#1

button mit wiederolfunktion

  Alt 26. Mär 2013, 18:31
Delphi-Version: XE2
Hallo, habe folgendes Problem...
also ich bin delphi Anfänger (am Namen zu lesen^^) also, ich Habs gerade geschafft, meine erste Komponente nach Tutorial und selberbastelei in delphi Xe3 starter wenigstens in
die Komponentenleiste zum ziehen aufs formular zu bringen. aber der Wiederholbutton Funktioniert nicht so wie er soll sondern nur wie ein normaler Button von dem er abstammt.
Es soll ein Button sein, der die gewünschte Aktion beim "gedrückt halten" mit timer wiederholen soll.
Kann mir jemand sagen was hier falsch läuft ?

hier mal der Code :

unit Wiederholbutton;


interface

uses
System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, extctrls;

type
TWiederholbutton = class(TButton)

private
FInitRepeatPause : Cardinal;
FRepeatPause : Cardinal;
FAllowRepeat : Boolean;


{ Private-Deklarationen }
protected
FRepeatTimer: TTimer;
{ Protected-Deklarationen }
public
procedure MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
procedure TimerExpired(Sender: TObject);
procedure MouseUp(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
{ Public-Deklarationen }
published
Property InitRepeatPause : Cardinal read FInitRepeatPause write FInitRepeatPause;
Property RepeatPause : Cardinal read FRepeatPause write FRepeatPause;
Property AllowRepeat : Boolean read FAllowRepeat write FAllowRepeat;
{ Published-Deklarationen }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TWiederholbutton]);
end;



procedure TWiederholbutton.TimerExpired(Sender: TObject);
begin
FRepeatTimer.Interval := FRepeatPause;
Click;
end;

procedure TWiederholbutton.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
If FAllowRepeat = False then Exit;
if
FRepeatTimer = nil
then
FRepeatTimer := TTimer.Create(Self);

FRepeatTimer.OnTimer := TimerExpired;
FRepeatTimer.Interval := fInitRepeatPause;
FRepeatTimer.Enabled := True;
end;


procedure TWiederholbutton.MouseUp(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
If FAllowRepeat = False then Exit;
if FRepeatTimer <> nil
then FRepeatTimer.Enabled := false;
end;



end

Geändert von Noob (26. Mär 2013 um 18:56 Uhr)
  Mit Zitat antworten Zitat