在DELPHI中treeview怎么显示各种类别

在DELPHI中treeview如何显示各种类别
我在树型控件中显示各种类别。如何设计类中有类的数据表,使得点击一个类,显示子类。

------解决方案--------------------
1.用FcTreeView生成,方便
2.用TreeView生成,还要在前面生成结构体!

------解决方案--------------------
以下程序是当点击某一结点时,则调用该结点的DLL文件
1.
数据库结构
NODE_ID PARENT_ID DllName ChnNodeTitle
2.程序
因为FcTreeView中为每个结点集成了2个属性,StringData与StringData2,这样使得我们不再需要用声明结构体与结构体指针,从而挂到每个结点上。以下是一个事例!
第一步,首先构造一棵树干
var
sNode:TfcTreeNode; //声明临时树结点,用于临时存放结点信息
begin
with qrySlct do
begin
close;
CommandText:= 'Select * From ADMINIXTREE where parent_id is null '; //扫描数据库中的根结点
open;
while not eof do
begin
sNode:=fcTreeView1.Items.Add(nil,qrySlct.FieldByName( 'ChnNodeTitle ').AsString);//将中文名称生成结点
sNode.StringData := qrySlct.FieldByName( 'NODE_ID ').AsString;//将其结点号存入Node中,以备以后使用
sNode.StringData2 := qrySlct.FieldByName( 'DllName ').AsString;//将其结点的Dll文件存入,以备以后使用
Next;
end;
end;
////////////////////////////
就这样一个树干就做完了
第二步 动态生成树枝
动态生成树枝放在FcTreeview的Click事件中,当然也可以放入Onchange中,个人建议放在Click
这里有个问题,在生成树干后,怎样在点击树时返回我点的结点名称呢?
有两种方法
1.在MouseDown中获得
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pNode:TTreeNode;
begin
pNode:=TreeView1.GetNodeAt(x,y);
end;
2.在单元中声明一个全局FctreeView结点,在Fctreeview的Onchange中将Node赋值于该全局变量
而后在Click中写生成树枝的程序
procedure TForm1.fcTreeView1Click(Sender: TObject);
var
sNode:TfcTreeNode;
begin
if ddNode.Count=0 then //如果该结点已生成,而放弃再次生成!
begin
with qrySlct do
begin
close;
CommandText:= 'Select * From ADMINIXTREE where parent_id = '+ddNode.StringData;//注意,这是根据当前某点,生成其分枝的语句
open;
while not eof do
begin
sNode:=fcTreeView1.Items.AddChild(ddNode,qrySlct.FieldByName( 'ChnNodeTitle ').AsString);
sNode.StringData := qrySlct.FieldByName( 'NODE_ID ').AsString;
Next;
end;
end;
end;
end;

------解决方案--------------------
如果用Treeview
1.先建造结构体,并用结构体指针指向该结构体
2.建树干
3.动态生成结点下的Child
TNodeInfoEx = Packed Record
NodeID : Integer;
ParentID : Integer;
NodeType : SmallInt;
NodeLevel : SmallInt;
ChnNodeTitle : String;
EngNodeTitle : String;
dllFileName : String;
ImageIndex: SmallInt;
SelectedIndex: SmallInt;
end;
PNodeInfoEx = ^TNodeInfoEx;
procedure TForm1.BuildTree(Treeview:Ttreeview);
var
AddNodeInfo : TNodeInfoEx;
begin
with qrySlct do
begin
close;
CommandText:= 'Select * From ADMINIXTREE where parent_id is null ';
open;
while not eof do
begin
AddNodeInfo.NodeID := qrySlct.FieldByName( 'NODE_ID ').AsInteger;
AddNodeInfo.ParentID := qrySlct.FieldByName( 'PARENT_ID ').AsInteger;
AddNodeInfo.NodeType := qrySlct.FieldByName( 'NodeType ').AsInteger;
AddNodeInfo.ChnNodeTitle := qrySlct.FieldByName( 'ChnNodeTitle ').AsString;
AddTreeItem(Treeview1,AddNodeInfo);
Next;
end;
end;
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
tmpNode:=Node;
end;

procedure TForm1.TreeView1Click(Sender: TObject);
var
AddNodeInfo : TNodeInfoEx;
ParentNode: TTreeNode;