AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timer in einer Unit

Ein Thema von Popov · begonnen am 19. Mär 2015 · letzter Beitrag vom 23. Mär 2015
Antwort Antwort
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#1

AW: Timer in einer Unit

  Alt 20. Mär 2015, 08:31
Ich weiß ja nicht wo du schaust, aber ich schaue mir
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
an.
Nachdem ich durch Deinen Post #10 nicht mehr ganz sicher wahr, ob mein Erinnerungsvermögen nicht doch im Stich gelassen hatte, habe ich das getan, ws wir immer und immer wieder predigen und die Delphi-Wunderwaffe gezückt, in dem ich die F1-Taste betätigt habe.

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.

Und zudem steht auch da, was der Rückgabewert bedeutet: Die Timer ID
Das war ja auch nur eine vorsorgliche Antwort darauf wo ich die TimerID herbeziehe, wenn der, wie ich annahm, Parameter nIDEvent, den man selbst angibt und welchen man normal mit KillTimer() benutzt, ignoriert werden würde.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Timer in einer Unit

  Alt 20. Mär 2015, 15:33
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?

Geändert von Popov (20. Mär 2015 um 15:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.357 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Timer in einer Unit

  Alt 20. Mär 2015, 15:52
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;
...
In dem Sinne wollte ich Dir gestern eigentlich antworten, hatte das dann aber verworfen weil ich meinte, Du suchst eine andere Lösung (ohne TTimer).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Timer in einer Unit

  Alt 20. Mär 2015, 16:04
In dem Sinne wollte ich Dir gestern eigentlich antworten, hatte das dann aber verworfen weil ich meinte, Du suchst eine andere Lösung (ohne TTimer).
Eigentlich suche ich auch eine Lösung ohne TTimer. Der Grund ist aber weniger eine Abneigung gegen den TTimer, als die Frage ob Komponenten, selbst wenn sie nicht sichtbar sind, in einer reinen Unit etwas zu suchen haben?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Timer in einer Unit

  Alt 20. Mär 2015, 16:20
In dem Sinne wollte ich Dir gestern eigentlich antworten, hatte das dann aber verworfen weil ich meinte, Du suchst eine andere Lösung (ohne TTimer).
Eigentlich suche ich auch eine Lösung ohne TTimer. Der Grund ist aber weniger eine Abneigung gegen den TTimer, als die Frage ob Komponenten, selbst wenn sie nicht sichtbar sind, in einer reinen Unit etwas zu suchen haben?
Warum vermischst du dann TTimer mit TMMTime?
Die API Lösung basiert auf MMSystem (TMMTime)

gruss

Geändert von EWeiss (20. Mär 2015 um 16:29 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Timer in einer Unit

  Alt 20. Mär 2015, 16:30
Der Grund ist aber weniger eine Abneigung gegen den TTimer, als die Frage ob Komponenten, selbst wenn sie nicht sichtbar sind, in einer reinen Unit etwas zu suchen haben?
Eine Komponente ist doch auch nur eine stink normale Klasse, wie z.B. TStringList, welcher die zusätzliche Möglichkeit gegeben wurde auf der Form platziert zu werden, damit sie automatisch erstellt wird und man Werte im OI beabeiten kann.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Timer in einer Unit

  Alt 20. Mär 2015, 16:34
@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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.419 Beiträge
 
Delphi 12 Athens
 
#8

AW: Timer in einer Unit

  Alt 20. Mär 2015, 16:51
Eigentlich würde ich lieber ein OOP-Turorial empfehlen, aber hier mal in Kurz, mit Kommentaren.
Delphi-Quellcode:
type
  TMyTimer = class(TTimer)
  protected
    procedure DoOnTimer; override;
  public
    constructor Create(Owner: TComponent); override;
    //procedure TimerTick(Sender: TObject); // wenn man schon vererbung benutzt, dann doch bitte richtig -> DoOnTimer
  end;

var
  MyTimer: TMyTimer; // OK, da mach ich noch mit, aber natürlich nur in Implementation deklariert, aber eigentlich als private Class-Var in die Klasse
  //a: Integer = 0; // warum ist das global, wo es doch nur im Timer benutzt wird?

//procedure TMyTimer.TimerTick(Sender: TObject);
procedure TMyTimer.DoOnTimer;
begin
  Tag := Tag + 1; //Inc(FCount); // privates Feld "FCount: Integer" mit Property oder das Entwicklerproperty "Tag"
  inherited;
end;

constructor TMyTimerCreate(Owner: TComponent);
begin
  inherited;
  Interval := 1000;
end;

//procedure MyTimerCreate;
//begin
// MyTimer := TMyTimer.Create(nil); // alleine in Prozedur, also sinnlos hier
// with MyTimer do
// begin
// Interval := 1000; // nja, 1000 ist zwar auch default, aber wenn es sein muß, dann wenigstens in den Constructor
// Enabled := True; // es ist per Default immer Enabled
// OnTimer := TimerTick; // sinnlos
// end;
//end;

//procedure MyTimerFree;
//begin
// MyTimer.Free;
//end;

initialization
  //MyTimerCreate;
  MyTimer := TMyTimer.Create(nil);

finalization
  MyTimer.Free; //MyTimerFree;

end.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Mär 2015 um 16:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz