大家帮我看一看,帮助我啊,我快没自信了 内容太长,不让发,见http://www.delphibbs.com/delphibbs/dispq.asp?lid=1792827 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1)应该有个OwnsObjects属性。不过这应该是个浅层释放,Delphi只会释放加入到List的Component,而Component中如果你在Tag中放了对象,那么它不会做的。(研究一下源代码就知道了)2)呵呵,好像你从TComponent继承不就OK了,浪费点内存没啥。注意Tag中的东东需要你自己解决。3)Delphi编译器在这点上比较烂,就是abstract方法(相当于C++地纯虚函数),如果你没有完成这个方法,编译器好像就产生警告,没有错误。导致如果代码执行到这个没有完成的方法时就出错了。(Pascal编译器一向以严厉著称,居然连这个都不禁止,难道Anders走了,Borland就没有编译天才了吗?)还有代码可以分几次贴。 Borland公司打击盗版,俺机器没有装,所以你的代码,如果没有Delphi,我是不愿意读的。请见谅。 procedure TLeftButtonPro.ArrangePosition;var I: Integer; tmpTop: Integer; tmpObj: TMyBmpButton;begin inherited; //这句可能多余,毕竟基类是个abstract方法 tmpTop := Height - ButtonHeight; for I := 0 to Count - 1 do begin tmpObj := TMyBmpButton(Items[I]); tmpObj.Left := Left; tmpObj.Top := Trunc(I * tmpTop / Count) + Top; end; end; 从这段代码来说,几乎看不出什么问题。看来就是使用的问题了。从代码的总体感觉,觉得有如下问题:1)封装不是很好,所有的都是public。2)TComponentList默认就是OwnsObjects为True,所以可能会造成双重释放。这一点在调试时需要特别注意。如果两个List中的对象有交叉,就是产生AV错误。内存管理可能是Delphi,C++中最头痛的问题,当然也是最灵活的地方。如果有GC,那么上面就不会有这些问题了。 感谢 chechy(简简单单的活) 我从tcontrol继承竟然就好了,不明白中 SQLite在Dll中的使用,超过25条数据会出错 怎么读取压缩文件里的内容 请问如何使用VCL for Web? 如何得到当前进程所在的文件夹? 请高手不吝赐教!!!!一个简单的问题(都不好意思问了!) Delphi 界面设计,看什么书好? 简单的问题!新手可能都能回答· statusbar的简单问题 讨论:程序员应不应该休息。 请问,如何在delphi中嵌入VC的源程序?急用,谢谢! 如何判断一个文件被打开了,然后把它关闭。谢了 请帮忙找一下错误在哪。 谢谢。。。。。
2)呵呵,好像你从TComponent继承不就OK了,浪费点内存没啥。注意Tag中的东东需要你自己解决。
3)Delphi编译器在这点上比较烂,就是abstract方法(相当于C++地纯虚函数),如果你没有完成这个方法,编译器好像就产生警告,没有错误。导致如果代码执行到这个没有完成的方法时就出错了。(Pascal编译器一向以严厉著称,居然连这个都不禁止,难道Anders走了,Borland就没有编译天才了吗?)还有代码可以分几次贴。
请见谅。
var
I: Integer;
tmpTop: Integer;
tmpObj: TMyBmpButton;
begin
inherited; //这句可能多余,毕竟基类是个abstract方法
tmpTop := Height - ButtonHeight;
for I := 0 to Count - 1 do
begin
tmpObj := TMyBmpButton(Items[I]);
tmpObj.Left := Left;
tmpObj.Top := Trunc(I * tmpTop / Count) + Top;
end;
end;
从代码的总体感觉,觉得有如下问题:
1)封装不是很好,所有的都是public。
2)TComponentList默认就是OwnsObjects为True,所以可能会造成双重释放。这一点在调试时需要特别注意。如果两个List中的对象有交叉,就是产生AV错误。
内存管理可能是Delphi,C++中最头痛的问题,当然也是最灵活的地方。如果有GC,那么上面就不会有这些问题了。
我从tcontrol继承竟然就好了,不明白中