delphi树的一些操作


本文整理自网络,侵删。

 delphi树的一些操作


生成一棵树方法一:
procedure MakeTree(Query: TQuery; TreeView: TTreeView);
var
 List: TStringList;
 Node: TTreeNode;
 Index: Integer;
begin
 TreeView.Items.BeginUpdate;
 try
 TreeView.Items.Clear;
 
List := TStringList.Create;
 try
 List.Sorted := True;
 
while not Query.Eof do
 begin
 if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
Node := TreeView.Items.AddChild(nil, Query.FieldByName('Name').AsString)
 else
 begin
 Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
 Node := TreeView.Items.AddChild(TTreeNode(List.Objects[Index]),
 Query.FieldByName('Name').AsString);
 end;
 List.AddObject(Query.FieldByName('ID').AsString, Node);
 Query.Next;
 end;
 finally
 List.Free;
 end;
 finally
 TreeView.Items.EndUpdate;
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 T: DWORD;
begin
 T := GetTickCount;
 Query1.SQL.Text := 'SELECT * FROM FTree ORDER BY ParentID, ID';
 Query1.Open;
 MakeTree(Query1, TreeView1);
 Label1.Caption := Format('MakeTree所用时间: %d ms', [GetTickCount - T]); 
end;
 
生成一棵树方法二:
 
procedure CreateTree(DataSet: TADOQuery; Tree: TTreeView;
 const table, aid, aname: string; idname: Boolean);
const
 ID_DEPT = 2;
var
 nLevel: Integer;
 pNodes: array[0..1023] of TTreeNode;
 lpID, lpName, s: string;
begin
 if DataSet = nil then Exit;
 if Tree = nil then Exit;
 if table = '' then Exit;
 pNodes[0] := nil;
 Tree.Items.Clear;
 with DataSet do
 begin
 Close;
 SQL.Clear;
 s := Format('select %s, %s from %s order by %s', [aid, aname, table, aid]);
 SQL.Text := s;
 Open;
 if IsEmpty then Exit;
 First;
 while not Eof do
 begin
 lpID := FieldByName(aid).AsString;
 lpName := FieldByName(aname).AsString;
 nLevel := Length(lpID) div ID_DEPT;
 if not idname then
 pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1], lpName)
 else
 pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1],
 lpID + '-' + lpName);
 Next;
 end;
 end;
end;
 
遍历一棵树:
procedure TForm1.Button1Click(Sender: TObject);
var
 node: ttreenode;
begin
 node := treeview1.Items.GetFirstNode;
 while node <> nil do
 begin
 node := node.GetNext;
 end;
end;

相关阅读 >>

Delphi 读取png base64编码文件生成图片

Delphi中设置系统时间方法

Delphi 用hook实现dll注入详解

Delphi ascii 码对照表

Delphi中的字符串比较(comparestr)

Delphi捕获u盘插入或者拔出

Delphi xe android的所有权限按照分类总结说明

Delphi实现图像反色实例4种方法

Delphi中使用android振动

Delphi 取目录下指定文件到列表

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...