Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - wie vererbt/editiert man events richtig?
BeniSchindler - Mo 23.06.03 22:05
Titel: wie vererbt/editiert man events richtig?
Also ich habe ein TSQLQuery-Objekt. Dieses Objekt hat das Event "AfterScroll". Ich Leite nun mein eigenes Objekt von TSQLQuery ab und möchte das dieses Objekt immer bei AfterScroll eine bestimmte Sache ausführt. Wie mache ich das richtig ohne Das Event zu sperren.
Bis jetzt habe ich das ganze so realisiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TMeineKlasse = class(TSQLQuery) constructor create(owner:Tcomponente); override; procedure MeinOnScrollEvent(sender:TDataSet); end;
constructor TMeineKlasse; begin AfterScroll := MeinOnScrollEvent(nil); end;
procedure TMeineKlasse.MeinOnScrollEvent(sender:TDataSet); begin end; |
Diese Variante funktioniert jedoch nur solange bis jemand das AfterScroll Event benutzt um auch etwas zu machen. Dann wird meine Prozedure nicht mehr ausgeführt. Wie lautet der Code damit eine Instanz meiner Klasse auch noch das Event AfterScroll verwenden kann?
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt (Bitte Signatur ändern, s. Richtlinien!)
maximus - Di 24.06.03 11:43
:roll: hmm... muss das nicht so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TMeineKlasse = class(TSQLQuery) constructor create(owner:Tcomponente); override; procedure MeinOnScrollEvent(sender:TDataSet); end;
constructor TMeineKlasse.create(...); begin OnAfterScroll := MeinOnScrollEvent; end;
procedure TMeineKlasse.MeinOnScrollEvent(sender:TDataSet); begin end; |
PS: erstell doch noch ein event, das du dann in 'MeinOnScrollEvent' aufrufst. Oder leite das objekt von einer ...custom klasse ab, dann kannst du die sichtbarkeit noch beeinflussen, sodass man nach aussen nur das neue event sieht :wink:
BeniSchindler - Di 24.06.03 12:30
Danke, aber das was du unter dem Delphicode geschrieben hast, war genau das was ich nicht weiss wie es geht. Ich habe jetzt jedoch eine andere Variante gefunden die funktioniert. Aber nochmal danke fürs drüber nachdenken.
Ich habe das ganze jetzt so gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TMeineKlasse = class(TSQLQuery) procedure DataEvent(Event : TDataEvent; info : longint); override; end;
procedure TMeineKlasse.DataEvent(Event : TDataEvent; info : longint); override; begin inherited; if Event = deDataSetScroll then begin end; end; |
maximus - Di 24.06.03 13:10
Noch besser :D Hätte ich dir auch vorgeschlagen, wusste aber nicht ob es da eine virtuelle-proc zum überschreiben gibt.
Tino - Di 24.06.03 14:02
Hallo,
ein Event kann man nicht überschreiben da es ja nur eine Eigenschaft eines Objekts ist. Eine Methode dagegen kann man (wenn diese entsprechend definiert ist) überschreiben.
In den meisten Fällen existiert aber neben dem Event auch eine entsprechende Methode die man ableiten kann um ebenfalls auf das Ereignis zu reagieren.
Gruß
Tino
maximus - Di 24.06.03 14:32
schön gesagt :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!