2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 1104|回复: 4
打印 上一主题 下一主题

FMX 动态创建销毁(释放freel)对象 FreeAndNilFmxObject 送 FindChild

[复制链接]

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
81869
跳转到指定楼层
楼主
发表于 2019-3-27 08:05:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
京东数码购物支持本站
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]
(C)(P)Flying Wang
回复

使用道具 举报

1

主题

43

帖子

1193

积分

金牌会员

Rank: 6Rank: 6

积分
1193
推荐
发表于 2019-3-29 01:04:04 | 只看该作者
京东数码购物支持本站
收藏学习了
回复 支持 1 反对 0

使用道具 举报

0

主题

16

帖子

90

积分

注册会员

Rank: 2

积分
90
地板
发表于 2019-3-30 07:17:16 | 只看该作者
京东数码购物支持本站
666                   ---
回复 支持 反对

使用道具 举报

0

主题

21

帖子

37

积分

新手上路

Rank: 1

积分
37
5#
发表于 2020-3-3 08:18:29 | 只看该作者
京东数码购物支持本站
偷偷的学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-4-28 05:20 , Processed in 0.066657 second(s), 24 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表