数据库表如下:
hb mc sjbh url
序号 名称 层级关系 网址
要点击一个根结点,打开一个相应该的网址,url该怎么引用出来,代码该怎么加判断是否是根节点unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, DB, DBClient;type
TForm2 = class(TForm)
TV1: TTreeView;
ClientDataSet1: TClientDataSet; procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
TMyData1 = ^TNodeData1;
TNodeData1 = record
ID1: Integer; //标签
BH1: string; //编号
MC1: string; //名称
SJBH1: string; //上级编号
end;
TMyData2 = ^TNodeData2;
TNodeData2 = record
ID2: Integer; //标签
BH2: string; //编号
MC2: string; //名称
SJBH2: string; //上级编号
end;var
Form2: TForm;
//procedure TForm1.Button1Click(Sender: TObject);
//function KHSTR(str: string): string;implementationuses UDMDATA;{$R *.dfm}function KHSTR(str: string): string;
begin
result := '(' + str + ')';
end;function TreeFill1(FTV: Tobject; ID: Integer; TREEDSTNAMESHOW, TREEDSTNAME, TREEDSBHNAME, TREEDSMCNAME, TREEDSSJBHNAME: string): Boolean;
var
TV1: TTreeView;
TopNode1: TTreeNode;
TempNode1: TTreeNode;
MyData1: TMyData1;
S1: array of TMydata1;
CDS_Tree1: TClientDataset;
I1, J1, COUNT1: Integer;
F1: Boolean;
begin
TV1 := TTreeView(FTV);
TV1.Items.Clear;
TV1.ReadOnly := True;
TopNode1 := TV1.Items.GetFirstNode;
New(MyData1);
MyData1^.ID1 := ID;
MyData1^.BH1 := '';
MyData1^.MC1 := '';
MyData1^.SJBH1 := '';
TopNode1 := TV1.Items.Add(TopNode1, TREEDSTNAMEShow);
TopNode1.ImageIndex := 0;
TopNode1.SelectedIndex := 1;
TopNode1.Data := MyData1;
try
CDS_Tree1 := TClientDataset.Create(DMDATA);
CDS_Tree1.ProviderName := 'DSP_AQCMD';
CDS_Tree1.CommandText := ' SELECT * FROM ' + TREEDSTNAME + ' ORDER BY ' + TREEDSBHNAME;
try
CDS_Tree1.Open;
COUNT1 := 0;
COUNT1 := CDS_Tree1.RecordCount + 1;
if COUNT1 > 1 then
begin
SetLength(S1, COUNT1);
CDS_Tree1.First;
while not CDS_Tree1.Eof do
begin
New(MyData1);
MyData1^.ID1 := ID;
MyData1^.BH1 := CDS_Tree1.fieldbyname(TREEDSBHNAME).AsString; ;
MyData1^.MC1 := CDS_Tree1.fieldbyname(TREEDSMCName).AsString;
MyData1^.SJBH1 := CDS_Tree1.fieldbyname(TREEDSSJBHNAME).AsString; if (MyData1^.SJBH1 = null) or (MyData1^.SJBH1 = '') or (MyData1^.SJBH1 = '0') then
begin
//第二层
TopNode1 := TV1.Items.GetFirstNode;
TempNode1 := TV1.Items.AddChild(TopNode1, MyData1^.MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := MyData1;
end
else
begin
//有上级
F1 := False;
for J1 := 0 to TV1.Items.Count - 1 do
begin
if TMyData1(TV1.Items[J1].data)^.BH1 = Mydata1^.SJBH1 then
begin
F1 := True; TopNode1 := TV1.Items[J1];
TempNode1 := TV1.Items.AddChild(TopNode1, MyData1^.MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := MyData1; Break;
end;
end;
if not F1 then //找不到上级
S1[CDS_Tree1.RecNo] := Mydata1;
end;
CDS_Tree1.Next;
end;
end;
except
ShowMessage('打开表出错!');
end;
finally
CDS_Tree1.Free;
end;
//处理未加入树的记录
for I1 := 0 to COUNT1 - 1 do
begin
if S1[I1] <> nil then
begin
F1 := FaLSE;
for J1 := 0 to TV1.Items.Count - 1 do
begin
if TMyData1(TV1.Items[J1].data)^.BH1 = s1[i1].SJBH1 then
begin
F1 := True;
TopNode1 := TV1.Items[J1];
TempNode1 := TV1.Items.AddChild(TopNode1, s1[i1].MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := s1[i1];
Break;
end;
end; if not F1 then
begin
//加入到第二层
TopNode1 := TV1.Items.GetFirstNode;
TempNode1 := TV1.Items.AddChild(TopNode1, s1[i1].MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := s1[i1];
end
end;
end;
TV1.FullExpand;
TV1.FullCollapse;
end;代码是这样的,能完整的从数据库里提出数据生成数,没有问题,但是我每个根结点都要有触发事件,请问大家该怎么写
hb mc sjbh url
序号 名称 层级关系 网址
要点击一个根结点,打开一个相应该的网址,url该怎么引用出来,代码该怎么加判断是否是根节点unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, DB, DBClient;type
TForm2 = class(TForm)
TV1: TTreeView;
ClientDataSet1: TClientDataSet; procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
TMyData1 = ^TNodeData1;
TNodeData1 = record
ID1: Integer; //标签
BH1: string; //编号
MC1: string; //名称
SJBH1: string; //上级编号
end;
TMyData2 = ^TNodeData2;
TNodeData2 = record
ID2: Integer; //标签
BH2: string; //编号
MC2: string; //名称
SJBH2: string; //上级编号
end;var
Form2: TForm;
//procedure TForm1.Button1Click(Sender: TObject);
//function KHSTR(str: string): string;implementationuses UDMDATA;{$R *.dfm}function KHSTR(str: string): string;
begin
result := '(' + str + ')';
end;function TreeFill1(FTV: Tobject; ID: Integer; TREEDSTNAMESHOW, TREEDSTNAME, TREEDSBHNAME, TREEDSMCNAME, TREEDSSJBHNAME: string): Boolean;
var
TV1: TTreeView;
TopNode1: TTreeNode;
TempNode1: TTreeNode;
MyData1: TMyData1;
S1: array of TMydata1;
CDS_Tree1: TClientDataset;
I1, J1, COUNT1: Integer;
F1: Boolean;
begin
TV1 := TTreeView(FTV);
TV1.Items.Clear;
TV1.ReadOnly := True;
TopNode1 := TV1.Items.GetFirstNode;
New(MyData1);
MyData1^.ID1 := ID;
MyData1^.BH1 := '';
MyData1^.MC1 := '';
MyData1^.SJBH1 := '';
TopNode1 := TV1.Items.Add(TopNode1, TREEDSTNAMEShow);
TopNode1.ImageIndex := 0;
TopNode1.SelectedIndex := 1;
TopNode1.Data := MyData1;
try
CDS_Tree1 := TClientDataset.Create(DMDATA);
CDS_Tree1.ProviderName := 'DSP_AQCMD';
CDS_Tree1.CommandText := ' SELECT * FROM ' + TREEDSTNAME + ' ORDER BY ' + TREEDSBHNAME;
try
CDS_Tree1.Open;
COUNT1 := 0;
COUNT1 := CDS_Tree1.RecordCount + 1;
if COUNT1 > 1 then
begin
SetLength(S1, COUNT1);
CDS_Tree1.First;
while not CDS_Tree1.Eof do
begin
New(MyData1);
MyData1^.ID1 := ID;
MyData1^.BH1 := CDS_Tree1.fieldbyname(TREEDSBHNAME).AsString; ;
MyData1^.MC1 := CDS_Tree1.fieldbyname(TREEDSMCName).AsString;
MyData1^.SJBH1 := CDS_Tree1.fieldbyname(TREEDSSJBHNAME).AsString; if (MyData1^.SJBH1 = null) or (MyData1^.SJBH1 = '') or (MyData1^.SJBH1 = '0') then
begin
//第二层
TopNode1 := TV1.Items.GetFirstNode;
TempNode1 := TV1.Items.AddChild(TopNode1, MyData1^.MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := MyData1;
end
else
begin
//有上级
F1 := False;
for J1 := 0 to TV1.Items.Count - 1 do
begin
if TMyData1(TV1.Items[J1].data)^.BH1 = Mydata1^.SJBH1 then
begin
F1 := True; TopNode1 := TV1.Items[J1];
TempNode1 := TV1.Items.AddChild(TopNode1, MyData1^.MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := MyData1; Break;
end;
end;
if not F1 then //找不到上级
S1[CDS_Tree1.RecNo] := Mydata1;
end;
CDS_Tree1.Next;
end;
end;
except
ShowMessage('打开表出错!');
end;
finally
CDS_Tree1.Free;
end;
//处理未加入树的记录
for I1 := 0 to COUNT1 - 1 do
begin
if S1[I1] <> nil then
begin
F1 := FaLSE;
for J1 := 0 to TV1.Items.Count - 1 do
begin
if TMyData1(TV1.Items[J1].data)^.BH1 = s1[i1].SJBH1 then
begin
F1 := True;
TopNode1 := TV1.Items[J1];
TempNode1 := TV1.Items.AddChild(TopNode1, s1[i1].MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := s1[i1];
Break;
end;
end; if not F1 then
begin
//加入到第二层
TopNode1 := TV1.Items.GetFirstNode;
TempNode1 := TV1.Items.AddChild(TopNode1, s1[i1].MC1);
TempNode1.ImageIndex := 0;
TempNode1.SelectedIndex := 1;
TempNode1.Data := s1[i1];
end
end;
end;
TV1.FullExpand;
TV1.FullCollapse;
end;代码是这样的,能完整的从数据库里提出数据生成数,没有问题,但是我每个根结点都要有触发事件,请问大家该怎么写
...
begin
if Node.HasChildren then //有下一级
node.Expanded := true //展开
else //没下一级了,子叶,显示它
form1.webbrowser1.Navigate(MyData1^.BH1);end;上面这个应该先查找是哪个节点,然后再调出这个节点的BH1打开,应该怎么判断,请求大家给个代码,谢谢了
begin
if node.data <> nil then
form1.webbrowser1.Navigate(MyData1(Node.data).BH1);
end;
[Pascal Error] Unit2.pas(326): E2066 Missing operator or semicolon不知道是怎么回事