Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTreeView - Items mit SubItems anlegen (https://www.delphipraxis.net/144510-ttreeview-items-mit-subitems-anlegen.html)

Andreas L. 9. Dez 2009 13:49


TTreeView - Items mit SubItems anlegen
 
Hi,
ich möchte in einer TreeView folgende Struktur darstellen:
Code:
-Item1
--SubItem1
--SubItem2
-Item2
--SubItem1
--SubItem2
etc...
Mein aktueller Code sieht so aus:
Delphi-Quellcode:
procedure TfrmWizard.RefreshFileList;
var
  iPath, iFile: Integer;
begin
  treeFiles.Items.BeginUpdate;
  try
    treeFiles.Items.Clear;
    for iPath := 0 to damData.Config.Paths.Count - 1 do
    begin
      treeFiles.Items.AddFirst(nil, '');
      treeFiles.Items[iPath].Text := damData.Config.Paths[iPath].Path;
      treeFiles.Items[iPath].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path);

      for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do
      begin
        treeFiles.Items.AddChild(treeFiles.Items[iPath], '');
        treeFiles.Items[iPath].Item[iFile].Text := damData.Config.Paths[iPath].Files[iFile].FileName;
        treeFiles.Items[iPath].Item[iFile].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName);
      end;
    end;
  finally
    treeFiles.Items.EndUpdate;
  end;
end;
Leider wird mir folgendes in der TreeView angezeigt:
Code:
-
-
-
-
-
-
-
-
...
-Name vom letzten Item
--Name erstes SubItem
--Name zweites SubItem
--
--
--
Es werden also die Haupteinträge angelegt, jedoch nur der letzte beschriftet. Auch ist der letzte Eintrag der einzige der SubItems hat und zwar zuviele (deshalb erhalten auch nur die ersten SubItems eine Beschriftung).

Anstatt AddFirst habe ich auch schon Add und AddChild versucht. Bei letzteren erhalte ich so eine Struktur:
Code:
-Item1
--SubItem1
--SubItem2
--Item2
---SubItem1
etc...
Die Delphi-Hilfe hilft mir auch nicht. Wo liegt der Fehler?

Jakson 9. Dez 2009 14:08

Re: TTreeView - Items mit SubItems anlegen
 
Hi

Wenn du einen Eintrag erstellst bekommst du ein Item zurück.
Dieses kannst du dann an die Funktion AddChild übergeben und gut.
Solltest du ein ImageIndex auch noch vergeben kommst du eh nicht darum herum.

Delphi-Quellcode:
var Item1,
    Item2  : TTreeNode;
begin
 Item1            := TreeView1.Items.AddChild(NIL,'Item1');
 Item1.ImageIndex := 1;
 Item2            := TreeView1.Items.AddChild(Item1,'SubItem1');
 Item2.ImageIndex := 2;
end;

Jakson 9. Dez 2009 14:13

Re: TTreeView - Items mit SubItems anlegen
 
Auf denen Code bezogen dann so

Delphi-Quellcode:
procedure TfrmWizard.RefreshFileList;
var iPath,
    iFile : Integer;
    Item1,
    Item2  : TTreeNode;
begin
  treeFiles.Items.BeginUpdate;
  try
    treeFiles.Items.Clear;
    for iPath := 0 to damData.Config.Paths.Count - 1 do
     begin
      Item1            := treeFiles.Items.AddChild(nil, '');
      Item1.Text      := damData.Config.Paths[iPath].Path;
      Item1.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path);

      for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do
       begin
        Item2            := treeFiles.Items.AddChild(Item1, '');
        Item2.Text      := damData.Config.Paths[iPath].Files[iFile].FileName;
        Item2.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName);
       end;
     end;
  finally
    treeFiles.Items.EndUpdate;
  end;
end;

Andreas L. 9. Dez 2009 14:18

Re: TTreeView - Items mit SubItems anlegen
 
Dann war mein Fehler also das ich versucht habe mit treeFiles.Items[iPath] auf das neu erstelle Node zu zugreifen. :wall:

Dein Code funktioniert. Vielen Dank :thumb:

Jakson 9. Dez 2009 14:37

Re: TTreeView - Items mit SubItems anlegen
 
Prinzipiell sollte dein Code auch funktionieren.

Meiner Menung nach liegt der Fehler in "treeFiles.Items.AddFirst(nil, '');"
Damit stellst du den zweiten Node (B) vor den ersten (A) schreibst die Daten aber wieder an die zweite stelle (A).

Erstes "AddFirst"
Delphi-Quellcode:
+ NodeA[0]
Erstes unterelement "AddChild(Imtes[0]"
Delphi-Quellcode:
+ NodeA[0]
  + NodeA.1[0]
zweites unterelement "AddChild(Imtes[0]"
Delphi-Quellcode:
+ NodeA[0]
  + NodeA.1[0]
  + NodeA.2[1]
Zweites "AddFirst"
Delphi-Quellcode:
+ NodeB[0]    <------- Bleibt leer
+ NodeA[1]    <------- Überschreiben
  + NodeA.1[0]
  + NodeA.2[1]
Wenn du jetzt die Daten in den Node[1] schreibst überschreibst du den ersten (in zwischen nach unten geschobenen) Knoten!

Fügst du nun wieder ein unterelement hinzu so überschreibst du wieder die alten Daten.

Delphi-Quellcode:
+ NodeB[0]    
+ NodeA[1]    
  + NodeA.1[0] <------- Überschreiben
  + NodeA.2[1] <------- Überschreiben
  + NodeB.1[0] <------- Bleibt leer
  + NodeB.2[1] <------- Bleibt leer


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz