Das Problem ist, dass bei diesem Getter der Fixup-Mechanismus den Default-Wert zurückbekommt und das im
DFM vorhandene Property aus dem Datenmoodul nicht mehr zuweist, obwohl der Wert sauber in der
DFM-Datei vorhanden ist.
Schuld ist hier diese Codezeile in
GlobalFixupReferences:
Delphi-Quellcode:
if (Root <> nil) or (GetOrdProp(aPropFixup.FInstance, aPropFixup.FPropInfo) <> 0) then
Diese wird am Ende von
ReadRootComponent, also beim Laden des Forms, aufgerufen. Existiert das Datenmodul dann noch nicht, ist zwar
Root = nil, aber
GetOrdProp liefert
FDefaultChild zurück und das Fixup wird entfernt.
Wenn du damit leben kannst, dass zur Designtime in der
IDE das Property mit
nil anstatt
FDefaultChild im Objektinspektor steht, dann kannst du das mit folgendem Code erreichen:
Delphi-Quellcode:
function TParentComponent.GetChild: TChildComponent;
begin
if Assigned(FChild) or (csDesigning in ComponentState) then
Result := FChild
else
Result := FDefaultChild;
end;