Treeview 动态生成及对子节点进行增、删、改功能的实现。谁能给我代码,谢谢
我希望尽快解决,我给100分。

解决方案 »

  1.   

    还这么多要求才100分,你自己看看Demo去吧。里面有啊
      

  2.   

    到delphi的绑助中,找关键字TTreeNode有例子
      

  3.   

    TreeView的使用    
        
    一. 如何初始化一个TreeView?弄一个窗口,放上一个TreeView和一个Button,分别取名为TV1和Btn1。如果需要在每个节点前有个图,请在窗口上放上一个ImageList,取名为ImageList1,双击它,加入六个图标。还要记得记得将TV1的Images属性改为ImageList1噢。双击按钮Btn1,在里面填入以下代码,然后按F9运行,点击Btn1就可以看到效果了。procedure TForm1.Btn1Click(Sender: TObject);ConstMyDocDir = 'C:Documents';PersonDir = '3hSoft';VarVarI : Word;SubNodeName : array [1..5] of ShortString;RootNode, SubNode : TTreeNode;P : PString;beginSubNodeName[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 dobeginNew(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中如何设置选中结点vari:integer; {i为设置的选中结点的索引值}beginif i>treeview1.items.count thentreeview1.items[i].selected:=true;或treeview1.selected:=treeview1.items[i];三。设置TreeView结点的图形1. 设置TreeView的images属性为已存在的images对象treeview1.images:=imagelist1;2. 在加入结点后执行:varanode:TTreeNode;begeinanode:=Treeview1.add(nil,'item1');anode.imageindex:=0; {结点未选中时显示的图标}anode.selectedindex:=1; {结点选中时显示的图标}end3. 如果结点图形在改变后未发生变化,可以执行:treeview1.refresh;四。如何批量处理TreeView结点使用TreeView的items属性的BeginUpdate和EndUpdate方法,例:TreeView1.items.BeginUpdate;for i:=0 to TreeView1.items.count-1 dobegin//将每个结点的文字改成为小写字母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 ) ) thenbeginTreeview1.BeginDrag( False );end;end;{鼠标拖动执行语句}procedure TForm1.Treeview1DragOver( Sender, Source: TObject;X, Y: Integer; State: TDragState; var Accept: Boolean);varNode : TTreeNode;beginif Source = Treeview1 thenbeginNode := Treeview1.GetNodeAt( X, Y ); {取当前结点}if Node <> nil then {当前结点不为空才能实现拖拽,accept:=true}Accept := true;end;end;{鼠标释放时执行的语句}procedure TForm1.Treeview1DragDrop( Sender, Source: TObject;X, Y : Integer );varTempNode : TTreeNode;AttachMode : TNodeAttachMode;beginif Treeview1.Selected = nil thenExit;AttachMode := naAddChild; {设置结点移动模式,设移动结点为子结点}{ 注意在这里存在一个bug,当移动结点时,如果目标结点没有子结点,}{ 则加入的新的子结点会失败,所以先在当前目标结点的下面 }{ 加入一个临时子结点,移动完毕后,再将临时结点删除 }Treeview1.Items.BeginUpdate;tryTempNode := Treeview1.Items.AddChild( Treeview1.DropTarget,'Temp' );try{ 移动选中的结点到目标结点 }Treeview1.Selected.MoveTo( Treeview1.DropTarget, AttachMode );finallyTempNode.Free; { 不要忘了释放临时结点 }end;finallyTreeview1.Items.EndUpdate;end;end;
     
     
      

  4.   

    Means_pan  谢谢。我怎么再给你50分那?我不知道怎么给你。再发个帖子。?
      

  5.   

    Means_pan  谢谢。我怎么再给你50分那?我不知道怎么给你。再发个帖子。?
      

  6.   

    你应该结了..呵呵..
    用管理中的贴子加分功能就可以加50分了,.,
    其实很多东西DEMO中都有的..