Hallo,
wenn man deine TTestPanel in einen Stream schreibt und diesen in Text umwandelt bekommt man dies:
Code:
object TTestPanel
Left = 0
Top = 0
Width = 123
Height = 51
AutoSize = True
TabOrder = 0
checkA.Left = 1
checkA.Top = 1
checkA.Width = 97
checkA.Height = 17
checkA.Caption = 'A'
checkA.TabOrder = 0
ted.Left = 1
ted.Top = 26
ted.Width = 121
ted.Height = 24
ted.TabOrder = 1
object TCheckBox
Left = 1
Top = 1
Width = 97
Height = 17
Caption = 'A'
TabOrder = 0
end
object TEdit
Left = 1
Top = 26
Width = 121
Height = 24
TabOrder = 1
end
end
Wie man sieht sind CheckBox und Edit zweimal enthalten. Einmal als SubComponent, wie gewünscht, und einmal als Children, wo das Problem liegt. Ich habe ein Testprogramm angehangen, welches dies zeigt.
Das Problem mit den Childrens liegt in der Kombination Owner der SubComponents, Root beim Speichern in den Stream und dem
TWinControl.GetChildren
. Der Root beim Speichern ist dein TestPanel, genauso wie der Owner der SubComponents. Und
TWinControl.GetChildren
gibt alle Kinder wieder, wo der Owner derselbe wie der Root ist.
Um das zu lösen entweder den Owner von den SubComponents auf NIL setzen oder die Methode
GetChildren
überschreiben. Die meiner Meinung nach beste Variante des Überschreibens habe ich im angehängten Testprogramm umgesetzt. Das
{$DEFINE WithFilter}
in Zeile 24 ein kommentieren.
einbeliebigername.