为什么对象--------无法正常销毁? 本帖最后由 cowbo 于 2013-09-21 10:30:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我猜应该是这句的问题。一般来说 Assign 会是个虚方法,由具体派生类 override这个函数一般的实现方式不是简单的赋值,也就是说内部另创建一个新对象。此处你只是释放了 bit,而内部新创建的对象你并没有释放。 Assign 就是相当于c#\java中的“深拷贝”,也类似c++中的“拷贝构造函数”的工作原理。所有从TPersistent继承的子类才拥有此方法,用于拷贝一个对象,而非拷贝对象的引用。你这里只要image2释放后,它的picture也就会释放了。不过这个应该跟你的问题无关,你的问题应该还是出在你绘图的过程中的“........(太长,略)” 不知干了啥 下面代码测试就没啥问题var bit:TBitmap; r:TRect;begin DoubleBuffered:=True; try //建立图像 bit:=TBitmap.Create; bit.Width:=Image2.Width; bit.Height:=Image2.Height; //绘图 Randomize; with bit.Canvas do begin // 用随机颜色在随机位置填充一个矩形 Brush.Color:= RGB(Random(255),Random(255),Random(255)); r:= Rect(Random(bit.Width),Random(bit.Height),bit.Width, bit.Height); FillRect(r); end; Image2.Picture.Assign(bit); finally FreeAndNil(bit); end;end; delphi语句转C# 语句 请教CALL注入工具原理。如果把文本框输入的汇编让DELPHI调用 很小的一个问题。 ICS组件包中的HttpCli1如何断点下载 一条SQL语句问题 delphi6没有WebServices页面?? 请高手指点,如何读注册表里的二进制数据并展示出来。 我用ADO+access执行update或insert的时候,总是报错请问何故? 我想做一个画图程序,但不知如何为画布的背景画网格,在保存和打印时不显示网格? 进者有分! 我作了一个网络形的共享软件.怎么加广告条!请过来人指点 master..xp cmdshell 执行EXE 调用杀毒软件和获取返回值
这个函数一般的实现方式不是简单的赋值,也就是说内部另创建一个新对象。
此处你只是释放了 bit,而内部新创建的对象你并没有释放。
所有从TPersistent继承的子类才拥有此方法,用于拷贝一个对象,而非拷贝对象的引用。
你这里只要image2释放后,它的picture也就会释放了。不过这个应该跟你的问题无关,你的问题应该还是出在你绘图的过程中的
“........(太长,略)” 不知干了啥 下面代码测试就没啥问题var
bit:TBitmap;
r:TRect;
begin
DoubleBuffered:=True;
try
//建立图像
bit:=TBitmap.Create;
bit.Width:=Image2.Width;
bit.Height:=Image2.Height;
//绘图
Randomize;
with bit.Canvas do
begin
// 用随机颜色在随机位置填充一个矩形
Brush.Color:= RGB(Random(255),Random(255),Random(255));
r:= Rect(Random(bit.Width),Random(bit.Height),bit.Width, bit.Height);
FillRect(r);
end;
Image2.Picture.Assign(bit);
finally
FreeAndNil(bit);
end;
end;