Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
9. Aug 2012
Wenn ich einen Event Registriere, dann übergebe ich den Handler an eine Register-Methode:
OnChangeRegister(ChangeHandler);.
Möchte ich den Event dann nicht mehr empfangen, dann rufe ich folgendes auf:
OnChangeUnRegister(ChangeHandler);.
Dabei sind verschiedene Fälle zu unterscheiden:
ChangeHandler ist eine Prozedur/Funktion/Methode:
Hier wird beim Aufruf von OnChangeUnRegister eine...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
9. Aug 2012
Ich habe nun einen weiteren Test gemacht, der bestätigt, dass die Referenzzählung mit dieser Methode (cast auf reference to procedure) nicht durcheinandergebracht wird, zumindest wird die Referenz nicht frühzeitig freigegeben.
Allerdings habe ich für meinen Anwendungsfall (Multicast-Events) ein anderes Problem, an dem die Sache scheitert: Referenzen lassen sich nicht vergleichen wie...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
8. Aug 2012
Das ist durch die Konkretisierung gegeben. Ich möchte aber Codevervielfältigung durch die Abstraktion verhindern, und da stören die Typinfos eher. Sie gehen aber nicht verloren.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
8. Aug 2012
Ich habe eine Abstraktion, die das Array verwaltet, dort sind die Parameter egal, dort brauche ich diese allgemeine Variable. Dann habe ich eine Konkretisierung, die dem Nutzer sichtbar ist und somit den Typ des zu registrierenden Handlers prüft (also die Parameter) und den Aufruf der Handler übernimmt - die zweite und letzte Stelle, an der die Parameter bekannt sein müssen.
Das gleicht ja...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
8. Aug 2012
Hallo,
ich verwende für Multicast-Events momentan ein array of TMethod. Damit kann ich die ganze Verwaltung (Register, Unregister, Verhinderung von Doppelregistrierungen etc.) mit den selben Codeteilen durchführen. Lediglich der Aufruf muss natürlich für jeden Event speziell geschrieben werden, da ja immer andere Parameter auftauchen.
Problem: Bei diesem Vorgehen kann ich nur Methoden als...