【问题标题】:How to build hierarchy by filenames list in delphi, virtualstringtree如何在delphi,virtualstringtree中通过文件名列表构建层次结构
【发布时间】:2013-06-30 18:48:08
【问题描述】:

我一直被这个问题困扰。

我有一个存档中的文件名列表(这里是文件和文件夹)。此列表如下所示:

folder
folder/index.html
otherfolder

问题是把层次结构变成虚拟字符串树。 所属的文件和文件夹将是根文件夹中的子节点。

有什么想法吗?

【问题讨论】:

    标签: delphi virtualtreeview tvirtualstringtree


    【解决方案1】:

    这是一个完整的代码。 您阅读行,拆分此行以获取每个子文件夹。 如果每个子文件夹已经在树中,则搜索它,否则创建新的子文件夹。 用经典的树视图测试:)

    procedure TForm1.Analyze(ListOfFiles : TStringList);
    var
       root: TTreeNode;
       nI: Integer;
       files : TStringList;
      nJ: Integer;
    begin
       for nI := 0 to ListOfFiles.Count - 1 do
       begin
            files := TStringList.Create;
            files.Delimiter := '/';
            files.DelimitedText := ListOfFiles[nI];
            root := nil;
            for nJ := 0 to files.Count - 1 do
                 root := GetFolder(root, files[nJ])
    
            FreeAndNil( Files );
       end;
    end;
    
    function TForm1.GetFolder( TreeNode : TTreeNode; SubFolder : String ) : TTreeNode;
    var
      nI: Integer;
    begin
         result := nil;
    
         if Assigned( TreeNode ) then
         begin
             for nI := 0 to TreeNode.Count - 1 do
             begin
                  if SameText(TreeNode.Item[nI].Text, SubFolder) then
                  begin
                     result := TreeNode.item[nI];
                     Exit;
                  end;
             end;
         end
         else
         begin
             for nI := 0 to TreeView1.Items.Count - 1 do
             begin
                  if SameText(TreeView1.Items[nI].Text, SubFolder) then
                  begin
                     result := TreeView1.Items[nI];
                     Exit;
                  end;
             end;
    
         end;
         if not Assigned( result ) then
         begin
              result := TreeView1.Items.AddChild( TreeNode, SubFolder );
              Exit;
         end;
    
    end;
    

    【讨论】:

    • 海。此代码在树视图上完美运行。如何将它集成到 virtualstringtree?
    • TTreeNode 应更改为 PVirtualNod,将 Treeview1 替换为您的 VirtualTreeview。我没有安装 VirtualTreeview 的 delphi。但是,我认为这很容易。稍微搜索一下;)
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多