Was kann man abschließend zu dem ersten Code sagen? Ist der Ok, bzw. sauber, oder fehlt da noch was? Wie gesagt, im TTimer Klasse wird da noch nach WM_TIMER geprüft, nur erkenne ich die Notwenigkeit nicht. Kann aber an mir liegen.
Unabhängig dessen, weil ich dann doch unsicher war, habe ich nach weitere Methoden getestet. Dieses Mal habe ich den Tipp befolgt doch den TTimer selbst zu nehmen. Nur wie gesagt, es soll ohne Formular funktionieren, bzw. in einer
Unit.
Ich hab zwei Beispiele mit TTimer. Der eigentliche Aufwand dreht sich eigentlich nur um OnTimer.
Delphi-Quellcode:
type
TMyTimer = class(TTimer)
public
procedure TimerTick(Sender: TObject);
end;
var
MyTimer: TMyTimer;
a: Integer = 0;
procedure TMyTimer.TimerTick(Sender: TObject);
begin
Inc(a);
end;
procedure MyTimerCreate;
begin
MyTimer := TMyTimer.Create(nil);
with MyTimer do
begin
Interval := 1000;
Enabled := True;
OnTimer := TimerTick;
end;
end;
procedure MyTimerFree;
begin
MyTimer.Free;
end;
initialization
MyTimerCreate;
finalization
MyTimerFree;
end.
Andere Variante. Die Idee fand ich im Internet. Ich weiß nicht ob die besser ist als die erste, sie ist zunindest etwas anders:
Delphi-Quellcode:
type
TEventHandlers = class
procedure TimerTick(Sender : TObject);
end;
var
MyTimer: TTimer;
EventHandlers : TEventHandlers;
a: Integer = 0;
procedure TEventHandlers.TimerTick(Sender: TObject);
begin
Inc(a);
end;
procedure MyTimerCreate;
begin
EventHandlers := TEventHandlers.Create();
MyTimer := TTimer.Create(nil);
with MyTimer do
begin
Interval := 1000;
Enabled := True;
OnTimer := EventHandlers.TimerTick;
end;
end;
procedure MyTimerFree;
begin
EventHandlers.Free;
MyTimer.Free;
end;
initialization
MyTimerCreate;
finalization
MyTimerFree;
end.
Das sind jetzt also drei Varianten. Welche ist die Beste für Timer in einer
Unit ohne Formular?