Der folgende Code (wenn er in einem Paket registriert ist) gibt uns eine Komponente mit dem Namen TParentComponent
, die in der Palette Test
registriert ist.
Wenn Sie jedoch ein untergeordnetes Objekt mithilfe des Eigenschaften-Editors (im selben Code) erstellen, zeigt die IDE die Fehlermeldung Eine Methode für eine unbenannte Komponente kann nicht erstellt werden.
Was seltsam ist, ist, dass das Child-Objekt tatsächlich einen Namen hat.
Hier ist die Quelle:
%Vor%Die obige Quelle wurde von einer weiteren Antwort hier auf StackOverflow adaptiert .
Irgendwelche Ideen, warum ich keine Methode für OnTest
erstellen kann?
Vielen Dank im Voraus!
Form.CustomComponent.Children[0]
, sondern Form.Child1
stattdessen. TCollectionItem
eingebunden werden. Du gehst schon ganz gut voran, aber neben deiner Frage hat der Code ein paar Punkte zur Verbesserung:
Hier ist eine neu geschriebene, funktionierende Version Ihres Codes mit den folgenden Änderungen:
Master
, weil Parent zu sehr mit Delphis Parent
verwechselt wird (es gibt bereits zwei Arten). Daher heißt ein Kind Slave
. TComponentList
(Einheit Contnrs
) gehalten, um die Liste im Falle einer individuellen Slave-Zerstörung automatisch zu aktualisieren. Die ComponentList besitzt die Slaves. TStockItems
ObjectList gehalten. Die Liste besitzt die Lagerartikel und die Liste wird im Abschnitt "Finalisierung" freigegeben. GetNamePath
ist implementiert, damit ein Slave im Objektinspektor als Slave1
angezeigt wird und nicht als SlaveWrappers(0)
. GetFormMethodName
des Standard TMethodProperty
zu dem Fehler, den Sie bekommen. Die Ursache wird in Designer.GetObjectName
liegen, aber ich weiß nicht genau warum. Jetzt ist GetFormMethodName
überschrieben, was das Problem von Ihrer Frage löst. Änderungen, die in der Reihenfolge der Elemente in der Sammlung (mit den Pfeilschaltflächen des Auflistungs-Editors) vorgenommen wurden, sind noch nicht erhalten. Versuchen Sie selbst, das zu implementieren.
In der Baumansicht ist jeder Slave jetzt ein unmittelbar untergeordnetes Objekt des Masters, anstatt der Eigenschaft Slaves
untergeordnet zu sein, wie dies normalerweise bei Sammlungen der Fall ist:
Damit dies geschieht, denke ich, dass TSlaves
von TPersistent
abstammen sollte und die ComponentList darin eingeschlossen wäre. Das ist sicher ein weiteres schönes Tryout.
Ein ausreichender "Workaround" wurde auf "Erstellen von benutzerdefinierten Delphi-Komponenten, Teil 2, Seite" gefunden 4 von 5 " Artikel.
Die vollständige Beispielquelle befindet sich in ihrem Artikel und funktioniert (scheinbar) mit allen Versionen von Delphi.
Es sollte jedoch beachtet werden, dass diese Lösung nicht perfekt ist, da Sie nicht den Sammlungs-Editor von den Eltern- und Kind-Komponenten trennen können (was bedeutet, dass Sie die Quelle dafür erzeugen müssen) beide Komponenten, damit der Kollektionseditor funktioniert und in das Laufzeitpaket eingefügt wird.)
Für meine Bedürfnisse gerade jetzt, das wird es tun ... aber wenn jemand eine bessere Lösung finden kann, die direkt auf dem Beispielcode in meiner Frage basiert, wäre das großartig (und ich werde diese Antwort als korrekt markieren jemand stellt es).
Tags und Links delphi events properties editor