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

(* ************************************************ *)
(*                         *)
(*                         *)
(*  编写:爱吃猪头肉 & Flying Wang 2015-12-03   *)
(*      上面的版权声明请不要移除。      *)
(*                         *)
(* ************************************************ *) //本人所在的群(① FireMonkey[移动开发] 165232328) {-------------------------------------------------------------------------------} procedure FDFree(AObj: TObject);
begin
if AObj <> nil then
{$IFDEF AUTOREFCOUNT}
AObj.DisposeOf;
{$ELSE}
AObj.Destroy;
{$ENDIF}
end; {-------------------------------------------------------------------------------} procedure FDFreeAndNil(var AObj);
var
p: Pointer;
begin
if Pointer(AObj) <> nil then begin
p := Pointer(AObj);
Pointer(AObj) := nil;
{$IFDEF AUTOREFCOUNT}
if TObject(p).__ObjRelease > then
TObject(p).DisposeOf;
{$ELSE}
TObject(p).Destroy;
{$ENDIF}
end;
end; //FD 开头的是 官方的 FireDac 专用函数。 function FindChild(Name: string; Parent: TFmxObject): TFmxObject;
var
I: Integer;
Child: TFmxObject;
begin
Result := nil;
if (Parent <> nil) and (Parent.Children <> nil) then
begin
for I := Parent.Children.Count - downto 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);
FDFreeAndNil(Obj);
end;
end;
var
AIndex : Integer = ;
procedure TForm1.Button1Click(Sender: TObject);
var
A: TButton;
B: TFmxObject;
begin
B := FindChild('A', Self);
if (B <> nil) and (B is TButton) then
begin
A := B as TButton;
B := nil;
FreeAndNilFmxObject(TFmxObject(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
B := FindChild('A', Self);
//这样写更简单些。
FreeAndNilFmxObject(B);
end;

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

  1. FMX 动态创建 和 销毁(释放free) 对象

    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 3 ...

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

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

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

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

  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. idea软件快速设置主题颜色

    打开idea,然后在File->setting->在搜索框里面输入theme->然后点击appearance->将theme的主题设置为IntellilJ,然后就可以了,如下图 ...

  2. Docker Kubernetes Volume 本地数据卷

    Docker Kubernetes Volume 本地数据卷 emptyDir 当Pod分配到Node时,首先创建一个空卷,并挂载到Pod中的容器. Pod中的容器可以读取和写入卷中的文件. 当Pod ...

  3. Python 缓存服务

    缓存服务:mongodb.redis.memcache mongodb:早期的缓存系统,直接持久话,数据即存内存也同步到硬盘. redis:主流缓存系统,半持久化,默认存在内存,需要手动调用存在硬盘, ...

  4. java基础hashmap

    Iterator中hasNext(), next() 在Iterator类中,我们经常用到两个方法: hasNext(), next(),具体含义: next(),  是返回当前元素, 并指向下一个元 ...

  5. UnicodeMath编码教程

    目录 1. 简介 2. 编码简单数学表达式 2.1 分数 2.2 上标和下标 2.3 空白(空格)字符使用 3. 编码其他数学公式 3.1 open/close分隔符 关于大括号方程组(cases) ...

  6. Learning-Python【32】:进程理论基础

    什么是进程 进程就是一个程序在一个数据集上的一次动态执行过程.是用来描述程序执行过程的虚拟概念.进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的.进程一般由 ...

  7. Linux配置中文输入法(搜狗输入法)

    一.基础知识 在原生ubuntu14.04英文环境系统中只有IBus拼音,真的好难用.由于搜狗输入法确实比Linux系统下其它的中文输入法都要好用得多,所以我决定在我的Ubuntu 14.04系统中安 ...

  8. MapReduce编程:单词去重

    编程实现单词去重要用到NullWritable类型. NullWritable: NullWritable 是一种特殊的Writable 类型,由于它的序列化是零长度的,所以没有字节被写入流或从流中读 ...

  9. galera+mycat高可用集群部署

    环境描述 10.30.162.29  client 环境描述 10.30.162.29 client 10.30.162.72 mysql1 10.30.162.73 mysql2 10.30.162 ...

  10. NYOJ_1274_信道安全 -

    别琢磨中间过程,我也整不清楚,死记住模板吧 #include <stdio.h> #include <string.h> #include <queue> usin ...