AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"inherited" für umgeleitetes Event

Ein Thema von Guido Eisenbeis · begonnen am 14. Mär 2007 · letzter Beitrag vom 20. Mär 2007
 
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: "inherited" für umgeleitetes Event

  Alt 17. Mär 2007, 16:57
Zitat von Guido Eisenbeis:
Davon habe ich auch alles verstanden bis auf eins:

In Unit1 wird ein Feld "FButon1EventHandler" angelegt. Bis hierhin ist das klar. Dann wird aber noch ein Property "Buton1EventHandler" angelegt, das lediglich in das Feld hineinschreibt oder daraus ausliest. Wozu dient der indirekte Weg über dieses Property?
Öhm ka, hab ich einfach so gemacht, kann man auch ohne Property machen... Ist also nichts wildes, hatte glaub ich vorher noch eine SetButon1EventHandler um Irgendwas zu testen...



Zitat von Guido Eisenbeis:
Die brennende Frage ist nun: Warum funktioniert das? Oder funktioniert es nicht wirklich?
Jain, funktionieren schon aber nicht sauber!, zum einen:

Du erzeugst jedesmal solch eienn Eventhandler:
Delphi-Quellcode:
procedure InitClickEventRetouring(Ctrl: TObject);
begin
  MyEventReceiver := TMyEventReceiver.Create; // <- "Knackpunkt" !
  { ... }
end;
Aber du gibst schlussendlich nur einen frei!
Delphi-Quellcode:
finalization
  MyEventReceiver.Free;
Da musst du dir was anderes einfallen lassen, z.b. eine Liste mit Eventhandlern oder ähnliches....


So der nächste wichtige Punkt, du überprüfst nicht ob es vorher überhaupt ein Event gab!
Delphi-Quellcode:
procedure TMyEventReceiver.ClickIntern(Sender: TObject);
begin
  { ... }
  OnClickOrig(Sender);
end;
Das solltest du ändern in:
Delphi-Quellcode:
procedure TMyEventReceiver.ClickIntern(Sender: TObject);
begin
  { ... }
  If Assigned( OnClickOrig ) Then OnClickOrig(Sender);
end;
Sprich du schaust erstmal ob der Methodenzeichner belegt wurde, bevor du ihn ausführst...


Als leztes nur eine kleine Anmerkung:
Delphi-Quellcode:
procedure InitClickEventRetouring(Ctrl: TObject);
begin
  {...}
  TButton(Ctrl).OnClick := MyEventReceiver.ClickIntern;
end;
Hier solltest du eventuell nachschaun, ob Ctrl überhaupt ein Wert hat! Aber viel wichtiger, udem kann da ein Wert übergeben werden, der gar keine OnClick Ereigniss hat, bzw. schon gar nicht ein TButton ist!

Da gehört also sowas hin wie:
Delphi-Quellcode:
procedure InitClickEventRetouring(Ctrl: TObject);
begin
  {...}
  If Assigned( Ctrl ) And ( Ctrl Is TButton ) Then TButton(Ctrl).OnClick := MyEventReceiver.ClickIntern;
end;
das wärs erstmal von meinen Anmerkungen....

Bye Christian
Christian
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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