• 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
  • 相关阅读:
    Javascript online compressor
    Asp.net mvc 3 JSON post & AOP
    Javascript Clone
    LiveRTMP之对接海康、大华等IPCamera SDK进行RTMP直播推送
    H5实现视频监控网络直播时前端自动适配
    监控物联网直播时遇到iOS无法播放HLS流的问题解决
    LivePlayer RTSP/RTMP/HTTP/HLS全功能播放器
    [转载]LivePlayer实现直播抓拍
    LiveRTMP内置IPCamera实现RTMP直播摄像机功能
    使用LiveNVR实现RTSP视频监控、直播推送
  • 原文地址:https://www.cnblogs.com/yangxuming/p/6690873.html
Copyright © 2020-2023  润新知