博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DELPHI TreeView 文件目录树和 设置节点图标 完整
阅读量:4651 次
发布时间:2019-06-09

本文共 6369 字,大约阅读时间需要 21 分钟。

    DELPHI TreeView 文件目录树和 设置节点图标
 
下载地址
 
 
需要制作文档管理软件 这个非常有用的
1 文件夹 设置图标为 
2
文件夹里没有文件的文件夹 设置图标为 
没有 
3 .HTML文档 设置图标为
4 有附件的 文档设置图标为 
 
DELPHI XE 5测试通过
 
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, ImgList, StdCtrls;type  TForm1 = class(TForm)    TreeView1: TTreeView;    ImageList1: TImageList;    Button1: TButton;    Memo1: TMemo;    Button5: TButton;    procedure Button1Click(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure Button5Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;function IsEmptyDir(sDir: String): Boolean;function AttachMentsExists(FileName: String): Boolean;procedure SetIcons(TreeView1: TTreeView; list: TStringList);procedure EnumText(s: string; aItem: TTreeNode);procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode;  IncludeFiles: Boolean; FileExt: string);function ExtractTreeViewFileName(RootPath: string; TreeView: TTreeView;  FileExt: string): string;function ExtractNodeFullPath(TreeView: TTreeView): string;implementationuses StrUtils;{$R *.dfm}var  list: TStringList;  RootPath: string;// = 'D:\C++Builder学习大全中文版';  FileName: string;  { TreeView获得选中的完整路径    aaaa\ssss\bbbb  }function ExtractNodeFullPath(TreeView: TTreeView): string;var  Path: string;  Parent: TTreeNode;  // Node: TTreeNode;begin  Path := TreeView.Selected.text;  Parent := TreeView.Selected.Parent;  while Parent <> nil do  begin    Path := Parent.text + '\' + Path;    Parent := Parent.Parent;  end;  Result := Path;end;function ExtractTreeViewFileName(RootPath: string; TreeView: TTreeView;  FileExt: string): string;var  FileName: string;begin  Result := '';  if TreeView.Selected = nil then    Exit;  FileName := RootPath + ExtractNodeFullPath(TreeView) + FileExt; // 当前选中的文件名  if not FileExists(FileName) then    Exit;  Result := FileName;end;{  将1个目录里面所有的文件添加到TREEVIEW中  DirToTreeView(TreeView1,'D:\Data\',nil,True,'.cpp');}procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode;  IncludeFiles: Boolean; FileExt: string);var  SearchRec: TSearchRec;  ItemTemp: TTreeNode;begin  with Tree.Items do  begin    BeginUpdate;    if Directory[Length(Directory)] <> '\' then      Directory := Directory + '\';    if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then    begin      Application.ProcessMessages;      repeat        { 添加文件夹 }        if (SearchRec.Attr and faDirectory = faDirectory) and          (SearchRec.Name[1] <> '.') then        begin          if (RightStr(SearchRec.Name, 6) = '_files') or // 不添加 _file这个文件夹            (RightStr(SearchRec.Name, 12) = '_Attachments') then            // 不添加 _AttachMents这个文件夹            Continue;          if (SearchRec.Attr and faDirectory > 0) then            Root := AddChild(Root, SearchRec.Name);          ItemTemp := Root.Parent;          DirToTreeView(Tree, Directory + SearchRec.Name, Root,            IncludeFiles, FileExt);          Root := ItemTemp;        end        { 添加文件 }        else if IncludeFiles then          if SearchRec.Name[1] <> '.' then            if (RightStr(SearchRec.Name, 4) = FileExt) (* or { 只添加 .CPP格式文件 }              (RightStr(SearchRec.Name, 4) <> '') *) then { 什么格式都添加 }              AddChild(Root, SearchRec.Name);      until FindNext(SearchRec) <> 0;      FindClose(SearchRec);    end;    EndUpdate;  end;end;procedure TForm1.Button5Click(Sender: TObject);begin  SetIcons(TreeView1, list);  list.Free;end;procedure TForm1.FormCreate(Sender: TObject);begin  RootPath:=ExtractFilePath(Application.ExeName) + 'TestData';  Memo1.Clear;  TreeView1.Items.Clear;  DirToTreeView(TreeView1, RootPath, nil, true, '.htm');  list := TStringList.Create;  EnumText(RootPath, TreeView1.Items.GetFirstNode);  // Memo1.text := list.text;  SetIcons(TreeView1, list);  // list.Free;end;procedure EnumText(s: string; aItem: TTreeNode);var  node: TTreeNode;  str: string;begin  node := aItem;  while node <> nil do  begin    if s = '' then      str := node.text    else      str := s + '\' + node.text;    list.Add(str);    if node.HasChildren then      EnumText(str, node.getFirstChild);    node := node.getNextSibling;  end;end;function IsEmptyDir(sDir: String): Boolean;var  sr: TSearchRec;begin  Result := true;  if Copy(sDir, Length(sDir) - 1, 1) <> '\' then    sDir := sDir + '\';  if FindFirst(sDir + '*.*', faAnyFile, sr) = 0 then    repeat      if (sr.Name <> '.') and (sr.Name <> '..') then      begin        Result := False;        break;      end;    until FindNext(sr) <> 0;  FindClose(sr);end;{返回 附件文件夹"D:\C++Builder学习大全中文版\新建文本文档.htm" D:\C++Builder学习大全中文版\新建文本文档_Attachments}function AttachmentsFolder(FileName: String): string;begin  Result := ExtractFilePath(FileName) + ChangeFileExt(ExtractFileName(FileName),    '') + '_Attachments';end;function AttachMentsExists(FileName: String): Boolean;var  f: string;begin  f := ExtractFilePath(FileName) + ChangeFileExt(ExtractFileName(FileName), '')    + '_Attachments';  Result := DirectoryExists(f);end;procedure SetIcons(TreeView1: TTreeView; list: TStringList);var  i: Integer;begin  with TreeView1 do  begin    for i := 0 to Items.Count - 1 do    begin      if DirectoryExists(list.Strings[i]) then      begin        Items[i].ImageIndex := 0;        Items[i].SelectedIndex := 0;        Items[i].StateIndex := 0;      end;      if FileExists(list.Strings[i]) then      begin        Items[i].ImageIndex := 1;        Items[i].SelectedIndex := 1;        Items[i].StateIndex := 1;      end;      if (AttachMentsExists(list.Strings[i])) then      if  not IsEmptyDir( AttachmentsFolder(list.Strings[i]) ) then      begin       // Form1.Memo1.LINES.Add( AttachmentsFolder(list.Strings[i]));         Items[i].ImageIndex := 2;         Items[i].SelectedIndex := 2;         Items[i].StateIndex := 2;      end;    end;  end;end;procedure TForm1.Button1Click(Sender: TObject);var  i: Integer;begin  with TreeView1 do  begin    for i := 0 to Items.Count - 1 do    begin      if Items[i].HasChildren then      begin        Items[i].ImageIndex := 0;        Items[i].SelectedIndex := 0;        Items[i].StateIndex := 0;      end      else      begin        Items[i].ImageIndex := 1;        Items[i].SelectedIndex := 1;        Items[i].StateIndex := 1;      end;    end;  end;end;end.

 

附件列表

 

转载于:https://www.cnblogs.com/xe2011/p/3386257.html

你可能感兴趣的文章