当用户选择某一个特定的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;
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;
else
父级节点是:Node.Parent
以下代码可以得到你的要求:
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;