DELPHI TreeView 文件目录树和 设置节点图标 完整





unit Unit1; interface uses
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; implementation uses 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.
附件列表
DELPHI TreeView 文件目录树和 设置节点图标 完整的更多相关文章
- TreeView设置节点图标
TreeView设置节点图标 没子节点的设置其图标为 0 有节点的设置其图标为 1 procedure TForm1.Button1Click(Sender: TObject);var i:Int ...
- delphi treeview的子节点图标?
代码实现不同的子节点图标效果. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- Delphi Treeview 用法(概念、属性、添加编辑插入节点、定位节点、拖拽等)
今天再细研究了一下Treeview的用法,网上虽然总结了很多,但是还是有很多节点没有讲到了,也给使用中遇到很多问题.特地总结一下: 1.概念 Treeview用于显示按照树形结构进行组织的数据.Tre ...
- 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)
当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态 ...
- delphi中VirtualStringTree树使用方法之终结篇!
VirtualStringTree 的用法详解:作者:张志宝go淘宝 例子:创建了一个树名为VirtualStringTree1,第一列显示数据库字段ID的值,标题为编号:第二列显示字段Name的值, ...
- Dev TreeList 添加节点图标问题
1. 在设计界面添加imageCollection控件,在属性页设置图标(可Load from disk,也可从Load from dev gallery) 2. TreeList控件有一个叫做Cus ...
- ztree设置节点checked
1.根据id获取树的某个节点: var zTree = $.fn.zTree.getZTreeObj("mytree"); var node = zTree.getNodeByPa ...
- ztree设置节点checked,选中某节点等相关操作
ztree设置节点checked,选中某节点等相关操作 1.根据id获取树的某个节点: var zTree = $.fn.zTree.getZTreeObj("mytree"); ...
- Delphi TreeView – 自动给标题上加图片
Delphi TreeView – 自动给标题上加图片 当处理完TreeView控件树形结构的数据后,根据不同的树形节点Level,加上不同的图片. 图片的ImageList已经放置好,并且TreeV ...
随机推荐
- JS操作SELECT方法
1.判断select选项中 是否存在Value="paraValue"的Item2.向select选项中 加入一个Item3.从select选项中 删除一个Item4.修改sele ...
- css3学习--css3动画详解一(animation属性)
***介绍的属性并不完全,写的都是我认为容易混淆的难点属性,所以属性会在最后综合案例展示~ 一.Keyframes介绍: Keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主 ...
- Smarty实现HTML静态化页面
<?phprequire_once("./config/config.php"); ob_start();$id=$_GET[id];$sql="select * ...
- NET Core+Code First+Docker
NET Core+Code First+Docker背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这 ...
- android ListView 多次调用 getView方法
<ListView android:layout_width="match_parent" android:layout_heig ...
- GHOST还原
整理日: 2015年2月16日 GHOST GHO2Disk STEP01 STEP02 STEP03 STEP04 STEP05 STEP06 STEP07
- 第一个deeplearning4jproject跑起
deeplearning4j是基于java的深度学习库,当然,它有许多特点,但暂时还没学那么深入,所以就不做介绍了 需要学习dl4j,无从下手,就想着先看看官网的examples,于是,下载了exam ...
- uploadify 自定义按钮样式
uploadify是一款不错的JQUERY上传插件,但是FLASH按钮的外挂往往跟我们网页的设计不太搭配.一开始我还试图反编译uploadify.swf来修改其外观,结果发现反编译为FLA后里面没有任 ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- Choose the best route
hdu 2680:http://acm.hdu.edu.cn/showproblem.php?pid=2680 这道题值得一提的两点:在图论中注意重边问题是必须的,有向无向也是同等重要的,如这道题 f ...