On Saturday 23 June 2007 14:01, Michael Van Canneyt wrote:
> On Sat, 23 Jun 2007, zeljko wrote:
> > On Saturday 23 June 2007 10:34, Marc Weustink wrote:
> > > zeljko wrote:
> > > > On Friday 22 June 2007 23:22, Marc Weustink wrote:
> > > >> zeljko wrote:
> > > >>> On Friday 22 June 2007 14:51, Marc Weustink wrote:
> > > >>>> zeljko wrote:
> > > >>>>> Compiled simple project with -gh , and it seem that TForm doesn't
> > > >>>>> call Free() for it's children (created at design time) eg.
> > > >>>>>
> > > >>>>> MainForm -> Form1 ->
> > > >>>>>                       -> TRadioGroup with 4 radio buttons
> > > >>>>>                       -> TButton -> calls Close() of Form1.
> > > >>>>>
> > > >>>>> Tested under linux with:
> > > >>>>> gtk, gtk2, qt - fpc- 2.0.4
> > > >>>>>
> > > >>>>> If I explicitely call Free() for each of children in
> > > >>>>> Form1.OnClose() then it calls children's destructors, but still
> > > >>>>> remains unfreed blocks for form itself ?!?
> > > >>>>>
> > > >>>>> compiler ? lcl ?  any ?
> > > >>>>
> > > >>>> You don't get an exception or so ?
> > > >>>>
> > > >>>> I wonder if it is allowed to call close in an eventhandler of the
> > > >>>> same form. If the form gets freed, one should use Release.
> > > >>>
> > > >>> I didn't call Free() for form itself, just for it's children,
> > > >>> because I've founded that eg. DestroyHandle() is not called (for
> > > >>> children controls).
> > > >>
> > > >> But, doesn't the close indirectly call free ?
> > > >
> > > > heaptrace says not. Here are tests:
> > > >
> > > > Form = TForm2 + one TEdit + one TButton.
> > > > 1. Create form (with n children) while application starts
> > > > (autocreate). RESULT = OK (all clear)
> > > >
> > > > 2. Create form (with n children) like with TForm2.Create(Self) do ...
> > > > RESULT = OK (all clear)
> > > >
> > > > 3. Create form (with n children) like with TForm2.Create(NIL) do ...
> > > > RESULT = NOT OK, heaptrc screams about unfreed memory blocks
> > > > Adding CloseAction = caFree in OnClose event of form do the job here
> > > > ...
> > > >
> > > > So is it "a must" to add CloseAction := caFree while closing form
> > > > created with NiL parameter ?
> > >
> > > Yes, since it has no owner, you are responsible to free it.
> >
> > hmm .. but why it doesn't free it's children ?
>
> Because it is not freed itself ? The children are only freed when you free
> the form...

mea culpa ;) you're right  

_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to