从数据库里调出值显示出多级树,没有问题,但是点击最末级节点时,如何触发事件,却不知道怎么做了。如下:点击最末级节点,webbrowser1打开这个节点在数据库里保存的url,该怎么做,如果判断这个节点是哪一个,是对应该的哪一个URL啊。procedure TForm2.TV1Change(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren then //有下一级
node.Expanded := true //展开
else //没下一级了,子叶,显示它
form1.webbrowser1.Navigate(URL);end;
begin
if Node.HasChildren then //有下一级
node.Expanded := true //展开
else //没下一级了,子叶,显示它
form1.webbrowser1.Navigate(URL);end;
解决方案 »
- 数组型变量定义
- 誰有WINDOWS API函數大全?
- DBGRID2中如何显示DBGRID1中对应行的信息(新手求救)
- 如何使 一个button 具有 tab order 属性
- ADOquery如何快速定位某一记录??
- 关于TWebBrowser和TXMLDocument编程的n个问题?
- 求异形-控件原代码,要求从TGraphicControl能拖动
- 如何实现win+鼠标左键 win+鼠标中键 win+鼠标右键 的热键啊?
- Delphi可以内嵌汇编,我想知道它可以内嵌机器码吗?
- 有谁做过没有跟数据库关联的报表呢?
- 如何使用hook实现刷新桌面时执行我的代码?肯请大牛帮忙,高分相送,急!!!
- ADOQuery1控件编写insert语句的一个小问题
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;procedure TForm2.TV1Change(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren then //有下一级
node.Expanded := true //展开
else //没下一级了,子叶,显示它
form1.webbrowser1.Navigate(MyData1^.URL1);end;不行,搞不好,能帮我加一下吗?其他的都引入到NODE.DATA里去了,就是URL没有加进去,能帮我做一下吗?
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;你这里为什么没定义Url这个成员?