• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi的TTreeView类使用大全

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

 

 

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    tv1: TTreeView;
    Button1: TButton;
    Button2: TButton;
    tv2: TTreeView;
    Button3: TButton;
    Button4: TButton;
    StringGrid1: TStringGrid;
    mmo1: TMemo;
    Button5: TButton;
    Button6: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tv1Change(Sender: TObject; Node: TTreeNode);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{节点转移}
var
 IsNode1 : Boolean = True;{全局变量,判断节点在哪个控件里面}
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsNode1 then  //判断是否转移过
  begin
    if Boolean(tv1.Items.Count) then //节点不为空
    begin
      tv2.Items := tv1.Items;
      tv1.Items.Clear;
      IsNode1 := False; //是否转移的标志物
    end;
  end else //二次转移
    if Boolean(tv2.Items.Count) then //节点不为空
    begin
      tv1.Items := tv2.Items;
      tv2.Items.Clear;
      IsNode1 := True;
    end;
end;

{添加节点}
procedure TForm1.Button2Click(Sender: TObject);
var
  CurrNode: TTreeNodes;//节点数组
  TemNode: TTreeNode; //临时节点
begin
  CurrNode := tv1.Items;//关联树形控件1
  {添加一级节点}
  TemNode := CurrNode.Add(nil, \'一级001\');//add增加兄弟节点
  CurrNode.Add(TemNode, \'一级002\');
  CurrNode.Add(TemNode, \'一级003\');
  {添加二级节点}
  TemNode := CurrNode.AddChild(TemNode, \'二级001\');//AddChild增加子节点
  CurrNode.Add(TemNode, \'二级002\');
  CurrNode.Add(TemNode, \'二级003\');
  {添加三级节点}
  TemNode := CurrNode.AddChild(TemNode, \'三级001\');
  CurrNode.Add(TemNode, \'三级002\');
  CurrNode.Add(TemNode, \'三级003\');
  {添加四级节点}
  TemNode := CurrNode.AddChild(TemNode, \'四级001\');
  CurrNode.Add(TemNode, \'四级002\');
  CurrNode.Add(TemNode, \'四级003\');
  CurrNode.AddFirst(TemNode, \'四级No1\'); //AddFirst增加兄弟节点,排兄弟最前
end;

{遍历读取每一项}
var
  I : Integer = 0;
procedure TForm1.Button3Click(Sender: TObject);
begin
  Self.Button3.Caption := tv1.Items.Item[i].Text; //按钮输出
  if i < tv1.Items.Count-1 then Inc(i) else i := 0;{tv1.Items.Count为总项数}
  tv1.SetFocus; //获取焦点
  tv1.Select(tv1.Items.Item[i]);//选中该项
  {读取每一项方法2:
    procedure TForm1.Button3Click(Sender: TObject);
    var
     CurrNode : TTreeNodes; //节点数组
     TemNode : TTreeNode;//单个节点
    begin
      CurrNode := tv1.Itemsl//节点
      TemNode := CurrNode[I];
      Self.Button3.Caption := tv1.Items.Item[i].Text; //按钮输出
      if i < tv1.Items.Count-1 then Inc(i) else i := 0;//tv1.Items.Count为总项数
      tv1.SetFocus; //获取焦点
      tv1.Select(TemNode);//选中该项
    end;}
end;

{清空TTreeList}
procedure TForm1.Button4Click(Sender: TObject);
begin
  tv1.Items.Clear;
  tv2.Items.Clear;
end;

{读取数据}
procedure TForm1.Button5Click(Sender: TObject);
var
  i: Integer;
begin
  mmo1.Clear;
  for i := 0 to tv1.Items.Count - 1 do//遍历每一项
    mmo1.Lines.Add(tv1.Items[i].Text);//插入
end;

{按级别读取数据}
procedure TForm1.Button6Click(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  mmo1.Clear;
  for i := 0 to tv1.Items.Count - 1 do //遍历
  begin
    s := StringOfChar(#32, tv1.Items[i].Level*4);//读取级别,多少级就多少个
    s := s + tv1.Items[i].Text;
    mmo1.Lines.Add(s);
  end;
end;

{初始化}
procedure TForm1.FormCreate(Sender: TObject);
begin
{初始化 StringGrid1}
  with StringGrid1 do begin
    //Align := alClient;
    //FixedRows := 0;//固定住行避免被改变
    ColCount := 2;//列数
    ColWidths[0] := 80;//第一列宽度
    ColWidths[1] := 60;//第二列宽度
    DefaultRowHeight := 18; //每个框的高度
    RowCount := 15; //有15行
    Cells[0,0]  := \'当前选择\';
    Cells[0,1]  := \'序号\';
    Cells[0,2]  := \'所在级别\';
    Cells[0,3]  := \'在兄弟中排行\';
    Cells[0,4]  := \'下级总数\';
    Cells[0,5]  := \'上级元素\';
    Cells[0,6]  := \'上一个\';
    Cells[0,7]  := \'下一个\';
    Cells[0,8]  := \'上一个兄弟\';
    Cells[0,9]  := \'下一个兄弟\';
    Cells[0,10] := \'上一个可见\';
    Cells[0,11] := \'下一个可见\';
    Cells[0,12] := \'第一个下级\';
    Cells[0,13] := \'最后一个下级\';
    Cells[0,14] := \'总数\';
  end;
end;

{读取每个节点的内容}
procedure TForm1.tv1Change(Sender: TObject; Node: TTreeNode);
begin
   with StringGrid1 do begin
    {清除第二列的数据}
    StringGrid1.Cols[1].Clear;
    {当前选择}
    Cells[1,0] := Node.Text;
    {序号; AbsoluteIndex 是绝对序号}
    Cells[1,1] := IntToStr(Node.AbsoluteIndex);
    {所在级别}
    Cells[1,2] := IntToStr(Node.Level);
    {在兄弟中排行}
    Cells[1,3] := IntToStr(Node.Index);
    {下级总数}
    Cells[1,4] := IntToStr(Node.Count);
    {上级元素}
    if Boolean(Node.Parent) then Cells[1,5] := Node.Parent.Text;
    {上一个}
    if Boolean(Node.GetPrev) then Cells[1,6] := Node.GetPrev.Text;
    {下一个}
    if Boolean(Node.GetNext) then Cells[1,7] := Node.GetNext.Text;
    {上一个兄弟}
    if Boolean(Node.getPrevSibling) then Cells[1,8] := Node.getPrevSibling.Text;
    {下一个兄弟}
    if Boolean(Node.getNextSibling) then Cells[1,9] := Node.getNextSibling.Text;
    {上一个可见}
    if Boolean(Node.GetPrevVisible) then Cells[1,10] := Node.GetPrevVisible.Text;
    {下一个可见}
    if Boolean(Node.GetNextVisible) then Cells[1,11] := Node.GetNextVisible.Text;
    {第一个下级}
    if Node.HasChildren then Cells[1,12] := Node.getFirstChild.Text;
    {最后一个下级}
    if Node.HasChildren then Cells[1,13] := Node.GetLastChild.Text;
    {总数}
    Cells[1,14] := IntToStr(Node.Owner.Count);
  end;
end;

end.

 

 

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab关闭指定图例发布时间:2022-07-18
下一篇:
MATLAB求灰度图像最大灰度,最小灰度,平均灰度发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap