type
PtrApiObject = ^ApiObjectData;
ApiObjectData = record
Id : Integer;
Guid : String;
ParentFolder : String;
Name : String;
end
AllApiObjectData = array of ApiObjectData;
var
ParentNodes : Array of TTreeNode;
ChildNodes : Array of ApiObjectData;
fd: AllApiObjectData;
Trv : TTreeView;
procedure TFolder.PopulateTreeView();
var
i, p, Counter : Integer;
ParentTn : TTreeNode;
aod : PtrApiObject;
begin
if (ParentNodes <> nil) and ( ChildNodes <> nil) then begin // search for ChildNodes in fd[i].ParentFolder
for p := 0 to Length(ParentNodes) do begin
for i:= 0 to Length(fd)-1 do begin
if ChildNodes[p].Guid = fd[i].ParentFolder then begin
Counter := Length(ParentNodes);
New(aod);
aod^.Guid := fd[i].Guid;
aod^.ParentFolder := fd[i].ParentFolder;
aod^.ObjectType := 'Folder';
aod^.Name := fd[i].Name;
ParentTn := Trv.Items.AddChildObject(ParentNodes[p], fd[i].Name, aod);
SetLength(ParentNodes, Counter+1);
ParentNodes[Counter] := ParentTn;
SetLength(ChildNodes, Counter+1);
ChildNodes[Counter].Guid := fd[i].Guid;
end;
end;
delete(ChildNodes, p, 1); //Syntax is Delete(fromArray, Index, NumberOfItems); Index is zero based.
delete(ParentNodes, p, 1);
if (ParentNodes <> nil) and (ChildNodes <> nil) then begin
PopulateTreeView();
end;
if (ParentNodes = nil) and (ChildNodes = nil) then begin
Exit;
end;
end;
end
else begin
Counter := Length(ParentNodes);
for i:= 0 to Length(fd)-1 do begin
if (fd[i].Guid <> '') and (fd[i].ParentFolder = '') then begin // rootnode
New(aod);
aod^.Guid := fd[i].Guid;
aod^.ParentFolder := fd[i].ParentFolder;
aod^.ObjectType := 'Folder';
aod^.Name := fd[i].Name;
ParentTn := Trv.Items.AddObject(nil, fd[i].Name, aod);
SetLength(ParentNodes, Counter + 1);
ParentNodes[Counter] := ParentTn;
SetLength(ChildNodes, Counter + 1);
ChildNodes[Counter].Guid := fd[Counter].Guid;
break;
end;
end;
if (ParentTn <> nil) then begin
PopulateTreeView();
end;
end;
end;