zoukankan      html  css  js  c++  java
  • Delphi Treeview 操作实例

    怎么改变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;

    参考
    http://blog.csdn.net/delphi308/article/details/10124125
  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/yangxuming/p/6690873.html
Copyright © 2011-2022 走看看