![]() |
Fehler bei Erzeugung TTimer zur Laufzeit
Hallo,
ich möchte eine TTimer-Komponente zur Laufzeit erzeugen und OnTimer zuweisen. Dabei bekomme ich die Folgende Fehlermeldung: [dcc32 Fehler] Main1.pas(8041): E2010 Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' Hier der Quelltext (Auszüge) type TMain = class(TForm) . . . procedure MyTimer(Sender: TObject); . . . implementation uses .... {$R *.DFM} . . . . procedure TMain.MyTimer(Sender: TObject); begin MessageDlg('15Min um!', mtInformation, [mbOk], 0, mbOk); end; . . . procedure TMain.BitBtn267Click(Sender: TObject); var edTimer: TTimer; begin //Timer mit 15 Min starten if TTimer(FindComponent('Timer1')) = Nil then begin edTimer := TTimer.Create(Self); edTimer.Enabled := False; edTimer.Name := 'Timer1'; edTimer.Interval := 3240000; edTimer.OnTimer := MyTimer(Self); edTimer.Enabled := True; end; end; Habe hier im Forum schon gesucht aber nichts brauchbares gefunden. Kann mir da jemand helfen? |
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Benutze künftig bitte Delphi-Tags, dann ist der Code besser lesbar. Zum Problem:
Delphi-Quellcode:
edTimer.OnTimer := MyTimer(self);
--> edTimer.OnTimer := MyTimer; |
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Danke jetzt gehts :-D
|
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Delphi-Quellcode:
entspricht implizit einem
:= MyTimer
Delphi-Quellcode:
(speichere den Zeiger auf diese Methode),
:= @MyTimer;
aber
Delphi-Quellcode:
ist ein Aufruf dieser Funkton/Prozedur und hier wird das "Result" der Funktion für die Zuweisung verwendet (rufe Funktion auf und speicher das, was sie zurückliefert).
MyTimer(irgendwas)
Und natürlich stimmt die Signatur des "nichtvorhandenen" Results nicht mit dem Typ der Variable des Property überein, was dann der Compiler auch richtig bemängelt hat. |
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Moin...:P
Delphi-Quellcode:
...warum erst auf der Form/Datamodule gucken und dann den Timer dynamisch erzeugen? Du mußt doch wissen was du auf die Form gepackt hast. Wenn du keinen Timer auf der Form hast, dann ist die Zeile überflüssig... :zwinker:
if TTimer(FindComponent('Timer1')) = Nil then
PS: weißt du eigentlich noch was "BitBtn267" ist? :shock: PS: 1. Mit dem Button erzeugst du jedesmal einen neuen Timer. Die Timer werden aber erst mit der Anwendung freigegeben! :roll: 2. Die erzeugten Timer werden nie angehalten! 3. Wenn du 3 Mal gedrückt hast, hast du 3 Timer die "regelmäßig" nach 15min nach ihrem Start das Event auslösen! |
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Zitat:
Delphi-Quellcode:
immer false zurück und der Zweig, im dem ein neuer Timer zugefügt wird, wird nicht durchlaufen.
if TTimer(FindComponent('Timer1')) = Nil
|
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Moin...:P
Delphi-Quellcode:
...imho findet FindComponents nur die statisch auf der Form liegenden Components. Die dynamisch erzeugten sind nicht im Components Array...oder? :gruebel:
if TTimer(FindComponent('Timer1')) = Nil
![]() |
AW: Fehler bei Erzeugung TTimer zur Laufzeit
AFAIK sind diejenigen Komponenten im Components-Array, deren Owner die jeweilige Komponente ist. Äquivalent dazu sind diejenigen im Controls-Array, deren Parent sie ist. Ob sie zur Lauf- oder Designzeit angelegt wurden spielt dabei keine Rolle. Sollte ich mich irren, bitte korrigieren.
|
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Zitat:
|
AW: Fehler bei Erzeugung TTimer zur Laufzeit
Owner -> Components
Parent -> Controls PS: ![]()
Delphi-Quellcode:
C := TC.Create(X); -> X.Components[] und X.FindComponent(C.Name) // ab TComponent
C.Parent := X; -> X.Controls[] und X.FindControl(C.Name) // ab TWinControl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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