Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TTimer dynamisch erstellen und Event zuweisen...
knightkiller - Mo 15.07.02 11:17
Titel: TTimer dynamisch erstellen und Event zuweisen...
Wie kann ich einen TTimer dynamisch kreieren und einen Event zuweisen?
bekomme beim Event zuweisen immer:
Quelltext
1:
| [Error] Unit1.pas(118): Incompatible types: method pointer and regular procedure |
Habe ein Formular auf dem keine Funktionen und kein Timer sein darf und muss einen Timer haben, den ich nun in einer Unit kreieren, den Event zuweisen und starten will
hoffe irgend jemand verteht was ich meine
knightkiller - Mo 15.07.02 11:23
Danke funktioniert!!!
Freiberger - Fr 08.06.07 20:28
Hy,
ich habe genau das gleiche Problem.
Aber diese Seite gibt es leider nicht mehr.
Hat jemand ne Idee ?
HelgeLange - Fr 08.06.07 20:31
Timer ist eine nicht-visuelle Komponente, kann man also beruhigt drauflegen.
Ansonsten geht es über :
Delphi-Quelltext
1: 2:
| Timer1 := TTimer.Create(Self); Timer1.OnTimer := OnTimer1; |
und irgendwo im Form-code dann noch eine OnTimer1 deklarieren als member vom Form (weil das event eine
procedure of object erwartet...
Freiberger - Fr 08.06.07 20:39
Irgendwie bin ich zu blöd dazu.
Ich habe mein Programm mit der Form1.
Dazu habe ich eine extra Unit eingebunden.
Wenn ich in der Unit eine bestimme Procedure aufrufe, soll ein Timer gestartet werden.
Mit TTimer.create(self) bekomme ich nur Fehler.
In der Haupt-Unit funktioniert es mit TM1:= TTimer.create(self);
Aber in der anderen Unit kommt
"Undefinierter Bezeichner (self)" !!!
Der Timer muß aber in der Unit sein, da diese Unit auch von anderen Programmen genutzt werden soll...
Narses - Fr 08.06.07 20:56
Moin!
Übergib beim .Create halt NIL, aber dann mußt du die Komponente auch selbst wieder freigeben. :mahn: ;)
cu
Narses
HelgeLange - Fr 08.06.07 21:00
Wenn man den timer selbst erstellt, auch innerhalb des Formulars, sollte man ihn auch selber freigeben...
Freiberger - Fr 08.06.07 21:01
Heee, es klappt.
Dankeschön. Es sind eben manchmal die ganz einfachen Sachen...
Freiberger - Fr 08.06.07 21:14
OK, zu früh gefreut...
das Event kann ich auch nicht zuweisen...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure Start(); begin TM:= TTimer.create(NIL); TM.OnTimer:= OnTM; <--- TM.Interval:= 1000; TM.Enabled:= true; end;
procedure OnTM(); begin beep; end; |
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
alias5000 - Fr 08.06.07 21:18
Das Ereignis OnTimer ist ein TNotifyEvent. Das ist dasselbe, wie z.B. beim OnClick eines TButton.
Demnach muss deine Ereignismethode noch den Parameter "Sender: TObject" beinhalten.
Gruß
alias5000
Freiberger - Fr 08.06.07 21:23
OK
Delphi-Quelltext
1:
| TM.OnTimer:= OnTM(Sender: TObject); |
Aber da kommt OnTM ist Undefinierter Bezeichner.
auch mit OnTM:= TNotifyEvent; geht es nicht...
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
HelgeLange - Fr 08.06.07 21:27
wie schon erwähnt wurde, MUSS ein event eine objekt-Methode sein
Also geht nicht :
Delphi-Quelltext
1:
| procedure OnTimer1(Sender: TObject); |
es muss etwas sein wie
Delphi-Quelltext
1:
| procedure Form1.OnTimer1(Sender: TObject); |
Freiberger - Fr 08.06.07 21:29
Also kann ich kein Ereignis definieren, da die extra Unit je keine Form hat...
Oder wie ?
alias5000 - Fr 08.06.07 21:36
Naja, das muss halt in einem Objekt sein. Das muss nicht zwingend eine Form sein.
Mach dir ne neue Unit auf und schreibe folgendes, es wird funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit einszweidrei;
interface
uses...;
type class test = class(TObject) private fTimer: TTimer; public constructor Create; destructor Destroy; override; procedure TimerTimer(Sender: TObject); end;
implementation
constructor Create; begin fTimer := TTimer.Create(...); fTimer.OnTimer := TimerTimer; ... end;
destructor Destroy; begin fTimer.free; end;
procedure TimerTimer(Sender: TObject); begin end; |
Das kannst du natürlich nicht 1:1 kopieren, sollst du ja auch nicht.
Aber ich hoffe dir ist das Prinzip dan klarer, dass das halt eine Methode aus irgendeinem Objekt sein muss
Gruß
alias5000
Edit: Methode TimerTimer in der Implementation vergessen
Freiberger - Fr 08.06.07 21:39
OK, ich versuche es morgen mal.
Muß jetzt leider weg. Aber langsam steige ich dahinter...
Vielen Dank erstmal... :D
Freiberger - Mo 11.06.07 19:05
Hy,
danke für die vielen Antworten.
Leider habe ich das mit CLASS nicht ganz hinbekommen.
Es ging alles, außer bei der ONTimer Zuweisung.
Aber mit
http://www.dbr-software.de/delphi/timer.php hat es wunderbar geklappt.
DANKESCHÖN...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!