Neuen Event in einem Frame?



  • Hallo,

    Ich möchte für einen Frame gerne einen OnChange-Event zufügen, damit die übergeordnete Form entsprechend reagieren kann. Geht sowas und wenn ja wie?



  • Wann genau soll das Event ausgelöst werden?

    Grundsätzlich dürfte so etwas machbar sein, indem du von ein Frame erstellst, es wunschgemäß anpaßt und weitere Frames davon ableitest (VFI).



  • Den Event würde ich innerhalb des Frames selber auslösen wollen. Der Frame stellt eine Sammlung mehrerer Einzelkomponenten dar (Editfelder, Komboboxen etc.). Nun soll einfach ein OnChange für den gesamten Frame ausgelöst werden, wenn sich irgendwas ändert, damit der Parent darauf reagieren kann. Ich löse das bisher über eine Callback-Funktion wollte das aber etwas komfortabler haben.
    Wahrscheinlich ist es besser ich erzeuge gleich eine neue Komponente dafür.



  • Hallo

    Das ist wie gesagt recht einfach. Alles was du zusätzlich in der Frame-Klasse deklarieren must ist die Event-Eigenschaft :

    public :
    // Die Eigenschaft die du von außen benutzen kannst
    __property TNotifyEvent MeinEvent = {read = iMeinEvent, write = iMeinEvent, default = 0};
    
    private :
    // Interner Speicher für die zugewiesene Adresse
    TNotifyEvent iMeinEvent;
    

    Nun kannst du in einer Methode des Frames diesen Event so auslösen :

    ...
    if (iMainEvent)
    {
      iMainEvent(this);
    }
    ...
    

    Um diesen Event von externen Komponenten benutzen zu können must du jetzt nur noch eine entsprechende Methode damit verbinden

    // Methode die der Event aufrufen soll
    void __fastcall TForm1::OnMeinEvent(TObject* Sender)
    {
      ShowMessage("Mein Event!");
    }
    ...
    // Irgendwo in der Initialisierung des Forms
    Frame->MeinEvent = OnMeinEvent;
    

    Das wars schon. Wenn du diesen Event auch noch über den Objektinspektor verwalten willst, brauchst du die Property-Zeile nur in den __published-Bereich des Frames zu verschieben.
    Außerdem kannst du die Property noch um Getter oder Setter erweitern. Das lohnt sich vor allem bei dem Setter, wenn du beim Zuweisen den Frame noch eine spezielle Aktion ausführen lassen willst.
    Weiteres zum Thema Property und Komponententwicklung findest du hier.

    /Edit : Huch ich merk erst jetzt das die Frage von Braunstein kommt... habe ich die Frage falsch verstanden? 😕 Ich kann mir nicht vorstellen das du nicht selber auf meine einfache Lösung kommst.

    bis bald
    akari



  • Danke. Das Tutorial kenne ich schon.
    Ich hatte es wie du unten erst versucht (Name der property Change). Einen OnChange-Event hat der Compiler dann aber nicht gefunden.
    Wenn ich die Event-Eigenschaft direkt OnChange nenne, dann kann ich sie auch zuweisen. Im Objektinspektor taucht der Event auch nicht auf. Das aber eher ein kleineres Problem. Ich hätte es halt gerne den anderen Benutzern leichter gemacht.


Anmelden zum Antworten