Delphi TreeView 问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi TreeView 问题相关的知识,希望对你有一定的参考价值。
要求实现以下功能,还请高手帮忙,谢谢:
1。如何给TreeView的子父节点加图片,并且父节点图片和子节点图片都统一,如图所示:
2。选中节点,右键可删除次节点,如果选中子节点就删除子节点,如果选中父节点就直接删除父节点(同时也删除此父节点下的所有子节点)。
3。鼠标在TreeView点右键时,显示“展开”和“收起”,点“展开”就展开所有的节点;点“收起”就折叠起所有的节点,只显示父节点!
现在第三个问题已经解决了!不过还有前两个哦!大家帮帮忙!^_^
告诉你几个关键点吧。
动态创建树结点,每个结点的StateImage、SelImage这些属性是设置图标的。
删除结点,选择的哪个就直接删除这个结点,如果下面有子节点,会自动给一起删了的,不用你操心 参考技术B Images 属性 设置 成ImageList1
然后给每个节点的ImageIndex设置成ImageList1中图片就可以了
然后 popupmenu属性 设置成popupmenu1 就可以了本回答被提问者采纳
Delphi中动态加载TreeView信息
unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, DB, ADODB, StdCtrls; type PNodeInfo=^TNodeInfo; TNodeInfo=record ID:string; FullName:string; Url:string; end; TForm3 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; TreeView1: TTreeView; Button1: TButton; procedure CreateChildTree(ParentNode: TTreeNode); procedure CreateViewTree(Sender: TObject); procedure Button1Click(Sender: TObject); procedure TreeView1DblClick(Sender: TObject); private Private declarations public Public declarations end; var Form3: TForm3; implementation $R *.dfm procedure TForm3.CreateChildTree(ParentNode: TTreeNode); var Query:TADOQuery; ChildNode:TTreeNode; //孩子结点 ChildNodeInfo:PNodeInfo; //孩子结点信息 begin Query:=TADOQuery.Create(nil); with Query do begin Connection:=ADOConnection1; SQL.Add(‘SELECT ID,FullName,Url FROM PInfo WHERE ParentID = ‘‘‘+PNodeInfo(ParentNode.Data)^.ID+‘‘‘‘); //获取孩子结点信息 Open; while not Eof do begin New(ChildNodeInfo); ChildNodeInfo^.ID:=FieldByName(‘ID‘).AsString; ChildNodeInfo^.FullName:=FieldByName(‘FullName‘).AsString; ChildNodeInfo^.Url:=FieldByName(‘Url‘).AsString; ChildNode:=TreeView1.Items.AddChildObject(ParentNode,(ChildNodeInfo^.FullName),ChildNodeInfo); //添加孩子结点,并关联孩子结点信息 CreateChildTree(ChildNode); //进行递归 Next; end; Close; end; end; procedure TForm3.CreateViewTree(Sender: TObject); var BootNode:TTreeNode; //根结点 BootNodeInfo:PNodeInfo; //根结点信息 begin with ADOQuery1 do begin SQL.Clear; SQL.Add(‘SELECT ID,FullName,Url FROM PInfo WHERE ParentID IS NULL‘); //获取根结点信息 Open; New(BootNodeInfo); BootNodeInfo^.ID:=FieldByName(‘ID‘).AsString; BootNodeInfo^.FullName:=FieldByName(‘FullName‘).AsString; BootNodeInfo^.Url:=FieldByName(‘Url‘).AsString; TreeView1.Items.Clear; BootNode:=TreeView1.Items.AddChildObject(nil,(BootNodeInfo^.FullName),BootNodeInfo); //添加根结点,并关联根结点信息 Close; end; CreateChildTree(BootNode); //创建子树 TreeView1.FullExpand; //展开所有树结点 end; procedure TForm3.Button1Click(Sender: TObject); begin CreateViewTree(Sender); end; procedure TForm3.TreeView1DblClick(Sender: TObject); var TNode:TTreeNode; X,Y:Integer; begin //获取双击的结点 with TreeView1 do begin X:=ScreenToClient(Mouse.CursorPos).X; Y:=ScreenToClient(Mouse.CursorPos).Y; TNode:=GetNodeAt(X,Y); end; if (TNode<>nil) and (TNode=TreeView1.Selected) then ShowMessage(PNodeInfo(TNode.Data)^.Url); //显示双击结点的信息 end; end.
以上是关于Delphi TreeView 问题的主要内容,如果未能解决你的问题,请参考以下文章