[Lazarus] In TWinControl.Destroy parent is NIL'ed twice for controls
cobines
cobines at gmail.com
Mon May 23 22:07:58 CEST 2011
Hello.
In TWinControl.Destroy there is code:
while n > 0 do
begin
Control := Controls[n - 1];
Remove(Control); <--
...
Control.Parent := nil; <--
n := ControlCount;
end;
In Remove() which is non-virtual:
procedure TWinControl.Remove(AControl : TControl);
begin
if AControl <> nil then
begin
...
AControl.FParent := nil;
...
end;
end;
So, first there is AControl.FParent := nil, then there is
Control.Parent := nil. There is one too many.
Also, the first assignment is directly to variable bypassing virtual
SetParent. The other uses property which calls SetParent but it
doesn't do anything because Parent is already =nil.
Is it correct that Control.Parent can be removed? And which should be
the correct version of assignment: using FParent or Parent?
--
cobines
More information about the Lazarus
mailing list