Announcement

Collapse
No announcement yet.

Deklaration eines TTimers in einer Komponente

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Deklaration eines TTimers in einer Komponente

    Hallo,
    kann mir jemand sagen, wie ich in meiner Komponente einen Timer und ein OnTimer Event deklarieren muss. Ich hab schon mal mit constructor und destructor herumprobiert. Aber wie muss das exakt deklariert werden ?
    Schon mal Danke für eure Hilfe.

    CIAO
    Thomas

  • #2
    Hallo Thomas,<br>dies ist mein Vorschlag<br>
    <pre><font size="1" face="Verdana">
    unit TimerComponent;
    { Timer innerhalb einer Komponente
    Compiler D5 SP1 }

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    extctrls;

    type
    TTimerComponent = class(TComponent)
    private
    { Private-Deklarationen }
    FTimer : TTimer;
    FInterval : Integer;
    FOnTimer : TNotifyEvent;
    procedure SetOnTimer(const Value: TNotifyEvent);
    procedure OnTimerInternal(Sender : TObject);
    procedure SetTimerEnabled(const Value: Boolean);
    function GetTimerEnabled: Boolean;
    procedure SetInterval(const Value: Integer);
    protected
    { Protected-Deklarationen }
    public
    { Public-Deklarationen }
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
    published
    { Published-Deklarationen }
    property TimerEnabled : Boolean read GetTimerEnabled write SetTimerEnabled;
    property TimerInterval : Integer read FInterval write SetInterval;
    property OnTimer : TNotifyEvent read FOnTimer write SetOnTimer;
    end;

    procedure Register;

    implementation

    procedure Register;
    begin
    RegisterComponents('MyComps', [TTimerComponent]);
    end;

    { TTimerComponent }

    constructor TTimerComponent.Create(AOwner: TComponent);
    begin
    inherited Create(AOwner);
    FTimer:=TTimer.Create(Self);
    FTimer.Enabled:=False;
    FTimer.OnTimer:=OnTimerInternal;
    FInterval:=FTimer.Interval;
    end;

    destructor TTimerComponent.Destroy;
    begin
    FTimer.Free;
    inherited Destroy;
    end;

    function TTimerComponent.GetTimerEnabled: Boolean;
    begin
    Result:=FTimer.Enabled;
    end;

    procedure TTimerComponent.OnTimerInternal(Sender: TObject);
    begin
    If Assigned(FOnTimer) then
    FOnTimer(Self);
    end;

    procedure TTimerComponent.SetInterval(const Value: Integer);
    begin
    FInterval := Value;
    FTimer.Interval:=FInterval;
    end;

    procedure TTimerComponent.SetOnTimer(const Value: TNotifyEvent);
    begin
    FOnTimer := Value;
    end;

    procedure TTimerComponent.SetTimerEnabled(const Value: Boolean);
    begin
    FTimer.Enabled:=Value;
    end;

    end.</font></pre>
    <br>Jens Schuman

    Comment


    • #3
      Hallo Jens,
      huch das sieht ja erst mal recht aufwendig aus. Dann verstehe ich auch, warums mit meiner Methode nicht geklappt hat.
      Müssen eigentlich die read Variablen (z.B. FInterval) immer mit "F" beginnen ?
      Recht vielen Dank für deine Mühe.

      CIAO
      Thoma

      Comment


      • #4
        Hallo Thomas,<br> nein die Variablen müssen nicht mit F anfangen. So etwas nennt man eine Konvention (aber wer hält sich schon an Konventionen). Alle internen Objektfelder fangen mit einem F an. Alle Typen fangen mit T an usw. Sonstige Variablennamen sollten sich an die ungarische Notation (Darüber findest Du bestimmt etwas im Internet) halten.<br>Jens Schuman

        Comment

        Working...
        X