AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeiten mit TTreeView

Ein Thema von Martin W · begonnen am 7. Jan 2016 · letzter Beitrag vom 8. Jan 2016
 
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#1

Arbeiten mit TTreeView

  Alt 7. Jan 2016, 17:02
Hi,

frohes neues Jahr

Folgende Problemstellung: Ich habe eine Klassse TTestObjects:
Delphi-Quellcode:
type TTestObjects = class(TObject)
public
  // z.B. "Kamel" oder "Auto" oder "Haus"
  ItemCaption: string;
  // Semikolon getrennte Liste, z.B. "Objekt;Mensch;Maschine"
  Tags: string;
end;

var
  FObjects: TList<TTestObjects>;
Diese Klasse ist über FObjects ansprechbar.

Ich möchte nun alle Objekte, gruppiert nach den einzelnen Tags, in einem TTreeView anzeigen lassen. Hat also ein Objekt 3 Tags, erscheint es unter 3 Nodes im TTreeView.
Delphi-Quellcode:
procedure UpdateList;
var
  i, k, l: integer;

  varItemAdded: boolean;
  varStringArray: TStringDynArray;
  varTreeNodeItem: TTreeNode;
begin
  
  TreeView.Items.BeginUpdate;
  
  TreeView.Items.Clear;

  for i := 0 to FObjects.Count-1 do
    begin
      
      // Wurde ein Tag gesetzt?
      if (trim(FObjects[i].tags) <> '') then
        begin
          varStringArray := SplitString(FObjects[i].tags, ';');
        end
      else
        begin
          setlength(varStringArray, 1);
          varStringArray[0] := 'Untagged Objects';
        end;

      for k := 0 to length(varStringArray)-1 do
        begin
          
          // Leere Tags ignorieren
          if varStringArray[k] = 'then Continue;
          
          varItemAdded := False;
          
          for l := 0 to TreeView.Items.Count -1 do
            begin
            
              if TreeView.Items[l].Text = varStringArray[k] then
                begin
                  // Objekt zu bereits existierendem Tag hinzufügen
                  TreeView.Items.AddChild(TreeView.Items[l], FObjects[i].ItemCaption);
                  varItemAdded := True;
                  Break;
                end;
                
            end;

          if not varItemAdded then
            begin
              // Neues Tag anlegen und Objekt hinzufügen
              varTreeNodeItem := TreeView.Items.Add(nil, varStringArray[k]);
              TreeView.Items.AddChild(varTreeNodeItem, FObjects[i].ItemCaption);
            end;
      
        end;
        
    end;

  TreeView.Items.EndUpdate;

end;
Der Code selbst funktioniert. Sobald die Anzahl der Objekte jedoch größer werden, gibt es Probleme mit der Performance. Wie kann man den Code optimieren?

Weitere Frage: Wie kann man verhindern, dass sich das TTreeView nach jeder Änderung zusammenklappt?

Danke & Viele Grüße

Geändert von Martin W ( 7. Jan 2016 um 17:06 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz