[fpc-pascal] WriteComponent not outputting a hierarchy of components?
Mattias Gaertner
nc-gaertnma at netcologne.de
Thu Jun 3 20:53:21 CEST 2010
On Thu, 3 Jun 2010 20:38:26 +0200 (CEST)
Michael Van Canneyt <michael at freepascal.org> wrote:
>
>
> On Thu, 3 Jun 2010, Graeme Geldenhuys wrote:
>
> > On 3 June 2010 17:24, Michael Van Canneyt <michael at freepascal.org> wrote:
> >>
> >> You must override GetChildren.
> >>
> >> In the LCL, TWinControl overrides GetChildren to write child controls.
> >>
> >> It is documented.
> >
> > But why is GetChildren needed? Why can't TWriter use ComponentCount
> > and Components[] like I have done in the TraverseComponents()
> > recursive procedure?
>
> Because Borland decided otherwise.
>
> Actually, there is a good reason: some components create internal
> components they own, and which they don't want to have streamed.
> The 'GetChildren' allows you to control what gets streamed and
> what not.
For example a TOpenDialog is not in Controls, so it must be put into
GetChildren.
> > " Adds component to children list which have no parent.
> > (TWinControl only lists components with parents) "
>
>
> >
> > Is that still true? In fpGUI I set Owner and Parent. What is
> > different in fpGUI (compared to LCL or VCL) is that Owner = Parent,
> > always. I don't see a need for them to be different - one widget can
> > just as easily manage the lifespan of another widget. Re-parenting a
> > widgets also works in fpGUI, by simply transferring the ownership to
> > the new parent widget (inserting into Components[] array).
>
> In LCL the owner is always the form. Otherwise the form variables
> would not work.
Yes, and no.
Think about Frames, Ancestors and special created components (e.g.
TSynEdit creates some components owned by itself).
Graeme,
you might want to take a look at
lazarus/designnonlcl/mywidgetset.pas
Mattias
More information about the fpc-pascal
mailing list