• 怎么改变Treeview中的图标? OnClick事件Click获取Node.text 批量处理及实现TreeView结点拖拽的实例


    //这个过程根据你的要求选择图标
    procedure TForm1.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren then
          if Node.Expanded then
              Node.ImageIndex := 3   //节点有子节点时打开的图标
          else
              Node.ImageIndex := 0   //节点有子节点时收起来的图标
      else Node.ImageIndex := 1;     //节点没有子节点时图标
    end;
    //这个过程显示选择的图标
    procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;  Node: TTreeNode);
    begin
      Node.SelectedIndex := Node.ImageIndex;   //节点选择后使用的图标
    end;

    -------------------------------------------------------------------------------------------------------

    //treeview的单击事件
    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
    //如果选中节点的等级(level)为0(根节点等级为0,根节点的子节点等级为1,依次类推)并且其序号(index)为0(同等级下的的节点按从上到下数第一个为0,第二个为1,以此类推)
    if(treeview1.Selected.Level = 0)and(treeview1.Selected.Index = 0) then
    begin
    //这里写点中了第一个根节点后要做的事
    form1.Color := clred;
    end
    else
    if (treeview1.Selected.Level = 1)and(treeview1.Selected.Index=1) then
    begin
    //这里写点中了第三个根节点的第2个子节点后要做的事
    form1.Color := clblue;
    end;
    end;
    //如果你想点节点前的“+”号也有同样的效果,那么就应该在Expanding事件里写判断处理程序。
    //【补充】【如果你不想要点+号的时候触发事件,这下面的可以删去 】
    procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
    var AllowExpansion: Boolean);
    begin
    if(node.Level = 0)and(node.Index = 0) then
    begin
    form1.Color := clred;
    end
    else
    if (node.Level = 1)and(node.Index=1) then
    begin
    form1.Color := clblue;
    end;
    end;

    //直接Click获取Node.text 

    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
      if TreeView1.Selected.Index >= 0 then
      Edit1.Text := TreeView1.Selected.Text;
    end; 

    -------------------------------------------------------------------------------------------------------------

    //如何批量处理TreeView结点


    使用TreeView的items属性的BeginUpdate和EndUpdate方法,例:


    TreeView1.items.BeginUpdate;
    for i:=0 to TreeView1.items.count-1 do
    begin
    file ://将每个结点的文字改成为小写字母
    TreeView1.items[i].text:=lowercase(TreeView1.items[i].text);
    end;
    TreeView1.items.EndUpdate;

    -------------------------------------------------------------------------------------------------------------

    //实现TreeView结点拖拽的实例


    下面的程序片段演示了如何实现拖拽treeview构件结点的例子

    {鼠标按下时执行的语句}
    procedure TForm1.Treeview1MouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin

    {判断左键按下并且鼠标点在一个结点上开始实现拖拽}
    if ( Button = mbLeft ) and
    ( htOnItem in Treeview1.GetHitTestInfoAt( X, Y ) ) then
    begin
    Treeview1.BeginDrag( False );
    end;
    end;

    {鼠标拖动执行语句}
    procedure TForm1.Treeview1DragOver( Sender, Source: TObject;
    X, Y: Integer; State: TDragState; var Accept: Boolean);
    var
    Node : TTreeNode;
    begin
    if Source = Treeview1 then
    begin
    Node := Treeview1.GetNodeAt( X, Y ); {取当前结点}
    if Node <> nil then {当前结点不为空才能实现拖拽,accept:=true}

    Accept := true;
    end;
    end;

    {鼠标释放时执行的语句}
    procedure TForm1.Treeview1DragDrop( Sender, Source: TObject;
    X, Y : Integer );
    var
    TempNode : TTreeNode;
    AttachMode : TNodeAttachMode;
    begin
    if Treeview1.Selected = nil then
    Exit;

    AttachMode := naAddChild; {设置结点移动模式,设移动结点为子结点}


    { 注意在这里存在一个bug,当移动结点时,如果目标结点没有子结点,}
    { 则加入的新的子结点会失败,所以先在当前目标结点的下面 }
    { 加入一个临时子结点,移动完毕后,再将临时结点删除 }

    Treeview1.Items.BeginUpdate;
    try
    TempNode := Treeview1.Items.AddChild( Treeview1.DropTarget,
    'Temp' );
    try
    { 移动选中的结点到目标结点 }
    Treeview1.Selected.MoveTo( Treeview1.DropTarget, AttachMode );
    finally
    TempNode.Free; { 不要忘了释放临时结点 }
    end;
    finally
    Treeview1.Items.EndUpdate;
    end;
    end;


     

  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/y232995558/p/1413874.html
Copyright © 2020-2023  润新知