Eigene Komponente mit Standardverhalten für Events



  • Hallo,

    ich stehe vor einem kleinen Problem und kann seit Tagen keine Lösung dafür
    finden. Deswegen frage ich jetzt hier.

    Ich habe hier eine Komponente die von TListView abgeleitet ist.
    Im OnColumnClick Ereignis möchte ich ein bestimmtes Standardverhalten hervorrufen, z.B. das Sortieren des Spalteninhalts. Dazu habe ich das Verhalten
    in der von TListView abgeleiteten Klasse implementiert.

    Wenn ich nun das abgeleitete ListView auf ein Formular ziehe, macht die Komponente bei OnColumnClick genau das was ich möchte...

    ABER: Sobald ich der Komponente die sich auf dem Form befindet das OnColumnClick-Ereignis zuweise ist das Standardverhalten der Parent-Komponente wieder weg.

    Ich möchte im Prinzip das gleiche wie beim OnClose-Ereignis erreichen. Hier kann man die Ereignisbehandlung auch bearbeiten, wobei das Form im Anschluss trotzdem geschlossen wird.

    Ich hoffe ich konnte mein Problem vertändlich genung schildern 🙂

    Kerem



  • Du musst dafür sorgen dass auch die Ereignisroutinen der Vorfahren aufgerufen werden.
    Das ist eigentlich in der Hilfe zur Komponentenentwicklung ganz gut beschrieben.



  • Vielen Dank für deine Antwort.

    Ich habe in der Hilfe bereits den Teil "Ereignisse erzeugen" durchgelesen,
    bin aber trotzdem nicht voran gekommen.

    Könntest du mir vielleicht einen konkreteren Tipp geben?



  • void __fastcall TWButton::Click(void)
    {
       ...
       ...
       TBitBtn::Click();
       ...
       ...
    }
    


  • Ok, ich jetzt hab ich das Prinzip verstanden 🙂 Vielen Dank 👍

    Ich habe die virtuelle Methode TListView::ColClick(TListColumn* Column)
    überschrieben.

    Das selbe möchte ich jetzt auch für das Ereignis OnCompare umsetzen,
    kann aber nicht herausfinden welche Methode ich hierfür überschreiben muss.

    Weißt du wie man das generell herausfinden kann?



  • Die Methoden in den Komponenten die den OnXXXXXX zugewiesen werden heißen meisten DoIrgendWas.
    Herausfinden kannst Du das wenn Du im VCL-Sourcecode nach den entsprechenden Events suchst und schaust was da zugewiesen wird.

    die DoIrgendWas-Methoden sind im Allgemeinen auch virtual und können überschrieben werden.



  • Nochmals Danke für deine Hilfe.

    Ich habe mir die VCL.ComCtrls.pas mal näher angeschaut, konnte zu OnCompare aber keine passende Funktion finden. Das scheint da etwas anders zu sein.

    Ich habe es jetzt über die Methode CustomSort(...) gelöst, die ich innerhalb von ColClick(...) aufrufe.


Anmelden zum Antworten