从数据库里调出值显示出多级树,没有问题,但是点击最末级节点时,如何触发事件,却不知道怎么做了。如下:点击最末级节点,webbrowser1打开这个节点在数据库里保存的url,该怎么做,如果判断这个节点是哪一个,是对应该的哪一个URL啊。procedure TForm2.TV1Change(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren  then    //有下一级
  node.Expanded := true  //展开
else                     //没下一级了,子叶,显示它
 form1.webbrowser1.Navigate(URL);end;

解决方案 »

  1.   

    看看你的数据有几层记录用 TV1.Selected.Level 来判断
      

  2.   

    把得到的数据库的记录转化成对象,存到Node.data里
      

  3.   

    to:merkey2002(小样的)我把标签的名字转化成对象,存在NODE.DATA里了,这个也是一样的做吗?我试试,有没有范例代码啊
      

  4.   

    数据库表如下:
    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没有加进去,能帮我做一下吗?
      

  5.   

    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;你这里为什么没定义Url这个成员?