Von TListView erben und Events nutzen



  • Mahlzeit.

    Ich habe mir einen neuen ListView von TListView abgeleiten, der immer wieder benutzen Code beinhaltet. Jetzt möchte ich auf das OnColumnClick-Event reagieren, gleichzeitig mir aber nicht die Möglichkeit verbauen, individuellen Code auszuführen, wenn das OnColumnClick-Event eintritt.
    Einfach gesagt möchte ich also, das erst die Event-Methode der Klasse ausgeführt wird und dann die individuell gesetzte. Ich stehe allerdings gerade wie der Ochs vorm Berge und weiß nicht, wo ich da ansetzten soll.
    Wer kann Licht ins Dunkel bringen?

    mfg
    xXx



  • Hallo

    als einfache Lösung kannst du intern den OnColumnClick-Event selber in einer Methode der abgeleiteten Controlklasse abfangen.
    Um den externen Event noch benutzen zu können, legt du in der abgeleiteten Klasse noch einen zweiten private-Event des selben Typs an, in den die externe Eventadresse gespeichert wird. Dazu must du die Property-Definition des Events mit passenden Getter/Setter ausstatten.
    Dann kannst du in deiner eigenen internen Methode noch zusätzlich die externe Methode aufrufen.

    bis bald
    akari



  • Du kannst z.B. in deiner abgeleiteten Klasse die Methode ColClick überschreiben:

    void __fastcall TMyListView::ColClick(TListColumn listcol)
    {
      DoSomething();  // dein Code vor dem Event
    
      TCustomListView::ColClick(listcol); // das externe Ereignis
    }
    

    Rob'



  • Ich hab das jetzt so verstanden:
    Ich erstelle einen neuen Methodenpointer OnMyColumnClick, in dem ich die externe Click-Methode speicher.
    OnColumClick wird dann intern benutz und ruft die Objektmethode auf, die, sofern nicht NULL, auch die OnMyColumnClick-Methode aufruft.
    Dann sollte ich besser OnColumnClick noch auf private umdeklarieren, damit mir niemand die Methode überschreiben kann. Wie mache ich das?

    EDIT: Ahh ok. das gefällt mir natürlich noch besser. Hatte eigendlich auch gehofft, das es so geht, wusste nur nicht wie ich das schreiben muss 🙂
    besten dank.


Anmelden zum Antworten