Timer->OnTimer - Event abfangen
-
Hallo zusammen,
ich habe folgenden Code:
void __fastcall TForm1::Button1Click(TObject *Sender) { TTimer *timer = new TTimer(this); timer->Interval = 6000; timer->Enabled = true; }Wie kann ich jetzt das OnTimer-Ereignis abfangen??
Meine Frage ist nur wie ich das im Quellcode definieren muss??
So ungefähr??:
void timer::OnTimer() { }DANKE
-
wieso nimmst nicht die nichtvisuelle komponente, platzierst sie, und schaust dir den generierten code mal an?
-
void __fastcall TForm1::Button1Click(TObject *Sender) { TTimer *timer = new TTimer(this); timer->Interval = 6000; timer->Enabled = true; timer->OnTimer = OnTimer; } void __fastcall TForm1::OnTimer(TObject *Sender) // mußt du dann auch in form1.h deklarieren { // hier dein Timer Code }
-
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTimer *timer = new TTimer(this);timer->Interval = 6000;
timer->Enabled = true;
timer->OnTimer = OnTimer;
}So wird das nicht funktionieren, da nach verlassen des Scopes von Button1Click dein Timer nicht mehr existiert.
Wenn schon dann so:Unit1.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; TEdit *Edit1; void __fastcall FormCreate(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // Anwender-Deklarationen TTimer *timer; void __fastcall OnTimer(TObject *Sender); public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifUnit1.cpp
void __fastcall TForm1::FormCreate(TObject *Sender) { timer=NULL; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { delete timer; timer=new TTimer(this); timer->Interval = 6000; timer->OnTimer = OnTimer; timer->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::OnTimer(TObject *Sender) { //Mach was }
-
Natürlich existiert der Timer auch weiterhin (nur gibt es keinen Zeiger darauf, um den Timer zu löschen).
Aber @Teatime, dein Code ist so natürlich richtig, wenn man nur einen Timer haben will, aber vielleicht möchte man ja mehrere Timer mit dem Buttno erstellen, dann müßte man nur noch die Timer in einen vector stellen bzw. bei Schließen des Forms werden die Timer dann ja automatisch entfernt (da die Form mit "this" als Owner angegeben wurde).
-
rofl
-
Hallo zusammen,
ich habe das gleiche Problem wie "skluge", allerdings erstelle ich den Timer in der Funtion einer Klasse und er wird auch nur dort benötigt!wie kann ich also das OnTimer event abfangen??
Vielen Dank
mfg hans
-
Hallo
genauso wie du es bei einer Form machen würdest. Also brauchst du eine Funktion mit dem Prototyp
void __fastcall MyClass::OnTimer(TObject *Sender)die du als Methode an den Timerevent übergeben kannst.
bis bald
akari
-
Dnake sehr. Ich habs mit allen hier gegebenen Informatiunen hingekriegt!
mfg hans