TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够。借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文。

TTreeView、TTreeNodes和TTreeNode

  TTreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。

常用的属性

  1. Count,结点个数;
  2. Item[index],通过index得到结点;
  3. TTreeNode.Data,指向一个指针,可以存对象,存指针,也可以存整数;
  4. TTreeNode.Text,树结点的文本;
  5. TTreeNode.ImageIndex,TTreeNode.SelectedIndex,分别是树结点图标序号,树结点选中时图标序号,用于设置树结点的图标;
  6. TTreeNode.Expanded属性表明是否所有的子项都全部展开;
  7. TTreeNode.HasChildren属性表明一个项是否有子项;
  8. TTreeNode.Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住,只能有一个节点会被聚焦。
  9. TTreeNode.Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。

常用的方法

  1. GetFirstNode 得到根结点;
  2. TTreeNode.GetNext 得到本节点的下一个结点,配合GetFirstNode可以遍历整个树;
  3. AddFirst 添加第一个根节点,此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。返回新添加的节点。
  4. 然后以此为基础,添加此项的子节点。
  5. 删除节点:Treeview.Selected.Delete
  6. 编辑节点内容:Treeview.Selected.EditText
  7. 为了提升效率,避免界面大幅闪动,最好使用TreeView.Items.BeginUpdate 和 TreeView.Items.EndUpdate 方法;

设置树结点图标

  1. ImageIndex:在常态时选用的图的序号;
  2. SelectedIndex:当节点被选中时在TimageList 中选什么样的图象;

一段代码

Items.BeginUpdate;
  Items.Clear;
  // 建立第一层节点
  AddElemntType2Tree(AElementTypeID, AAddNoChildNode);
  // 建立第二层节点
  if Items.GetFirstNode <> nil then
  begin   
    oNode := Items[0]; // 选择第一个构件类型结点
    while oNode <> nil do
    begin
      UpdateTreeNode(oNode, ASelectedElementID);
      oNode := oNode.getNextSibling;
    end;
  end;
  // 展开
  if Selected <> nil then
    Selected.Expanded := True
  else if Items.Count > 0 then
  begin
    oNode := Items.GetFirstNode;
    Assert(oNode <> nil);
    // 选中第一个节点的第一个子节点(若存在则为第一个构件类型下的第一个构件)。
    Selected := oNode.getFirstChild();
    // 若没有选中构件,则选中第一个构件类型节点,否则展开节点。
    if Selected = nil then
      Selected := oNode
    else
      Selected.Expanded := True;
  end;
  Items.EndUpdate;

Delphi之TreeView的更多相关文章

  1. delphi中Treeview的使用介绍

    今天重点学习了TreeView的使用方法,基本的已经写了,现在主要想说的是如何显示数据库的资料,今天只是做了个较简单的例子,一个父节点下显示数据库中某个field的值.代码如下: procedure ...

  2. delphi中TreeView使用(转)

    delphi中TreeView使用(1) TreeView由节点构成,建树通过对TreeView.items属性进行操作.Items是一个TTreeNodes对象,这是一个TTreeNode集. 一. ...

  3. delphi 获取 TreeView选中的文件路径

      //获取 TreeView选中的文件路径 unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, G ...

  4. delphi 去掉TreeView水平滚动条

        使用API函数:声明 FUNCTION ulong ShowScrollBar(ulong hwnd,ulong wBar,ulong bShow) LIBRARY "user32. ...

  5. Delphi下Treeview控件基于节点编号的访问

    有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下:      function GetGlobeNumCode(inNode:T ...

  6. Delphi下Treeview控件基于节点编号的访问1

    有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下:      function GetGlobeNumCode(inNode:T ...

  7. delphi学习treeview中从表列名和数据添加为目录并双击自动选中

    1 unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syst ...

  8. 在DELPHI中用TreeView控件从数据库中动态装载信息

    1.PInfo表结构ID VARCHAR(50)FullName VARCHAR(50)ParentID VARCHAR(50) 2.Unit文件unit Info; interface uses  ...

  9. delphi treeview 鼠标移动显示hint信息

    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;   X, Y: Integer); var   Nod ...

随机推荐

  1. maven学习心得

    心得:这几天一直在研究maven的配置,还真是伤心啊,网上资料不多,而且问题不断.确实很让人头疼 背景:之所以学习maven是因为我们需要一键部署,我们项目是已经差不多完成了,是eclipse的web ...

  2. Android HttpClient POST JSON Restful-web-services

    @Override protected String doInBackground(String... arg0) { Gson gson = new Gson(); String json = gs ...

  3. POJ1008 1013 1207 2105 2499(全部水题)

    做了一天水题,挑几个还算凑合的发上来. POJ1008 Maya Calendar 分析: #include <iostream> #include <cstdio> #inc ...

  4. BZOJ 1023 [SCOI2009]生日快乐

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1729  Solved: 1219[Submit][Statu ...

  5. 最小费用最大流MCMF 最小增广

    没有写单纯性的...应该不会有卡最小增广的出题人吧...(雾) struct MCMF{ struct tedge{int x,y,cap,flow,w,next;}adj[maxm];int ms, ...

  6. 2015第35周五JavaScript变量

    java语言里有一句很经典的话:在java的世界里,一切皆是对象. Javascript虽然跟java没有半点毛关系,但是很多会使用javascript的朋友同样认为:在javascript的世界里, ...

  7. 【模拟】HDU 5762 Teacher Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 题目大意: 给n个点,坐标范围0~m(n,m<=105),求是否存在2个点对满足哈夫曼距 ...

  8. JS线程模型&Web Worker

    js线程模型 客户端javascript是单线程,浏览器无法同时运行两个事件处理程序 设计为单线程的理论是,客户端的javascript函数必须不能运行太长时间,否则会导致web浏览器无法对用户输入做 ...

  9. HDOJ 1056 HangOver(水题)

    Problem Description How far can you make a stack of cards overhang a table? If you have one card, yo ...

  10. freemarker对数字的处理

    freemark会默认对数字进行格式化处理,例如price = 12000,  通过${price}显示为12,000,  但其实有些场景会有问题: 比如编辑一条记录, 再保存,容易将12,000传到 ...