Delphi TreeView 问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi TreeView 问题相关的知识,希望对你有一定的参考价值。

要求实现以下功能,还请高手帮忙,谢谢:
1。如何给TreeView的子父节点加图片,并且父节点图片和子节点图片都统一,如图所示:
2。选中节点,右键可删除次节点,如果选中子节点就删除子节点,如果选中父节点就直接删除父节点(同时也删除此父节点下的所有子节点)。
3。鼠标在TreeView点右键时,显示“展开”和“收起”,点“展开”就展开所有的节点;点“收起”就折叠起所有的节点,只显示父节点!
现在第三个问题已经解决了!不过还有前两个哦!大家帮帮忙!^_^

参考技术A 你的这些问题,其实很简单,但要说清楚也要费点口舌。。。。。。
告诉你几个关键点吧。
动态创建树结点,每个结点的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 问题的主要内容,如果未能解决你的问题,请参考以下文章

WPF C# TreeView 获取所选项目的文本

TreeView而不是WebView?

Treeview 丢失焦点后依然高亮 SelectedNode

Delphi TreeView 问题

delphi treeview和ADO数据库配合问题

带有 ExtendedSelection 的 Qml TreeView 中的 selectedRows() 落后了一步