Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TimerEvent zur Laufzeit festlegen (https://www.delphipraxis.net/90083-timerevent-zur-laufzeit-festlegen.html)

dr. love 11. Apr 2007 11:00


TimerEvent zur Laufzeit festlegen
 
Ich möchte zur Laufzeit eine Timerkomponente erzeugen. Das ist über

Delphi-Quellcode:
Timer:=TTImer.Create;
Timer.Interval:=1000;
Timer.Enabled:=true;
usw. kein Problem. Nun möchte ich dem Timer Event "OnTimer" aber etwas zuweisen. D.h. der Timer soll immer nach Ablauf des Intervals einen bestimmten Algorithmus ausführen. Wie mache ich das, der Timer wird ja erst zur Laufzeit erzeugt...?

DGL-luke 11. Apr 2007 11:03

Re: TimerEvent zur Laufzeit festlegen
 
du musst irgendwo schon den event haben. das sollte eine TNotify-Prozedur sein, also "procedure bla(Sender: TObject);".

Die kannst du dann per "Timer.OnTimer := bla;" zuweisen.

AlexII 17. Nov 2014 15:02

AW: TimerEvent zur Laufzeit festlegen
 
Sag ma wieso klappt das bei mir nicht?

Delphi-Quellcode:
  private
    { private declarations }
    procedure ShowNowTime(Sender: TObject);
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  myTimer: TTimer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.ShowNowTime(Sender: TObject);
begin
  Label1.Caption := DatetimeToStr(Now);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  myTimer := TTimer.Create(Self);
  myTimer.Enabled := False;
  myTimer.Interval := 1000;
  myTimer.OnTimer := ShowNowTime; // <- Error: Wrong number of parameters specified for call to "ShowNowTime"


  myTimer.Enabled := True;
end;

DeddyH 17. Nov 2014 15:03

AW: TimerEvent zur Laufzeit festlegen
 
Delphi-Quellcode:
myTimer.OnTimer := ShowNowTime;
Du willst ja eine Methode zuweisen und keinen Aufruf derselben.

DeddyH 17. Nov 2014 15:09

AW: TimerEvent zur Laufzeit festlegen
 
Ist das Delphi oder Lazarus?

AlexII 17. Nov 2014 15:10

AW: TimerEvent zur Laufzeit festlegen
 
Zitat:

Zitat von DeddyH (Beitrag 1280065)
Delphi-Quellcode:
myTimer.OnTimer := ShowNowTime;
Du willst ja eine Methode zuweisen und keinen Aufruf derselben.

Hm.... aber die Zuweisung produziert ja gerade den Fehler.
Und wie rufe ich eine Methode ab?

Ist für Delphi und Lazarus, jetzt konkret aber erstmal für Lazarus. :)

Also ich möchte diese Procudure laufen lassen:
Delphi-Quellcode:
procedure TForm1.ShowNowTime(Sender: TObject);
begin
  Label1.Caption := DatetimeToStr(Now);
end;

DeddyH 17. Nov 2014 15:12

AW: TimerEvent zur Laufzeit festlegen
 
Unter Delphi sollte es aber so funktionieren, unter Lazarus musst Du entweder den Modus von FPC auf Delphi ändern oder es AFAIK etwas anders formulieren:
Delphi-Quellcode:
myTimer.OnTimer := @ShowNowTime;

AlexII 17. Nov 2014 15:14

AW: TimerEvent zur Laufzeit festlegen
 
Zitat:

Zitat von DeddyH (Beitrag 1280070)
Unter Delphi sollte es aber so funktionieren, unter Lazarus musst Du entweder den Modus von FPC auf Delphi ändern oder es AFAIK etwas anders formulieren:
Delphi-Quellcode:
myTimer.OnTimer := @ShowNowTime;

Ja das klappt. :thumb:

himitsu 17. Nov 2014 15:19

AW: TimerEvent zur Laufzeit festlegen
 
Vielleicht solltest du langsam dein Profil ändern? (Lazarus steht auch zur Auswahl) :stupid: (leider kann man nicht Mehreres angeben)

Delphi referenziert/dereferenziert halt eine Typen automatisch, wenn es erkennt daß würde passen.
Lazarus FreePascal ist da "standardmäßig" halt etwas strikter.
Aber auch Delphi sollte es mit @ versehen.

Und warum ist myTimer global?

DeddyH 17. Nov 2014 15:28

AW: TimerEvent zur Laufzeit festlegen
 
Zitat:

Zitat von himitsu (Beitrag 1280072)
Und warum ist myTimer global?

Schlimmer noch, bei jedem ButtonClick wird eine neue Instanz angelegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz