zoukankan      html  css  js  c++  java
  • delphi treeview添加节点_一片树叶

    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyTreeNode1, MyTreeNode2: TTreeNode;
    begin
    with TreeView1.Items do
    begin
    Clear; { remove any existing nodes }
    MyTreeNode1 := Add(nil, 'RootTreeNode1'); { Add a root node }
    { Add a child node to the node just added }
    AddChild(MyTreeNode1,'ChildNode1');
    {Add another root node}
    MyTreeNode2 := Add(MyTreeNode1, 'RootTreeNode2');
    {Give MyTreeNode2 to a child }
    AddChild(MyTreeNode2,'ChildNode2');
    {Change MyTreeNode2 to ChildNode2 }
    { and add a child node to it}
    MyTreeNode2 := TreeView1.Items[3];
    AddChild(MyTreeNode2,'ChildNode2a');
    {Add another child to ChildNode2, after ChildNode2a }
    Add(MyTreeNode2,'ChildNode2b');
    {add another root node}
    Add(MyTreeNode1, 'RootTreeNode3');
    end;
    一. 如何初始化一个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;
    SubNode := TV1.Items.AddChildObject(RootNode, SubNodeName, 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.selected:=true;

    treeview1.selected:=treeview1.items;
    三。设置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
    //将每个结点的文字改成为小写字母
    TreeView1.items.text:=lowercase(TreeView1.items.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;

    每天早上敲醒自己的不是闹钟,是夢想!
  • 相关阅读:
    安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
    android studio 撤销和恢复
    安卓开发学习笔记(六):如何实现指定图片定时开屏功能?
    JAVA小白开发环境配置(编译器为Idea)
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    安卓开发学习笔记(五):史上最简单且华丽地实现Android Stutio当中Webview控件https/http协议的方法
    安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?
    XML如何添加注释?
    安卓开发学习笔记(三):Android Stuidio无法引用Intent来创建对象,出现cannot resolve xxx
    安卓开发学习笔记(二):如何用Android Stuidio在res资源下创建xml视图文件
  • 原文地址:https://www.cnblogs.com/yplong/p/2360967.html
Copyright © 2011-2022 走看看