• delphi中TreeView的一些应用

    • 一. 如何初始化一个TreeView?


      弄一个窗口,放上一个TreeView和一个Button,分别取名为TV1和Btn1。如果需要
      在每个节点前有个图,请在窗口上放上一个ImageList,取名为ImageList1,双击
      它,加入六个图标。还要记得记得将TV1的Images属性改为ImageList1噢。双击按
      钮Btn1,在里面填入以下代码,然后按F9运行,点击Btn1就可以看到效果了。


      procedure TForm1.Btn1Click(Sender: TObject);
      Const
      MyDocDir = 'C:\My Documents';
      PersonDir = '3hSoft';
      Var
      Var
      I : Word;
      SubNodeName : array [1..5] of ShortString;
      RootNode, SubNode : TTreeNode;
      P : PString;
      begin
      SubNodeName[1] := '便笺';
      SubNodeName[2] := '发件箱';
      SubNodeName[3] := '联系人';
      SubNodeName[4] := '任务';
      SubNodeName[5] := '日记';
      TV1.Items.Clear;
      TV1.Items.BeginUpdate;
      New(P);
      P^ := MyDocDir + '\' + PersonDir;
      RootNode := TV1.Items.AddObject(Nil, '个人文件夹', P);
      // 此 Node 的图标已对 Images 属性中取第 0 个了。
      For I := 1 to 5 do
      begin
      New(P);
      P^ := MyDocDir + '\' + PersonDir + '\' + SubNodeName[I];
      SubNode := TV1.Items.AddChildObject(RootNode, SubNodeName[I], P)
      ;
      ;
      // 如果不想使用图标的话请删除以下两行
      SubNode.ImageIndex := I;
      SubNode.SelectedIndex := I;
      end;
      TV1.Items.EndUpdate;
      end;

       

      二.在TreeView中如何设置选中结点


      var
      i:integer; {i为设置的选中结点的索引值}


      begin
      if i>treeview1.items.count then
      treeview1.items[i].selected:=true;


      treeview1.selected:=treeview1.items[i];

      三。设置TreeView结点的图形


      1. 设置TreeView的images属性为已存在的images对象

      treeview1.images:=imagelist1;


      2. 在加入结点后执行:

      var
      anode:TTreeNode;
      begein
      anode:=Treeview1.add(nil,'item1');
      anode.imageindex:=0; {结点未选中时显示的图标}
      anode.selectedindex:=1; {结点选中时显示的图标}
      end
      3. 如果结点图形在改变后未发生变化,可以执行:
      treeview1.refresh;

       

      四。如何批量处理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;

      标签: none

    • 已有 2 条评论 »

      Adoncn

      Adoncn June 1st, 2022 at 02:15 am

      #1

      了解了,努力!

      robin

      robin July 25th, 2006 at 04:38 pm

      #2

      不错.帮了偶得大忙了。谢谢!!!

      ^-^

      • 发表评论: ( 注意:为了防止广告评论,本站链接已经启用nofollow)
      •   您的名字
      •   E-mail
      •   您的网址(选填)

Powered by Typecho)))   ICP:蜀ICP备05009250号