delphi TREEVIEW的简单使用

时间:2024-03-10 09:19:08

.1.添加、删除、修改节点:
静态的方法可以在设计时通过Items的编辑器设置各节点的内容。
在添加和删除前必须保证有节点被选中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根节点,如Treeview.Items.AddFirst( nil, \'Root\');
然后以此为基础,添加此项的子节点。

删除节点
Treeview.Selected.Delete

编辑节点内容
Treeview.Selected.EditText

注意:由于根节点没有父节点 (TTreeNode.Parent= nil)
此外,在大批量添加数据到Treeview中时最好使用
  TreeView.Items.BeginUpdate;
  添加节点
  TreeView.Items.EndUpdate
这样能加快显示速度。

2.在节点上添加图象
Treeview中几个与图象相关的属性:
  SelectedIndex:当节点被选中时在TimageList 中选什么样的图象
  OverlayIndex:选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),比如一个节点不可用时加一副X图象在其前面。
  ImageIndex:在常态时选用的图的序号
  StateIndex: 在StateImages这个ImageList中对应的序号,-1时不显示图象
   比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以显示图象。在Form中放置一ImageList控件,加入几个图 片,分别被Index为0,1,…在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的 ImageIndex表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。

3.关于Level
Level的概念可以用下图表示:
Level0   Level1 Level2

4.排序
SortType决定什么时候进行排序;
TreeView.AlphaSort对节点进行排序,如果不能满足要求,你可以定义自己的CustomSort方法。

5.Drag&Drop操作,与标准的拖放操作使用方法一样


公司  
      -用友公司  
              -王晨  
                    -李明  
                    -王亮      
                    -张东  
              -李海  
                    -明明  
                    -刚风

下面是我写的一个TREEVIEW小程序的代码,你可以看,  
  var       rootnode,subnode,personnode,matenode:ttreenode;  
              i,j,k:integer;  
      begin  
      rootnode:=tv1.items.add(nil,\'公司\');  
      qrymaster.Close;  
      qrymaster.sql.add(\'select   *   from   master\');  
      qrymaster.Open;  
      qrymaster.First;  
      for   i:=0   to   qrymaster.RecordCount-1   do  
      begin  
                  subnode:=tv1.Items.Addchild(rootnode,qrymaster.FieldByName(\'company\').AsString);  
              //原形:rootnode=tv1.items.add(nil,string);  
              //       rootnode.ImageIndex   :=0;  
              //       rootnode.stateIndex   =0;  
                    qrysub.Close;  
                    qrysub.SQL.clear;  
                    qrysub.SQL.Add(\'select   *   from   submaster   where   companyid=:dd\');  
                    qrysub.ParamByName(\'dd\').asinteger:=qrymaster.FieldByName(\'companyid\').asinteger;  
                    qrysub.Open;  
                    qrysub.First;  
                      for   j:=0   to   qrysub.RecordCount-1   do  
                      begin  
                            personnode:=tv1.Items.AddChild(subnode,qrysub.FieldByName(\'personname\').AsString);  
                            //   subnode.ImageIndex   :=-1;  
                            //   subnode.StateIndex   :=-1;  
                            qrymate.close;  
                            qrymate.sql.clear;  
                            qrymate.sql.add(\'select   *   from   comunication   where   personid=:personid\');  
                            qrymate.parambyname(\'personid\').asinteger:=qrysub.fieldbyname(\'personid\').asinteger;  
                            qrymate.open;  
   
                            for   k:=0   to   qrymate.recordcount-1   do  
                              begin  
                              matenode:=tv1.items.addchild(personnode,qrymate.fieldbyname(\'name\').asstring);  
                              qrymate.next;  
                              end;  
                              qrysub.Next;  
                      end;  
   
              qrymaster.Next;  
          end;  
        end;