1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
function FindChild(Name: string; Parent: TFmxObject): TFmxObject;
var
  I: Integer;
  Child: TFmxObject;
begin
  Result := nil;
  if (Parent <> niland (Parent.Children <> nilthen
  begin
    for I := Parent.Children.Count - 1 downto 0 do
    begin
      Child := TFmxObject(Parent.Children[I]);
      if Child.Name = Name then
      begin
        Result := Child;
        break;
      end;
    end;
  end;
end;
procedure FreeAndNilFmxObject(var Obj: TFmxObject);
begin
  if Obj <> nil then
  begin
    Obj.Parent := nil;
    Obj.SetRoot(nil);
    FreeAndNil(Obj);
  end;
end;
var
  AIndex : Integer 0;
procedure TForm1.Button1Click(Sender: TObject);
var
  A: TButton;
  B: TFmxObject;
begin
  ReportMemoryLeaksOnShutdown := True;
  B := FindChild('A', Self);
  if (B <> niland (B is TButton) then
  begin
    A := B as TButton;
    B := nil;
//    //后面 FormDestroy 的代码不一样,但效果一样。
    FreeAndNilFmxObject(TFmxObject(A));
  end;
//  if (B <> nil) and (B is TButton) then
//  begin
//    A := B as TButton;
//    B.Parent := nil;
//    B.SetRoot(nil);
//    B := nil;
//    FreeAndNil(A);
//  end;
  inc(AIndex);
  A := TButton.Create(nil);
  A.Name := 'A';
  A.Position.Y := AIndex * A.Height;
  A.Text := '按钮' + AIndex.ToString;
  A.Parent := Self;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
  B: TFmxObject;
begin
  ReportMemoryLeaksOnShutdown := True;
  B := FindChild('A', Self);
  //这样写更简单些。
  FreeAndNilFmxObject(B);
end;

http://www.delphi6.com/thread-68.htm

FMX 动态创建 和 销毁(释放free) 对象的更多相关文章

  1. 【转】FMX 动态创建及销毁(释放free)对象

    http://www.2pascal.com/thread-3037-1-1.html这是原文地址. (* ********************************************** ...

  2. C#动态创建接口的实现实例对象

    本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函数是否有参数? 准备工作 首先新建一 ...

  3. C#动态创建单例类的对象

    单例类 public class SnappingClass : ISnappingEnvironment, IExtension { // private static readonly Snapp ...

  4. unity3d通过代码动态创建销毁游戏对象

    只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...

  5. Qt Quick 组件和动态创建的对象具体的解释

    在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...

  6. Unity进阶技巧 - 动态创建UGUI

    前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...

  7. 动态创建html元素的几种方法

    可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到数组中,再遍历数组动态创建html元素 3.使用模版   □ 使用jQuery动态创建元素追加到jQ ...

  8. jQuery动态创建html元素的常用方法汇总

    在使用jQuery进行WEB程序设计的时候非常有用.分享给大家供大家参考.具体方法如下: 一般来说,可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到 ...

  9. 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

    [源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...

随机推荐

  1. WPF 使用鼠标拖动一个控件的实现[2018.7.15]

    原文:WPF 使用鼠标拖动一个控件的实现[2018.7.15] Q:已经把一个Shape和一个TextBlock组合起来放到了一个Grid中,现在想要实现用鼠标拖动这个Grid到任意位置的功能,如何做 ...

  2. java基础——try catch final

    1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此时并没有 ...

  3. 64 位系统 vs2013 配置 OpenCV-3.1.0

    参考:64 位系统 vs2013 配置 opencv3.0 1. 环境准备 进入官网 http://opencv.org/,下载最新版本的 opencv(以本文 opencv-3.1.0 为例,.ex ...

  4. CSS 中的高度百分比

    CSS 中可以使用%来给定指定元素的大小,也就是高度.宽度.margin,padding 等等,但是相信很多人都对百分比表示法的具体含义并不清楚,那么不懂就练,毕竟是检验真理的唯一标准(考研党举个手我 ...

  5. flex新的心得

    主要是对于flex: 与width: 的心得,先看代码. <head> <meta charset="UTF-8"> <meta name=" ...

  6. Swift过程控制和功能

    流量控制(Control Flow) For周期 for骑自行车和C语言,OC用法很相似,平时for()和 for in两种. 遍历可以使用下划线"_"略对值的訪问等. Switc ...

  7. node fs 文件/目录 删除

    删除文件如下: 过程:先判断文件路径是否存在.读取该文件下所有文件.循环该文件,判断是否是文件夹还是文件. 移除文件夹使用fs.rmdirSync("路径") 移除文件使用fs.u ...

  8. 对偶空间(dual linear space)

    1. 定义 设 V 为定义在数域 F 上的向量空间,定义 V 上的线性函数是从 V 到 F 的映射:f:V→F,且满足 ∀x,y∈V,k∈F 有:f(x+y)=f(x)+f(y),f(ka)=kf(a ...

  9. DDD实战3 领域层的设计

    1.新建一个解决方案文件夹 取名Product 2.在Product解决方案文件夹下面创建一个.net core 类库项目 取名Product.Domain,引用项目DDD.Base项目 3.在类库下 ...

  10. Openstack部署总结:“部署过程Error: Local ip for ovs agent must be set when tunneling is enabled”问题

    问题叙述性说明 正在使用RDO当多节点部署测试,因为使用了一些老机器和机器类型的差异(一些HP的PC,有些DELL的PC).以下错误出现: Applying 192.168.40.107_neutro ...