Delphi-PRAXiS

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.

AlexII 17. Nov 2014 15:31

AW: TimerEvent zur Laufzeit festlegen
 
Ja ja ich weiß schon... das ist nur ein Testprojekt. Mir gings nur ums Verständnis.

himitsu 17. Nov 2014 15:46

AW: TimerEvent zur Laufzeit festlegen
 
auch wenn etwas spät...

Vielleicht ist der Button1 ja ein "ErstelleNeuenTimer"-Button? :stupid: (die Caption kann man hier ja nicht erkennen)

AlexII 17. Nov 2014 15:51

AW: TimerEvent zur Laufzeit festlegen
 
Zitat:

Zitat von himitsu (Beitrag 1280078)
auch wenn etwas spät...

Vielleicht ist der Button1 ja ein "ErstelleNeuenTimer"-Button? :stupid: (die Caption kann man hier ja nicht erkennen)

Jah... also eigentlich plane ich einen Wecker zu schreiben, und das waren hier die ersten Versuche. Wenn ich das Projekt richtig starte, dann kann man mich echt zurechtweisen. :-D

mkinzler 17. Nov 2014 15:54

AW: TimerEvent zur Laufzeit festlegen
 
Ich würde hierfür aber nur einen Timer verwenden, der in einem Zeitraster auf Ablauf der einzelnen Termine prüft.

AlexII 17. Nov 2014 16:00

AW: TimerEvent zur Laufzeit festlegen
 
Zitat:

Zitat von mkinzler (Beitrag 1280082)
Ich würde hierfür aber nur einen Timer verwenden, der in einem Zeitraster auf Ablauf der einzelnen Termine prüft.

Hm... und wenn es sehr viele Termine sind, so das der Timer in 1 Sekunde nicht schafft alle durchzugehen, was dann? Aber ok mein Wecker wird keine Sekunden haben, daher geht das schon.

mkinzler 17. Nov 2014 16:05

AW: TimerEvent zur Laufzeit festlegen
 
Und du meinst, dass das System, dann durch mehrere Timer flüssiger läuft?

Ich ging auch von einem gröberen Zeitraster aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.

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