Autor |
Beitrag |
knightkiller
      
Beiträge: 35
WinXP SP2
D7 Pers, D2005 Pers
|
Verfasst: Mo 15.07.02 11:17
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
|
|
wwerner
      
Beiträge: 185
|
Verfasst: Mo 15.07.02 11:20
|
|
knightkiller 
      
Beiträge: 35
WinXP SP2
D7 Pers, D2005 Pers
|
Verfasst: Mo 15.07.02 11:23
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 08.06.07 20:56
Moin!
Übergib beim .Create halt NIL, aber dann mußt du die Komponente auch selbst wieder freigeben.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Fr 08.06.07 21:00
Wenn man den timer selbst erstellt, auch innerhalb des Formulars, sollte man ihn auch selber freigeben...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 08.06.07 21:01
Heee, es klappt.
Dankeschön. Es sind eben manchmal die ganz einfachen Sachen...
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: 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
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: 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
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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); |
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 08.06.07 21:29
Also kann ich kein Ereignis definieren, da die extra Unit je keine Form hat...
Oder wie ?
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: 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: 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
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 08.06.07 21:39
OK, ich versuche es morgen mal.
Muß jetzt leider weg. Aber langsam steige ich dahinter...
Vielen Dank erstmal... 
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 08.06.07 23:27
Hallo,
Freiberger hat folgendes geschrieben: | Hy,
ich habe genau das gleiche Problem.
Aber diese Seite gibt es leider nicht mehr. |
Doch die Seite gibt es noch
www.dbr-software.de/delphi/timer.php
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
-Pl-
      
Beiträge: 22
Win XP, Win Vista
Delphi 7
|
Verfasst: Sa 09.06.07 22:15
www.delphi-forum.de/...der=asc&start=20
Ich hatte am Ende das gleiche Problem, ist allerdings ein wenig unübersichtlich, das Problem ist aber gelöst.
|
|
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: 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 www.dbr-software.de/delphi/timer.php hat es wunderbar geklappt.
DANKESCHÖN...
|
|