|
FMX 动态创建 和 销毁(释放free) 对象 By FlyingWang V2017-05-12
简单的说 就是用 FindChild 找到 已经建立的对象。然后用 FreeAndNilFmxObject 安全的销毁他。
否则 就算 你 自以为销毁了这个对象,其实还显示在你的窗体上呢。
如果 你新建的对象 和 旧的同名,还会 提示你已存在呢。
当然 如果你已经有对象的 变量,就不需要 FindChild 。
代码如下:
测试代码。
建一个 Frame 里头放一个 按钮。来测试。
当然 用 其他的 UI 对象也是可以的,例如直接用 Button 效果也是一样的。
[mw_shl_code=delphi,true]
var
AIndex : Integer = 0;
procedure TForm1.Button1Click(Sender: TObject);
var
A: TFrame2;
B: TFmxObject;
begin
ReportMemoryLeaksOnShutdown := True;
B := FindChild('A', Self);
if (B <> nil) and (B is TFrame2) then
begin
A := B as TFrame2;
B := nil;
FreeAndNilFmxObject(TFmxObject(A));
end;
inc(AIndex);
A := TFrame2.Create(nil); // Create(Self); 用 Self 和 nil 是有区别的。
A.Name := 'A';
A.Size.Width := A.Button1.Size.Width;
A.Size.Height := A.Button1.Size.Height;
A.Button1.Position.X := 0;
A.Button1.Position.Y := 0;
A.Position.Y := AIndex * A.Height;
A.Button1.Text := '按钮' + AIndex.ToString;
A.Parent := Self;
end;
//procedure TForm1.FormDestroy(Sender: TObject);
//var
// B: TFmxObject;
//begin
// B := FindChild('A', Self);
// //这样写更简单些。
// FreeAndNilFmxObject(B);
//end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//这样写更简单些。
FreeFmxObject(FindChild('A', Self));
end;
[/mw_shl_code]
|
|