Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTimer nicht in einem Form sondern in einem eigenen Objekt (https://www.delphipraxis.net/9342-ttimer-nicht-einem-form-sondern-einem-eigenen-objekt.html)

ahachmann 24. Sep 2003 14:54


TTimer nicht in einem Form sondern in einem eigenen Objekt
 
Hallo,
Ich möchte in ein Objekt eine Timerfunktion einbauen, die nach einiger Zeit eine Funktion des Objektes ausführt.
Jedoch habe ich keine TComponente die ich den Constructor übergeben kann.
Nach meinem Verständnis müßte die Componente das Objekt selber sein, damit ich die Methoden dieses Objektes ausführen kann.

Delphi-Quellcode:
  ObjBombeFeld = Class(objFeld)
    constructor Mutieren(AltesFeld: ObjFeld; Bild: String); override;
    procedure Bombe; Override;
    procedure Zuendung;
    {private
    Timer: TTimer;
    end;}
  end;
so sieht das Objekt aus.
Kann mir jemand helfen?
Vielen Dank,
Alexander

[edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit]

SirThornberry 24. Sep 2003 15:07

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
Verusuch einfach der Create-methode des Timers "Application" zu übergeben

ahachmann 24. Sep 2003 15:39

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
Jetzt habe ich es hinbekommen. Ich habe das Objekt einfach von der Classe TComponent abgeleitet.
Aber jetzt habe ich das Problem, das Der Timer garnicht das Delay durchführt, sondern die Funktion gleich ausführt.
Wo liegt mein Fehler?
Delphi-Quellcode:
procedure ObjBombeFeld.Zuendung;
  var Timer: TTimer;
begin
  Timer:= TTimer.Create(self);
  Timer.Interval := 2000;
  Timer.OnTimer := Bombe(self);
  Timer.Destroy;
end;
Danke,
Alexander

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

SirThornberry 24. Sep 2003 16:28

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
funktioniert
Zitat:

Timer.OnTimer := Bombe(self);
wirklich?? dachte da weist man nur den procedurnamen zu weil der parameter von der Componente später gesetzt wird!?
Das die funktion sofort ausgeführt wird liegt vielleicht daran (dachte der compiler bringt bei sowas nen fehler aber hängt vermutlich von der Delphi version ab). Standardmäßig ist der Timer aber auch auf enabled und übernimmt den intervalwert erst nach dem enabled neu gesetzt wird.

ahachmann 24. Sep 2003 17:11

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
Hmm, da hattest Du recht. Jetzt klappt es.
Aber der letzte schritt fehlt mir jetzt noch. Was mache ich wenn ich der Funktion die der Timer ausführt noch weitere Parameter übergeben will? Wenn die Liste der Parameter der Funktion einfach erweitere, dann bekomme ich einen Fehler.
Vielen Dank,
Alexander

Papulizer 20. Okt 2003 15:52

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
Hallo,
dazu müsstest du wohl deine eigene Timer Komponente erstellen und die von TTimer ableiten. Dann einen eigenen Ereignistyp definieren, der deinen Vorstellungen entspricht.

ArrayOf.. 21. Okt 2003 00:06

Re: TTimer nicht in einem Form sondern in einem eigenen Obje
 
noch einfacher ist's, wenn man seinen Timer dafür dann einfach eine andere Procedure aufrufen lässt. Und zwar eine, die jetzt selbst wieder nur diese eigentliche Ziel-Funktion aufzurufen hat, dieses jedoch nun auch mit jeder beliebigen Parameterkonstellation tun kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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