• Delphi的TTreeView类使用大全


    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.
  • 相关阅读:
    进程与线程
    Socket函数编程(二)
    socket编程
    subprocess 模块
    异常处理
    模块与包
    【Java基础】String源码分析
    【MySQL】 执行计划详解
    【MySQL】performance schema详解
    【Spring Cloud-Open Feign】使用OpenFeign完成声明式服务调用
  • 原文地址:https://www.cnblogs.com/GodPan/p/3391619.html
Copyright © 2020-2023  润新知