重新写一个 Tlistbox,从那里入手好.请大家指点! ( 积分: 50 )

  • 主题发起人 主题发起人 田园的男孩
  • 开始时间 开始时间

田园的男孩

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟正在开发一个 TListBox .大家指点一下.应该从那里入手好.我不想直接从
TCustomListBox 继承,这样速度太慢了.但是从处弄,这个 Item 的显示和各种
状态的控制实在太不容易了.

请大家指点一下.谢谢!
 
小弟正在开发一个 TListBox .大家指点一下.应该从那里入手好.我不想直接从
TCustomListBox 继承,这样速度太慢了.但是从处弄,这个 Item 的显示和各种
状态的控制实在太不容易了.

请大家指点一下.谢谢!
 
不知道你打算做什么样的,以前我做的时候是从TCustomListBox继承的。你看看DELPHI自带的控件源码,修改掉你要的部分就可以了。不用完全重头些!
 
先说说看你开发的ListBox要实现的功能
 
谢谢回复!

己经辛苦,我作好了一个 TScrollBar. 所以现在可以制作 Listbox 了.要求不复杂,只要在界面部分实现自己的风格就好了.当然如果直接从 TCostomListBox 继承,那么只要修改 CN_DrawItem 就能画自己的 Items 了.但是我想解决的另一个重要问题是.TCustomListBox 的 Items 赋值速度太慢了.

所以我希望用另外一种方法来写一个.就在昨天和今天,我试着从画板类继承,想用画板来画 Items ,并几乎实现了.最终才发现一个不可挽救的问题,因此又告终了.

请大家多多指点.
 
慢?? 不慢啊? 我循环为listbox添加10W条记录才用了1秒
添加100W条记录也只不过用了1分48秒
 
速度真的很慢,没骗你. TMemo 的速度比 TListBox 快 10 倍以上.
 
一样啊。。。我刚试了 速度一样的
你有没有用item.beginupdate和item.endupdate啊
 
当载入的 Itemcount > 50000 的时候你就知道速度差多少了. TMemo 和 Tlistbox 的实现方式是不同的.至少, TListbox 花在 DrawItem 的时间就够多的了.

我想用来作文件路径列表的.
 
5W? 太少了吧。。。

listbox要比memo快的多,我用的是10W测试:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
t1,t2:integer;
begin
listbox1.Items.BeginUpdate;
t1:=GetTickCount;
for i:=0 to 99999 do
listbox1.Items.Add(inttostr(i));
t2:=GetTickCount;
listbox1.Items.EndUpdate;
self.Caption:=FloatToStr((t2-t1)/1000);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
t1,t2:integer;
begin
memo1.Lines.BeginUpdate;
t1:=GetTickCount;
for i:=0 to 99999 do
memo1.lines.Add(inttostr(i));
t2:=GetTickCount;
memo1.lines.EndUpdate;
self.Caption:=FloatToStr((t2-t1)/1000);
end;

结果listbox用了1.392秒
而memo却用了8.382秒

本来想用100W测一下的,但是没敢测,只是listbox就用了89.159秒,按这个比例。。memo还不要用半个小时以上啊。。。
 
谢谢你热情的测试!给分!:)

不过按理说,TListBox 需要 DrawItem 应该要用更多的时间才是.并且以前我做过测试的.
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部