Delphi控件的使用经验

一.Delphi中树型控件的使用技巧

  我们都知道,开发者主要用Delphi来开发数据库管理软件,正因如此,

树型控件的使用最好与数据库联系起来。Delphi提供了一个树型控件

TTreeView,可以用来描述复杂的层次关系。

  1.树节点信息的存储和加载

  常用的方法是用树控件的 LoadFromFile和SavetoFile方法,来实现树

控件和文件之间的交互;或用Assign方法实现树控件和DBMemo,也就是和数

据库间的交互。该方法的优点是编程相对简单,缺点是树控件的实际节点数

可能会很大,对于“大树”,每次加载和存储的数据量会加大,将降低速度

,增大系统开销,造成数据冗余。另一种方法,就是只在树上产生“看得见

”的节点,没有专门记录全部树节点结构的文件或数据库字段,而将树节点

结构分散在数据库的每一个记录中。

  具体方法是:创建一个数据库,字段根据实际业务而定,其中必然有一

个字段的信息将在树型控件的节点上显示,另外还要一个字段来保存节点的

惟一标识号,该标识号由长度相等的两部分组成,前段表示当前节点的父节

点号,后段表示当前节点的节点号,此标识号相当于一个“链表”,记录了

树上节点的结构。该方法的优点:用户操作“大树”时,一般不会展开所有

的节点,而只用到有限的一部分,同时只能从树根一层一层地展开,该法只

在树上产生“看得见”的节点,所以,存储和加载“大树”的速度快,数据

量小,系统开销和数据冗余较小。缺点:编程较复杂,但可以结合该方法编

成一个新的树控件,将大大提高编程效率。值得注意的是,ID号必须惟一,

所以在编程中如何合理产生ID尤为重要。

  2.数据库结构示例

  创建一个数据库,为简化程序,我只创建两个数据库字段,定义如下:

  字段名 类型 长度

  Text C 10

  LongID C 6

  LongID字段实际上由两段组成,每一段3位,LongID只能表示1000条记

录。将LongID定义为索引字段,存为c: esttree ree.dbf。编辑该DBF文

件,新建一条记录,Text字段设为TOP,LongID字段设为“000”(3个“0”

前为三个空格)。

  3.创建演示程序

  在Form1上放置TreeView1、Table1、PopupMenu1、Edit1、Edit2。

TreeView1的PopupMenu属性设为PopupMenu1;Table1的DataBaseName属性设

为c: esttree,TableName属性设为tree.dbf,IndexFieldNames属性设为

LongID;为PopupMenu1加选单项Add1和Del1,Caption分别为Add和Del;

Edit1用来输入新节点的Text属性值,Edit2用来输入新节点的3位ID号。存

为c: esttree reeunit.pas和c: esttree esttree.dpr。

  在treeunit.pas的Type关键字后加入一行:Pstr:^string;{Pstr为字符

串指针}

  为Form1的OnCreate事件添加代码:
  procedure TForm1.FormCreate(Sender: TObject);
  var p:Pstr;Node:TTreeNode;
  begin
  with Table1,Treeview1 do
  begin
  open;
  first;
  new(p);{为指针p分配内存}
  p^:=FieldByName(′LongID′).AsString;
  Node:=Items.AddChildObject(nil,FieldByName(′Text′

).AsString,p);
  if HasSubInDbf(Node) then Items.AddChildObject(Node,′ ′

,nil);{有子节点则加一个空子节点}
  end;
  end;

  HasSubInDbf为自定义函数,自变量为Node,检查节点Node有无子节点

,有则返回True,反之返回False,并在TForm1的类定义里加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值