ich hab das ganze so gelöst das wenn ein subkey existiert ein Item "\" angelegt wird. Im OnExpand überprüfe ich dann ob ein solches Item existiert und wenn dies der fall ist wird der unterzweig dann gefüllt.
Folgende Procedure befüllt den TreeView
Delphi-Quellcode:
procedure ShowRegInTree(ATree: TTreeView; AParentNode: TTreeNode; ARegPath: String);
var LRegistry, LReg2: TRegistry;
LNames: TStringlist;
LCount: Integer;
LNode: TTreeNode;
begin
ATree.Items.BeginUpdate;
LRegistry := TRegistry.Create;
LRegistry.RootKey := HKEY_CLASSES_ROOT;
if Assigned(AParentNode) then
AParentNode.DeleteChildren;
if LRegistry.OpenKey(ARegPath, False) then
begin
LReg2 := TRegistry.Create;
LReg2.RootKey := LRegistry.RootKey;
LNames := TStringList.Create;
LRegistry.GetKeyNames(LNames);
for LCount := 0 to LNames.Count - 1 do
begin
LNode := ATree.Items.AddChild(AParentNode, LNames.Strings[LCount]);
if LReg2.OpenKeyReadOnly(ARegPath + '\' + LNames.Strings[LCount]) then
begin
if LReg2.HasSubKeys then
ATree.Items.AddChild(LNode, '\');
LReg2.CloseKey;
end;
end;
LNames.Free;
LRegistry.CloseKey;
LReg2.Free;
end;
LRegistry.Free;
ATree.Items.EndUpdate;
end;
Um den Baum erstmal mit den ersten Items zu befüllen
ShowRegInTree(TreeView1, TreeView1.Items.GetFirstNode, '');
und im OnExpanding
Delphi-Quellcode:
var LPath: String;
LNode2: TTreeNode;
begin
AllowExpansion := True;
if (Node.Count = 1) and (Node.Item[0].Text = '\') then
begin
LNode2 := Node;
LPath := LNode2.Text;
while Assigned(LNode2.Parent) do
begin
LNode2 := LNode2.Parent;
LPath := LNode2.Text + '\' + LPath;
end;
ShowRegInTree(TreeView1, Node, LPath);
end;
end;