我的treeview显示分四五级,有三千多个结点,做出来的东西,打开要几分钟,查了这么久,没有查到一个关于分级加载的例子,只要到这里来哭,实在是没办法了,求求大家了。能帮一下吗大家

解决方案 »

  1.   

    我晕啊,我不行啊,接触DELPHI也没多久,给个例子我看一下啊,
      

  2.   

    如果数据不是经常变动很大的话,可以将 生成的 treeview list 保存到文件中,运行软件时,直接载入这个文件就可以了(零等待啊),有了新数据重新生成一下这个文件就可以了。
      

  3.   

    生成 treeview 后,保存到文件treeView1.SaveToFile,下次进入软件 treeView1.Loadfromfile
    如果你是从数据库中动态生成这个treeview,在节点数量很大的情况下,速度优化不了多少的。
      

  4.   

    我是用的ACEESS数据库,TO: lxjssy,你说的保存到文件中是什么意思啊
      

  5.   

    treeview.savetofile(appllication.path+'filename.txt');
    treeview.loadfile(application.path+'filename.txt');
      

  6.   

    { 加载下级节点的代码 }
    function TDirectoryWindowForm.ExpandDirectoryNode( Node : TTreeNode ): Boolean;
    var
      JoinID : LongInt;
      dwTmp  : LongWord;
      CNode  : TTreeNode;
    begin
      if (Node <> nil) and (Node.Count>0) and (Node.Item[0].StateIndex<>0) then
      begin
        Result := TRUE;
        exit;
      end;  if Node = nil then JoinID := 0 else JoinID := Node.StateIndex;  AQ.Close;
      AQ.SQL.Text:='select [ID], [FileName], [Attributes] from WordPad'
                 + ' where ([RecycledTime] = 0) and ([JoinID] = ' + IntToStr( JoinID ) + ')'
                 + ' order by [FileName]';
      Result := AQ.Open( EmptyStr );
      if not Result then exit;  if Node <> nil then Node.DeleteChildren;
      while not AQ.Eof do
      begin
        dwTmp := AQ.FieldByName( 'Attributes' ).AsInteger;
        if dwTmp and WORD_ATTRIBUTE_ARCHIVE = 0 then
        begin
          CNode := dirTree.Items.AddChild( Node, Trim( AQ.FieldByName('Filename').AsString));
          CNode.StateIndex := AQ.FieldByName( 'ID' ).AsInteger;
          if ( dwTmp and WORD_ATTRIBUTE_DIRECTORY ) = 0 then
          begin
            CNode.ImageIndex   := Image_Diskette;
            CNode.SelectedIndex:= Image_Diskette;
           end
           else
          begin
            CNode.ImageIndex   := Image_Directory;
            CNode.SelectedIndex:= Image_Selected;
          end;      with dirTree.Items.AddChild( CNode, 'Empty' ) do StateIndex:= 0;
        end;
        AQ.Next;
      end;
      AQ.Close;
    end;
      

  7.   

    { 初始化代码 }
    procedure TDirectoryWindowForm.FormActivate(Sender: TObject);
    begin  if dirTree.Items.Count = 0 then
      begin
        ExpandDirectoryNode( nil );
        if dirTree.TopItem <> nil then dirTree.TopItem.Selected:= TRUE;
      end;end;
      

  8.   

    { 加载下级节点代码 }procedure TDirectoryWindowForm.dirTreeExpanding(Sender: TObject;
      Node: TTreeNode; var AllowExpansion: Boolean);
    begin
      AllowExpansion := ExpandDirectoryNode( Node );
    end;
      

  9.   

    一个节点的子节点先不要添加,仅将其HasChildren属性置为True。这样在该节点的左边会出现'+'号,用户点'+'号时,会触发OnExpanding事件。在该事件中,你可以添加该节点的子节点。如果经处理发现该节点没有子节点,将HasChildren属性置为False即可。