Bonjour,
J'ai une fonction qui charge un fichier text avec une arborescence (tree) tab délimiter dans un composent TTreeView,
sous Firemonkey j'utilise TTreeViewItem.

Le fichier text que je charge à ce format.
Example;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
RootA_0
	child_A
		child_AA
		child_AB
			child_ABA
			child_ABB
				child_ABBA
				child_ABBB
				child_ABBC
				child_ABBD
			child_ABC
	child_B
		child_BA
	child_C
		child_CA
	child_D
RootB_0
Pendant la conversion des lignes, les textes à partir de child_ABC ne viennent pas à la bonne position.
Ici je n'arrive pas à faire le bon retour.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
...
...
	child_ABBA
	child_ABBB
	child_ABBC
	child_ABBD
		child_ABC
			child_B
				child_BA
					child_C
					....

Mon probleme est que j'arrive à ajouter des nodes dans l'arborescence enfant,
mais je n'arrive pas a ajouté un node dans arborescence qui devient plus haute (parent).

Voici la fonction que je utilise;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
procedure TForm1.LoadTextFileTree(TreeView: TTreeView; FileName: string);
var
  List: TStringList;
  I, TabCount, CurrentLevel: Integer;
  ParentNode, Node: TTreeViewItem;
  ParentObject: TFMXObject;
 
begin
  List := TStringList.Create;
  try
    List.LoadFromFile(FileName);
    ParentNode := nil;
    CurrentLevel := 0;
    for I := 0 to List.count - 1 do
    begin
      TabCount := CountChar(List[I], #9);
      Node := TTreeViewItem.Create(TreeView);
      Node.Text := List[I].Replace(#9, '');
      Node.Tag := TabCount;
      if (TabCount = 0) or (ParentNode = nil) then
        TreeView.AddObject(Node)
      else if TabCount = CurrentLevel then
        ParentNode.Parent.AddObject(Node)
      else if TabCount > CurrentLevel then
        ParentNode.AddObject(Node)
      else if TabCount < CurrentLevel then
      begin
 
        while (TabCount <= CurrentLevel) and (ParentNode.Tag >= TabCount) do
        begin
 
		// l'erreur d'affichage dois ce passer ici 
 
          ParentObject := ParentNode.Parent;
          ParentNode.Parent := ParentObject;
          dec(CurrentLevel);
        end;
        ParentNode.AddObject(Node)
 
      end;
 
      ParentNode := Node;
      CurrentLevel := TabCount;
    end;
  finally
    List.Free;
  end;
end;
Je vous remercie pour l'aide que vous m'apportez.