复制代码代码如下:
satuan Unit1;
antarmuka
kegunaan
Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir,
Dialog, StdCtrls, ComCtrls, DB, ADODB;
jenis
PNodeInfoEx = ^TNodeInfoEx;
TNodeInfoEx = Catatan yang Dikemas
NodeID : Bilangan Bulat;
ID Induk : Integer;
Tipe Node : Integer;
Judul ChnNode : String;
Indeks Gambar: SmallInt;
Indeks Terpilih: SmallInt;
akhir;
TForm1 = kelas(TForm)
tv1: TTreeView;
btn1: Tombol T;
qry1: TADOQuery;
procedure btn1Click(Pengirim: TObject);
prosedur FormDestroy(Pengirim: TObject);
pribadi
{ Deklarasi pribadi }
fungsi StaticBuildTree(TreeView:TTreeView ):Boolean;
fungsi AddTreeItem(TreeView:TTreeView; AddNodeInfo:PNodeInfoEx):TTreeNode;
fungsi FindTreeItem(TreeView:TTreeView; CurNodeID:integer): TTreeNode;
publik
{ Pernyataan publik }
akhir;
var
Formulir1: TForm1;
pelaksanaan
{$R *.dfm}
fungsi TForm1.StaticBuildTree(TreeView:TTreeView ):Boolean;
var
AddNodeInfo : PNodeInfoEx;
mulai
Hasil := Salah;
qry1.LoadFromFile('c:/AdminixTree.xml');//这里以XML文件做为数据源
Treeview.Items.BeginUpdate;//记住:在进行批量添加数据时要使用BeginUpdate, memulai Pembaruan, memulai Pembaruan, memulai Pembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiPembaruan, memulaiUpdate,
Treeview.Items.Clear;//清空Treeview
mencoba
mencoba
jika qry1.RecordCount >0 maka
mulai
qry1.Pertama;
sementara Bukan qry1.Eof lakukan
mulai
Baru(AddNodeInfo) ;//生成结构体
AddNodeInfo^.NodeID := qry1.FieldByName('NODE_ID').AsInteger;
AddNodeInfo^.ParentID := qry1.FieldByName('PARENT_ID').AsInteger;
AddNodeInfo^.NodeType := qry1.FieldByName('NodeType').AsInteger;
AddNodeInfo^.ChnNodeTitle := qry1.FieldByName('ChnNodeTitle').AsString;
AddNodeInfo^.ImageIndex := qry1.FieldByName('ImageIndex').AsInteger;
AddNodeInfo^.SelectedIndex := qry1.FieldByName('SelectedIndex').AsInteger;
AddTreeItem(Treeview,AddNodeInfo);//把结构体的指针存到Treeview中
qry1.Berikutnya;
akhir;
akhir;
kecuali
Application.MessageBox('生成树结点失败',MB_ICONSTOP+MB_OK);
menaikkan;//向上级抛异常
akhir;
qry1.Tutup;
Hasil := Benar;
Akhirnya
Tampilan Pohon.Item.EndUpdate;
akhir;
akhir;
//在加入结点时,应先判断加入的是父结点还是子结点,判断ParentID
fungsi TForm1.AddTreeItem(TreeView:TTreeView; AddNodeInfo:PNodeInfoEx):TTreeNode;
var
Node Induk: TTreeNode;
mulai
ParentNode := FindTreeItem(Treeview,AddNodeInfo^.ParentID);
Jika ParentNode <> nihil maka
Hasil := Treeview.Items.AddChildObject(ParentNode, Trim(AddNodeInfo.ChnNodeTitle), Pointer(AddNodeInfo))
kalau tidak
Hasil := Treeview.Items.AddObject(ParentNode, Trim(AddNodeInfo.ChnNodeTitle), Pointer(AddNodeInfo));
jika Hasil<>nihil maka
mulai
Hasil.ImageIndex := AddNodeInfo.ImageIndex;
Hasil.SelectedIndex := AddNodeInfo.SelectedIndex;
akhir;
akhir;
//这里是判断是否存在其父结点
fungsi TForm1.FindTreeItem(TreeView:TTreeView; CurNodeID:integer): TTreeNode;
var
saya : Bilangan bulat;
mulai
Hasil := nihil;
untuk i := 0 hingga Treeview.Items.Count-1 lakukan
mulai
jika CurNodeID=PNodeInfoEx(Treeview.Items[i].Data)^.NodeID maka
mulai
Hasil := Tampilan Pohon.Item[i];
KELUAR;
akhir;
akhir;
akhir;
//生成树结构
procedure TForm1.btn1Click(Pengirim: TObject);
mulai
Pohon Pembuatan Statis (tv1)
akhir;
//在窗体释放时一定要把树结点中的结构体指针给释放掉,对于在Dis pose pose
prosedur TForm1.FormDestroy(Pengirim: TObject);
var
saya : Bilangan bulat;
mulai
untuk i := 0 hingga tv1.Items.Count-1 lakukan
mulai
Buang( PNodeInfoEx(tv1.Items[i].Data) )
akhir;
akhir;
akhir.
复制代码代码如下:
//如何访问树结点?
procedure TForm1.tv1MouseDown(Pengirim: TObject; Tombol: TMouseButton;
Pergeseran: TShiftState; X, Y: Bilangan Bulat);
var
pNode:TTreeNode;
mulai
pNode:=tv1.GetNodeAt(x,y);
if (pNode<>nil) dan (Tombol=mbleft) lalu
ShowMessage(PNodeInfoEx(pNode.Data)^.ChnNodeTitle);
akhir;