当用户选择某一个特定的fan的时候 我要将该fan的状态等参数读过来显示出来,所以我必须知道这个fan是在哪个区哪个组(相应的地址),这个树是我在程序中生成的,代码如下,没有用到数据结构.希望各位大侠帮忙~
procedure TFrmSpeedSet.FormCreate(Sender: TObject);
var
  I,J,K,TempAreaNum,TempFanGroupNum,TempFanNum:Integer;
  TempAreaName,TempFanGroupName,TempFanName:String;
  root_node,cur_node,cur_node_node:TTreeNode;begin
         //-------------读取工区个数
          Reg:= TRegistry.Create;
          Reg.RootKey:=HKEY_CURRENT_USER;
          Reg.OpenKey('Software\Myreg',True);
          TempAreaNum:=Reg.ReadInteger('AreaNum');
          //----------
          Reg.CloseKey;
          Reg.free;
          //--------------------------------------
      if TempAreaNum>=1 then
         begin
            for i:=TempAreaNum downto 1 do
               begin
                  //-------------写工区名称(根节点)
                  Reg:= TRegistry.Create;
                  Reg.RootKey:=HKEY_CURRENT_USER;
                  Reg.OpenKey('Software\Myreg\Area'+IntToStr(I),True);
                  TempAreaName:=Reg.ReadString('AreaName');
                  TempFanGroupNum:=Reg.ReadInteger('FanGroupNum');
                  Reg.CloseKey;
                  Reg.free;
                  //写根节点
                   root_node:=TreeView1.Items.AddFirst(nil, TempAreaName);
                   root_node.ImageIndex:=0;
                  //
                   if TempFanGroupNum>=1 then
                       begin
                           for J:=TempFanGroupNum downto 1 do
                                begin
                                     Reg:= TRegistry.Create;
                                     Reg.RootKey:=HKEY_CURRENT_USER;
                                     Reg.OpenKey('Software\Myreg\Area'+IntToStr(I)+'\FanGroup'
                                                  +IntToStr(J),True);
                                     TempFanGroupName:=Reg.ReadString('FanGroupName');
                                     TempFanNum:=Reg.ReadInteger('FanNum');
                                     Reg.CloseKey;
                                     Reg.free;
                                     //写风机组节点
                                     cur_node:=TreeView1.Items.addChildfirst(root_node,TempFanGroupName);
                                     cur_node.ImageIndex:=4;
                                     cur_node.SelectedIndex:=4;
                                     if TempFanNum>=1 then
                                         begin
                                             for K:=TempFanNum downto 1 do
                                                  begin
                                                       Reg:= TRegistry.Create;
                                                       Reg.RootKey:=HKEY_CURRENT_USER;
                                                       Reg.OpenKey('Software\Myreg\Area'+IntToStr(I)+
                                                                  '\FanGroup'+IntToStr(J)+
                                                                  '\Fan'+IntToStr(K),True);
                                                       TempFanName:=Reg.ReadString('FanName');
                                                       Reg.CloseKey;
                                                       Reg.free;                                                     cur_node_node:=TreeView1.Items.AddChildFirst(cur_node,TempFanName);
                                                     cur_node_node.ImageIndex:=2;
                                                     cur_node_node.SelectedIndex:=3;
                                                  end;//for K:=TempFanNum downto 1 do
                                         end;//TempFanNum>=1                                end;//for J:=TempFanGroupNum downto 1 do
                       end;//TempFanGroupNum>=1                end ;//for i:=TempAreaNum downto 1 do
           end;//TempAreaNum>=1end;

解决方案 »

  1.   

    if Node.Level = 0 then 已经是顶级节点
    else
      父级节点是:Node.Parent
      

  2.   

    我通讯是用的双层地址(地址1+地址2) 父结点index相当于地址1,子结点index相当于地址2,所以我想分别得到用户所选的这个结点的父结点的index以及它在父结点下的INDEX.   
      

  3.   

    你可以通过TTreeNode的ParentNode属性获得父节点。
    以下代码可以得到你的要求:
    var
      aNode, aParentNode: TTreeNode;
    begin
      aNode := TreeView1.Selected;
      if aNode = nil  then Exit;
      if aNode.Level = 1 then      //判断是否是子节点
      begin
        aParentNode := aNode.Parent;
        Edit1.Text := aParentNode.Text;
        Edit2.Text := '父序号:' + IntToStr(aParentNode.Index) + ' - 子序号(父节点下的Index):' + IntToStr(aNode.Index);
      end;
    end;