我没有说清楚,ID是此记录的标记,ParentDirID是此记录的父亲记录的标记,根的父亲记录为-1
解决方案 »
- xinxinshou2009进来吧,再给你个展现高尚人品的机会
- 100分:调用DLL种的MDI,在带包编译后出现的问题,大家看看
- 求一个提取url字符串当中最后一个“/”后面的字符串,也就是页面文件名称。
- 怎样定位到源码的相关位置?
- 请问各位,我用ttable连接数据库,为什么总是出现输入sql用户名和密码的对话框,如何解决(我是新手)
- 重金请教一个简单的DLL动态调用问题,UP有分
- 各位大哥,请伸出您那友爱之手帮小弟解决点困难,就是打印问题。请进入。
- 菜鸟在线求一个怪问题
- 通过delphi操作本地数据库,用哪种数据库比较快捷?占用空间较少?
- 有没有交换知识的??
- 怎样获得开始菜单中某一选项的句柄?
- rh(有花须酌酒,无月不登楼),怎么该无可显示
1. 你在增加记录的过程中,TTreeView会不断的刷新数据画面,从而造成速度奇慢,你把Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
这一句放到最后试试
2. 如果上面的还是太慢,那么,慢就慢一点,在你子程序的入口前加入:
Application.ProcessMessages;(或者在循环中设置每30个循环执行一次)
让用户在加入期间还可以做别的事。
3. 如果方法2 不行,那么可以:
1)先把第一级结点加入(这非常快)
2) 等用户点展开某个结点时,再加入此结点的子结点(这也非常快)
3) 对子结点多的地方,可以每加入几个(如50个)结点执行一次:Application.ProcessMessages;
即:
BuildTree(FNode,DirList);
Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
应该有办法改成O(n)
我好好想想.
TreeView1.Items.BeginUpdate;
//你的代码
TreeView1.Items.EndUpdate;
而是在程序启动时先加一层,在Expand时候再Build下一层。
BuildTree(FNode,DirList);
Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
这样执行能通过吗?如果这样行,那BuildTree过程中的Pnode参数初始调用时该取何值呢?