![]() |
Objektereignisse bearbeiten
Männer! (Oder gibt's hier auch Frauen?)
Wahrscheinlich eine Anfängerfrage: Ich habe ein grafisches Objekt gebaut, mit dem ich vom Hauptprogramm aus kommunizieren kann (wie üblich über properties mittels read und write-Methoden). Wenn mein Objekt jetzt aber darüberhinaus ein Ereignis auslöst, weil es z.B. einen Button hat, auf den geklickt werden kann, wie kann mein Hauptprogramm davon sofort erfahren?: Das Objekt könnte einfach das Ereignis behandeln, indem es eine Prozedur des Hauptprogramms aufruft - das widerspricht aber dem objektorientierten Prinzip, denn der Zugriff auf's Objekt sollte ja ausschließlich über properties erfolgen, oder? Wie macht man's richtig? Matthias :roll: |
Re: Objektereignisse bearbeiten
Ereignisse (Events) sind Propertys (Eigenschaften) selbst.
|
Re: Objektereignisse bearbeiten
Du meinst, sowohl Eigenschaften als auch Ereignisse können properties sein? Schon klar, aber ein kleines Beispiel würde mir helfen:
Wie sieht 1. die Deklaration der Ereignisbehandlungsroutine im Objekt aus, und wie 2. die Deklaration der Ereignisbehandlungsroutine im Hauptprogramm, die auf das Ereignis reagiert, welches vom Objekt ausgelöst + ans Hauptprogramm weitergeleitet wurde? Oder stelle ich mir den Ablauf falsch vor? Matthias |
Re: Objektereignisse bearbeiten
Ich glaube schon. eigendlich alles, was du schreibst, ist in ereignisbehandlungsroutinen (events) z.B. von dem Formulr.
In deinem Objekt kannst du nun ein´gene events definieren, indem du einen zeiger auf eine procedure erstellst, und dann eine property von diesem typ erstellst. dann ist das automatisch ein event. |
Re: Objektereignisse bearbeiten
moin,
Delphi-Quellcode:
Ich hoffe das hilft.
tMyClass = class
private FOnIrgendwas: tNotifyEvent; procedure IrgendeineMethode; public property OnIrgendwas: tNotifyEvent read FOnIrgendwas write OnIrgendwas; end; implementation procedure tMyClass.IrgendeineMethode; begin {...} If Assigned(FOnIregndwas) then FOnIrgendwas(self) {...} end; |
Re: Objektereignisse bearbeiten
...ich ahne jetzt zumindest, wie's geht, danke!
|
Re: Objektereignisse bearbeiten
Delphi-Quellcode:
Oder ?
procedure tMyClass.IrgendeineMethode;
begin {...} If Assigned(FOnIregndwas) then [b]OnIrgendwas(self)[/b] // eher FOnIregndwas(Self); {...} end; |
Re: Objektereignisse bearbeiten
korrekt, war ein Tipfehler, sorry :oops: ist geändert
|
Re: Objektereignisse bearbeiten
...na dann aber auch:
If Assigned(FOnIrgendwas) then ... oder? (wohl auch Tippfehler) Was ich nicht verstehe: ich habe Beispiele gefunden, wo beide Parameter gleich sind, also z.B. read OnIrgendwas write OnIrgendwas Was steckt dahinter? Eigentlich brauche ich doch nur read, wenn das Ereignis im Objekt stattfindet + Richtung Hauptprogramm geschickt wird, oder?? |
Re: Objektereignisse bearbeiten
Hi
ich hoffe mal ich schreib jetzt nix falsches: du brauchst auch ein write um der Property eine Methode zuzuweisen die aufgerufen werden soll... würde zB der Mensch der TButton(ich will jetzt nix höhren von TButton is abgeleitet von...) geschrieben hat beim OnClick nur Read und nich Write implementiert haben, so könntest du mit dem Button relativ wenig anfangen weil du ihm nich sagen kannst (write) was zu tun ist wenn der Button gedrückt wird... Greetz Boombuler |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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