Ich glaube hier findet ständig eine Verwechselung statt zwischen den Komponenten-Namen und den Variablen-Namen. Der Komponenten-Name dient ausschließlich der Zuordnung von gestreamten Resourcen zu den korrekten Variablen beim Laden der Formulare.
Im
dfm wird dann vom Reader erkannt, dass:
object Label1: TLabel
hiermit verknüpft werden soll:
Delphi-Quellcode:
TForm1 = class(TForm)
Label1: TLabel;
Das hat eigentlich gar nichts mit dem Streaming zu tun. Wenn du eine Klasse von TComponent ableitest und darin ein Feld mit einem ebenfalls von TComponent abgeleiteten Typ mit der passenden Sichtbarkeit (published) deklarierst, dann wird dieses Feld bei einem Aufruf von InsertComponent mit einer Instanz als Parameter, deren Name dem Feldnamen entspricht, genau auf diese Instanz gesetzt. Deshalb dürfen die Komponentennamen der Child-Komponenten auch nur eindeutig innerhalb der Parent-Komponente oder leer sein (weil ein Leerstring ja kein Variablenname ein kann).
Insofern würde das obige Beispiel:
Delphi-Quellcode:
newButton := TButton.Create(self);
newButton.Name := 'Testbutton';
newButton.Parent := self;
...
testButton.Click();
durchaus funktionieren, wenn testButton entsprechend als Feld im Form deklariert ist.