So ich glaube jetzt habe ich die Lösung.
Ich habe einfach alles etwas weniger dynamisch gestaltet und es scheint zu funktionieren.
Im Detail habe ich folgendes geändert:
- TPropertyEditLink habe ich nicht mehr von TInterfacedObject sonder von TObject abgeleitet. Entsprechend muss ich die Referenzzählung für das Interface selbst implementieren. Das habe ich so gemacht das die Zähl-Funktionen immer 1 zurückgeben. Dies hat zur Folge das das Objekt nicht mehr automatisch freigegeben wird.
Nun erstelle ich eine Instanz dieser Klasse und speichere diese in einer Objektvariable des Formulars. Das Objekt wird erst beim Zerstören des Formulars freigegeben.
- Die Implement der Methode VSTCreateEditor habe ich so geändert das nun immer die Instanz aus der Objektvariable übergeben an statt eine neue Instanz er erzeugen.
- Der Klasse TPropertyEditLink habe ich zwei zusätzliche Objektvariablen spendiert. Eine für das Edit, die zweite für die ComboBox. Diese werden beim instanzieren von TPropertyEditLink angelegt und auch erst beim freigeben der TPropertyEditLink-Instanz zerstört.
- In der Funktion PrepareEdit erzeuge ich nun keine Edit bzw. keine ComboBox sonder weise die gewünschte Komponente aus der Objektvariablen FEdit zu.
Wenn nun eine Steuerelement wirklich mal eine verspätet Nachricht erhält wurde dieses noch nicht freigegeben und es gibt keine nervigen Exceptions mehr.