AW: Timer in einer Unit
Zitat:
Zitat:
|
AW: Timer in einer Unit
Zitat:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx an. Zitat:
Und zudem steht auch da, was der Rückgabewert bedeutet: Die Timer ID |
AW: Timer in einer Unit
Also, Beispiel:
Wenn Du 3 unterschiedliche Timer benötigst, dann brauchst du a) 3 verschiedene Handles, dann können die IDs gleich sein aber auf jeden Fall > 0. oder b) bei gleichem oder keinem Handle, z.B. dem Application.Handle, 3 verschiedene IDs Windows MUSS den Timer eindeutig identifizieren können und nutzt hier eine Kombination aus dem Handle UND der ID. Wenn Du bereits einen Timer mit der gleichen Kombination von Handle und ID erzeugt hast und das SetTimer nochmals mit den gleichen Werten aufrufst, dann wird KEIN neuer Timer angelegt, sondern bei dem bestehendem Timer NUR der Interval und ggf. die Funktion ausgetauscht. Nur wenn Du eine NEUE Kombination von Handle und ID verwendest, wird ein neuer Timer erzeugt. So, hoffe nun die Abhängigkeit zwischen Handle und ID verdeutlicht zu haben.. :wink: |
AW: Timer in einer Unit
Zitat:
Das Ergebnis war das, welches ich gepostet habe. Dies entspricht allerdings inhaltlich nicht exakt dem, welches ich aus Deinem Link zu MSDN entnehmen kann. Vielleicht sollte man die F1-Taste doch deaktivieren und nicht mehr erwähnen. Zitat:
|
AW: Timer in einer Unit
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:
Andere Variante. Die Idee fand ich im Internet. Ich weiß nicht ob die besser ist als die erste, sie ist zunindest etwas anders:
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.
Delphi-Quellcode:
Das sind jetzt also drei Varianten. Welche ist die Beste für Timer in einer Unit ohne Formular?
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. |
AW: Timer in einer Unit
Zitat:
|
AW: Timer in einer Unit
Zitat:
|
AW: Timer in einer Unit
Zitat:
Die API Lösung basiert auf MMSystem (TMMTime) gruss |
AW: Timer in einer Unit
Zitat:
|
AW: Timer in einer Unit
@BadenPower
Ist schon klar. Man kann aber auch die Verandatür öffnen und sein Auto im Wohnzimmer parken. Gehen tut es, womit die Parkplatzprobleme vorbei wären, man fragt sich aber trotzdem stets ob es die feine saubere Art ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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