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.
Marc
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives