![]() |
Komponentenentwicklung: Eigenes Ereignis
Hallo,
nachdem ich das Handbuch gequält habe (oder besser mich), und auch über die Suche nichts darüber gefunden habe. Einfach ausgedrückt: Meine Komponente sollte darauf reagieren, wenn sich eine (applikationsweit) globale Variable ändert. Es handelt sich bei der Variable nicht um eine Property der Komponente. Bin bisher nur bis zur Deklaration des Ereignisses gekommen und hänge da jetzt fest :-D
Delphi-Quellcode:
private
{ Private-Deklarationen } FOnMyVarChange: TNotifyEvent; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property OnMyVarChange: TNotifyEvent read FOnMyVarChange write FOnMyVarChange; Irgendwo muss ich das Ereignis letztlich auslösen. Über Sinn und Unsinn, und wo die Variable letztlich deklariert ist, soll man sich an der Stelle keine Gedanken machen. Setzt mal voraus dass es diese gibt... Wie programmiert man das, dass auf Änderungen dieser Variable meine Komponente ein Ereignis auslöst? Viele Grüße |
Re: Komponentenentwicklung: Eigenes Ereignis
Bisher hast du alles richtig gemacht.
Es fehlt noch:
Delphi-Quellcode:
Wenn sich was ändert einfach innerhalb der Komponente obige Methode aufrufen.
procedure TMyCompo.DoMyChange; // virtual, protected
begin if Assigned(FOnMyVarChange) then FOnMyVarChange(self); end; |
Re: Komponentenentwicklung: Eigenes Ereignis
Wenn die Variable eine Eigenschaft der Komponente ist, dieser Eigenschaft eine Setter-Methode verpassen und dort das Ereignis feuern.
Ist die Variable aber kein Teil des Objekts, und so ist es ja bei dir, falls ich das richtig verstanden habe, wirst du wohl an jeder Stelle im Code, an der die Variable gesetzt wird, das Ereignis einzeln auslösen müssen. Zum Auslösen von Ereignissen findest du mehr in der OH. //Edit Wie man das Ereignis auslöst hat shmia ja bereits demonstriert ;-) |
Re: Komponentenentwicklung: Eigenes Ereignis
Also danke erstmal für Eure Hilfe...
Ich muss dann doch etwas genauer werden. Meine Komponente ist ein abgeleitetes DBEdit. Im Grunde muss ich das Ereignis OnStateChange der verbundenen DataSource reagieren. Zitat:
Demzufolge ist meiner Ansicht nach ein eigenes Ereignis für den DBEdit erforderlich. Ich dachte so in etwa an die Windows-Messages, und dann über das Handle der DataSource irgendwie die Dinger abzufangen... Aber da verlassen mich meine Kenntnisse... |
Re: Komponentenentwicklung: Eigenes Ereignis
für mich sieht das so aus als ob du von DataSource ableiten solltest.
Das abgeleitete Object sollte dann die Möglichkeit bieten das sich weitere Objecte bei dem Datasorce registrieren und bei änderungen benachrichtigt werden. Die sauberste Lösung ist also von DataSource und von DBEdit abzuleiten und beide Nachfahren so zu erweitern das sie miteinander kommunizieren können. |
Re: Komponentenentwicklung: Eigenes Ereignis
Zitat:
TDataLink und TFieldDataLink Im Fall eines DBEdit wäre TFieldDataLink richtig. Die Sache ist etwas komplex; deshalb sollte man auf Torry's nach datensensitiven Controls Ausschau halten, downloaden, lernen und dann abkupfern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz