如何将文件夹目录(例如:D盘或C盘)添加为TreeView的一个节点,并让ListView与之相关联起来?
解决方案 »
- dbgrideh表中表RowDetailPanel如何设置对应的字段关联呀
- 想写一个这样的程序 大家给点思路
- 关于在Timage上画线的问题,奇怪
- 好久没来了,关于Delphi Midas开发三层架构系统的方案讨论,比较头痛,高手大哥们给个建议!
- 黑龙江程序员联盟(13711613)这里高手很多,最好是黑龙江的呀,希望你加入
- 如何判断和创建表
- 我今天辞职了!delphi程序员请近 !
- 有20个combobox,想检查每一个combobox.checked是否为true,请问,如何用简单的循环语句实现?
- 套接字问题?
- 写了个Global Hotkey的控件,但死活不运行用户的事件,帮忙看看吧!
- 是没有人知道,还是问题太简单,不屑一顾?!
- 如何使得在edit中输入的字符全部显示成为*号?
D6以上版本有,Samples面板。
function GetNodePath(Node: TTreeNode): string;
var tNode: TTreeNode;
begin
tNode := Node;
Result := Node.Text;
if Copy(Result, Length(Result), 1) <> '\' then Result := Result + '\';
while tNode.Parent <> nil do begin
tNode := tNode.Parent;
if Copy(tNode.Text, Length(tNode.Text), 1) <> '\' then
Result := tNode.Text + '\' + Result
else
Result := tNode.Text + Result;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var tNode: TTreeNode;
begin
// 初始化根结点为D:\
tNode := TreeView1.Items.Add(nil, 'd:\');
// 添加一个空项,这样才能出现+号
TreeView1.Items.AddChild(tNode, '');
end;procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
sr: TSearchRec;
tNode: TTreeNode;
begin
// 展开时重新刷新一遍
Node.DeleteChildren;
if FindFirst(GetNodePath(Node)+'*.*', faAnyFile, sr) = 0 then begin
repeat
// 是目录的就添加
if ((sr.Attr and faDirectory) = sr.Attr) and
(sr.Name <> '.') and (sr.Name <> '..')
then begin
tNode := TreeView1.Items.AddChild(Node, sr.Name);
TreeView1.Items.AddChild(tNode, '');
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
sr: TSearchRec;
tItem: TListItem;
begin
ListView1.Clear;
if FindFirst(GetNodePath(Node)+'*.*', faAnyFile, sr) = 0 then begin
repeat
// 只添加文件到ListView中
if ((sr.Attr and faDirectory) <> sr.Attr)
then begin
tItem := ListView1.Items.Add;
tItem.Caption := sr.Name;
tItem.SubItems.Add(IntToStr(sr.Size));
tItem.SubItems.Add(DateTimeToStr(FileDateToDateTime(sr.Time)));
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; IncludeFiles:
Boolean);
var
SearchRec : TSearchRec;
ItemTemp : TTreeNode;
begin
with Tree.Items do
try
BeginUpdate;
if Directory[Length(Directory)] <> '\' then Directory := Directory + '\';
if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
begin
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then
begin
if (SearchRec.Attr and faDirectory > 0) then
Root := AddChild(Root, SearchRec.Name);
ItemTemp := Root.Parent;
DirToTreeView(Tree, Directory + SearchRec.Name, Root, IncludeFiles);
Root := ItemTemp;
end
else if IncludeFiles then
if SearchRec.Name[1] <> '.' then
AddChild(Root, SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
finally
EndUpdate;
end;
end;