我没有说清楚,ID是此记录的标记,ParentDirID是此记录的父亲记录的标记,根的父亲记录为-1

解决方案 »

  1.   

    在这里我请几个建议,你看可以接受哪种:
    1. 你在增加记录的过程中,TTreeView会不断的刷新数据画面,从而造成速度奇慢,你把Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
      这一句放到最后试试
    2. 如果上面的还是太慢,那么,慢就慢一点,在你子程序的入口前加入:
              Application.ProcessMessages;(或者在循环中设置每30个循环执行一次)
       让用户在加入期间还可以做别的事。
    3. 如果方法2 不行,那么可以:
       1)先把第一级结点加入(这非常快)
       2) 等用户点展开某个结点时,再加入此结点的子结点(这也非常快)
       3) 对子结点多的地方,可以每加入几个(如50个)结点执行一次:Application.ProcessMessages;
      

  2.   

    补充1 
     即:
      BuildTree(FNode,DirList);
      Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
      

  3.   

    你这个算法的复杂度是O(n*n)
    应该有办法改成O(n)  
    我好好想想.
      

  4.   

    试试用:
    TreeView1.Items.BeginUpdate;
    //你的代码
    TreeView1.Items.EndUpdate;
      

  5.   

    如果有很多条记录,一般的做法不是把它们一次性全部加进TreeView,
    而是在程序启动时先加一层,在Expand时候再Build下一层。
      

  6.   

    谢谢各位大侠的援手,可是树根都没有形成,怎么能先生成树枝叶呢?
    BuildTree(FNode,DirList);
      Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
    这样执行能通过吗?如果这样行,那BuildTree过程中的Pnode参数初始调用时该取何值呢?