【转】FMX 动态创建及销毁(释放free)对象
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)对象的更多相关文章
- 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 ...
- C#动态创建单例类的对象
单例类 public class SnappingClass : ISnappingEnvironment, IExtension { // private static readonly Snapp ...
- C#动态创建接口的实现实例对象
本文简单介绍如何动态创建接口interface的实现实例对象,包含两个知识点: 1.如何获取接口interface的所有实现实例对象? 2.如何判断实例对象的构造函数是否有参数? 准备工作 首先新建一 ...
- unity3d通过代码动态创建销毁游戏对象
只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...
- Qt Quick 组件和动态创建的对象具体的解释
在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- 动态创建html元素的几种方法
可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到数组中,再遍历数组动态创建html元素 3.使用模版 □ 使用jQuery动态创建元素追加到jQ ...
- jQuery动态创建html元素的常用方法汇总
在使用jQuery进行WEB程序设计的时候非常有用.分享给大家供大家参考.具体方法如下: 一般来说,可以通过以下几种方式动态创建html元素: 1.使用jQuery创建元素的语法 2.把动态内容存放到 ...
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
随机推荐
- idea软件快速设置主题颜色
打开idea,然后在File->setting->在搜索框里面输入theme->然后点击appearance->将theme的主题设置为IntellilJ,然后就可以了,如下图 ...
- Docker Kubernetes Volume 本地数据卷
Docker Kubernetes Volume 本地数据卷 emptyDir 当Pod分配到Node时,首先创建一个空卷,并挂载到Pod中的容器. Pod中的容器可以读取和写入卷中的文件. 当Pod ...
- Python 缓存服务
缓存服务:mongodb.redis.memcache mongodb:早期的缓存系统,直接持久话,数据即存内存也同步到硬盘. redis:主流缓存系统,半持久化,默认存在内存,需要手动调用存在硬盘, ...
- java基础hashmap
Iterator中hasNext(), next() 在Iterator类中,我们经常用到两个方法: hasNext(), next(),具体含义: next(), 是返回当前元素, 并指向下一个元 ...
- UnicodeMath编码教程
目录 1. 简介 2. 编码简单数学表达式 2.1 分数 2.2 上标和下标 2.3 空白(空格)字符使用 3. 编码其他数学公式 3.1 open/close分隔符 关于大括号方程组(cases) ...
- Learning-Python【32】:进程理论基础
什么是进程 进程就是一个程序在一个数据集上的一次动态执行过程.是用来描述程序执行过程的虚拟概念.进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的.进程一般由 ...
- Linux配置中文输入法(搜狗输入法)
一.基础知识 在原生ubuntu14.04英文环境系统中只有IBus拼音,真的好难用.由于搜狗输入法确实比Linux系统下其它的中文输入法都要好用得多,所以我决定在我的Ubuntu 14.04系统中安 ...
- MapReduce编程:单词去重
编程实现单词去重要用到NullWritable类型. NullWritable: NullWritable 是一种特殊的Writable 类型,由于它的序列化是零长度的,所以没有字节被写入流或从流中读 ...
- 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 ...
- NYOJ_1274_信道安全 -
别琢磨中间过程,我也整不清楚,死记住模板吧 #include <stdio.h> #include <string.h> #include <queue> usin ...