![]() |
TTimer.OnTimer ersetzen
Hallo,
ich habe folgendes Problem (wie kann ich es am einfachsten lösen?): Ich habe eine Unit gemacht und ein Timer "created" :stupid:. Nun will ich als Timer1.OnTimer eine selbst gemachte Prozedur setzen, wie geht das? //Edit: ich habe keine Lust ein TNotifyEvent zu machen, etc. :wiejetzt: Für schnelle Hilfe bin ich immer dankbar! :wink: |
Re: TTimer.OnTimer ersetzen
Und warum nicht? Du brauchst doch nur eine Methode mit der selben Signatur erzeugen und diese der Property zuweisen.
|
Re: TTimer.OnTimer ersetzen
ich wollte es so machen:
Delphi-Quellcode:
so funzt es nicht! Was muss ich ergänzen? :)
//...
Timer1.OnTimer:=func1; //... procedure func1; begin //blah end; |
Re: TTimer.OnTimer ersetzen
Delphi-Quellcode:
Meinst du das ? :)
type
TForm1 = class(TForm) ... public procedure Timern(Sender: TObject); end; var ATimer: TTimer; procedure TForm1.Timern(Sender: TObject); begin // Irgendwas; end; procedure Wasweißich; begin ATimer := TTimer.Create(*Parameter?!*); ATimer.Intervall := 100; ATimer.OnTimer := Timern; end; Gruß Neutral General |
Re: TTimer.OnTimer ersetzen
achso, muss es eine public procedure sein, ich habe nämlich leider keine Form in meiner Unti deklariert...
|
Re: TTimer.OnTimer ersetzen
Ich glaube schon :(
Ich habs mal ohne probiert und es ging nicht.. aber das geht mit Sicherheit auch ohne das die Procedure in einer Klasse drin ist .. oder ? |
Re: TTimer.OnTimer ersetzen
Zitat:
|
Re: TTimer.OnTimer ersetzen
es muss nicht im Public sein, aber es muss auf jeden Fall eine Methode (Procedure eines Objectes) sein.
Wenn du kein Form hast, hast du dann wenigstens eine Nachrichtenschleife? Ansonsten arbeitet der Timer auch nicht richtig. Im übrigen kannst du dir auch eine Hilfsklasse schreiben.
Delphi-Quellcode:
Es gibt auch eine Möglichkeit ohne Methode. Dabei sollte man jedoch wissen das man macht. Und wenn man das weiß kommt man selbst auf die Idee. (Man sollte wissen was der Intern der Unterschied zwischen einer Methode und einer Procedure ist)
type
THelpClass = class(TObject) public procedure TimerEventProc(Sender: TObject); end; [...] procedure THelpClass.TimerEventProc(Sender:TObject) begin //Do something end; [...] helpinstance := THelpClass.Create; Timer.OnTimer = helpinstance.TimerEventProc; |
Re: TTimer.OnTimer ersetzen
Sagt mal, wenn man ne Unit ohne Form hat: TTimer.Create erwartet als Parameter TComponent. Was gebe ich ihm da an? Kann ich das einfach durch "NIL" ersetzten?
|
Re: TTimer.OnTimer ersetzen
genau, einfach nil übergeben. Der Owner dient ja lediglich dazu das die Komponente automatisch zerstört wird bzw. per FindComponent gefunden wird.
|
Re: TTimer.OnTimer ersetzen
Zitat:
|
Re: TTimer.OnTimer ersetzen
Natürlich muss sie Public oder Published sein, schliesslich woll ihr sie doch von ausserhalb der Klasse zuweisen - und dort sind nunmal nur öffentliche und veröffentlichte Methoden sichtbar. Ansonsten könnt ihr die Methode auch Private oder Protected deklarieren, dann müsst ihr sie nur halt innerhalb der Klasse zuweisen.
Nehmt doch eine statische Methode, dann könnt ihr euch das Instanz erstellen auch sparen...
Delphi-Quellcode:
Und vor allem spart ihr euch dies rumgematsche und gefake mit den "ich mache mir eine Procedure und tarne sie als Methode".
Type
TStaticHelper = Class Public Class Procedure MyOnTimer(Sender: TObject); End; ... Procedure TStaticHelper.MyOnTimer(Sender: TObject); Begin ShowMessage('Schon da'); End; Begin Timer.OnTimer := TStaticHelper.MyOnTimer; End. /EDIT: *Argh* Da nölt man rum und macht es selber nicht mal richtig... :wall: :wall: |
Re: TTimer.OnTimer ersetzen
Thomas, du hast das class vergessen:
Delphi-Quellcode:
Gruß Hawkeye
Type
TStaticHelper = Class Public class Procedure MyOnTimer(Sender: TObject); // <-- hier class End; ... class Procedure TStaticHelper.MyOnTimer(Sender: TObject); // <-- hier class Begin ShowMessage('Schon da'); End; Begin Timer.OnTimer := TStaticHelper.MyOnTimer; End. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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