一、巧用TAG属性保存对象的指针
指针的数据类型是整型,一个指针就是一个整型的数值。所以凡整型的变量(这个整型的变量可以是声明在INI文件中,也可以是声明在函数中的)也好,对象的整型的属性也好,都可以用来存储一个指针。但对象往往没有多余的整型属性,而TAG属性就是整型的,正好可以用它来存放指针。
goods := TGoods.Create(Button1); goods.goodsId := goodsId; goods.goodsName := goodsName; goods.price := price; Button1.Tag := THandle(goods);使用:
TGoods(TButton(Sender).Tag).buyNum
不过在需要注意的就是,当我们在释放Button1的时候,一定要记得先释放其Tag中存放的对象资源,以免内存泄漏。如:
if Assigned(goods) then goods.Free;
或者:
if Button1.Tag<>0 then TGoods(Button1.Tag).Free;
二、全局对象的创建
全局对象在什么时候创建也是有讲究的,如果在调用之前尚未创建肯定会报错,那么下面通过调用函数间接调用全局对象的方法就不会有任何问题了。
var FUserInfo: TUserInfo = nil; function UserInfo: TUserInfo; begin if not Assigned(FUserInfo) then FUserInfo := TUserInfo.Create; Result := FUserInfo; end;