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...

Michael.

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

Reply via email to