TTimer während Laufzeit erzeugen



  • Hi Leute

    ich habe einen Timer der gewisse Kommunikationsabfragen auslöst.
    Diese ganze Kommunikation möchte ich jetzt in eine gesonderte Klasse auslagern
    ( keine TForm ).

    Dazu muss ich im Konstruktor dieser Klasse den Timer erzeugen und ihm ein OnTimer-Event zuweisen.

    ProcessRequestTimer = new TTimer( AOwner );
    ProcessRequestTimer->Interval = TimerInterval;
    ProcessRequestTimer->OnTimer = MessageReceiveEvent; // Hier Event angeben
    
    void Ccommunication::MessageReceiveEvent( TObject *Sender )
    {
    ...
    }
    

    Wie genau kann ich die Funktion dem OnTimerEvent zuweisen?
    Und woher bekommt der Timer das *"TObject Sender" wenn er das Event auslöst.

    Immerhin steckt dahinter ja keine Form, sondern eine einfache Klasse, die nix mit TForm zu tun hat.

    danke im Voraus 🙂



  • Ich könnte natürlich nur für diesen einen Timer eine Form erzeugen und den dann da platzieren, aber ich will das eben ordentlich haben und nicht sinnlose Forms erzeugen nur weils einfacher is.

    Ich hatte vergessen zu sagen, dass die Zuweisung des Events so nicht funktioniert:

    [C++ Fehler] CCommunication.cpp(38): E2034 Konvertierung von 'void (* (_closure )(TObject *))(TObject *)' nach 'void (_fastcall * (_closure )(TObject *))(TObject *)' nicht möglich



  • It0101 schrieb:

    Wie genau kann ich die Funktion dem OnTimerEvent zuweisen?

    Du hast ihn doch schon zugewiesen. Kommen Fehlermeldungen? Welchen Builder verwendest Du? Fehlt evtl. noch __fastcall?

    It0101 schrieb:

    Und woher bekommt der Timer das *"TObject Sender" wenn er das Event auslöst.

    Er (der Timer) wird sich selber mit this übergeben

    It0101 schrieb:

    Ich könnte natürlich nur für diesen einen Timer eine Form erzeugen

    Du kannst ein Datenmodul verwenden wenn es für Dich sauberer ist.



  • Danke! Es war __fastcall !!

    wenn man selten BCB nutzt, dann kann das wohl schonmal vorkommen 😉


Anmelden zum Antworten