AGB  ·  Datenschutz  ·  Impressum  







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

TreeView in Memo abbilden!

Ein Thema von cherry · begonnen am 30. Jan 2009 · letzter Beitrag vom 30. Jan 2009
Antwort Antwort
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

TreeView in Memo abbilden!

  Alt 30. Jan 2009, 09:46
Die Funktion bildet eine ganze TTreeView in einem TMemo ab, oder nur die gewünschte Anzahl Ebenen.
Der Aufruf ist dementsprechend einfach:

Delphi-Quellcode:
// Stellt die ersten 3 Ebenen des TreeView1 in Memo1 dar.
ForceTreeToMemo(TreeView1, Memo1.Lines, 3);
Der Parameter "Layers" ist optional. Wird er nicht mitgegeben, oder -1 übergeben, dann
wird die gesamte TreeView mit sämtlichen Unterknoten dargestellt.

Delphi-Quellcode:
procedure TForm1.ForceTreeToList(Tree:TTreeView; Lines:TStrings; Layers:Integer=-1);
const
  // Verschiedene Zeichen für die Darstellung definieren
  strSpace1 : String = '| ';
  strSpace2 : String = ' + - ';
  strSpace3 : String = ' ';
  strSpace4 : String = ' - ';
procedure ForceChilds(fNode:TTreeNode; strSpace:String; fLayer:Integer);
var
  fChild:TTreeNode;
begin
  // Für jeden Knoten und dessen Unterknoten wird ein Eintrag in
  // die Liste geschrieben. Um dies rekursiv zu machen, ruft sich die
  // Funktion selber wieder auf wenn ein weiterer Knoten mit Unterknoten
  // gefunden wurde. Aber immer nur solange bis die Anzahl Layers erreicht
  // wurde.
  if (assigned(fNode)) and ((fLayer < Layers) or (Layers = -1)) then
  begin
    Inc(fLayer);
    if (fNode.HasChildren) then
    begin
      // Schreibt in die Liste mit dem entsprechenden "grafischen" prefix
      Lines.Add(strSpace + strSpace2 + fNode.Text);
      strSpace := strSpace + strSpace3;
      fChild:=fNode.getFirstChild;
      repeat
        ForceChilds(fChild,strSpace,fLayer);
        fChild:=fChild.getNextSibling;
      until not assigned(fChild);
    end
    else
      // Schreibt in die Liste mit dem entsprechenden "grafischen" prefix
      Lines.Add(strSpace + strSpace4 + fNode.Text);
  end;
end;
var
  Node: TTreeNode;
begin
  // Für die Hauptknoten wird jeweils die Funktion ForceChilds aufgerufen.
  with tree.Items do
  begin
    BeginUpdate;
    Node := GetFirstNode;
    while Assigned(node) do
    begin
      ForceChilds(Node,strSpace1,0);
      Node := Node.getNextSibling;
    end;
    EndUpdate;
  end;
end;
Viel Spass damit!

Liebe Grüsse #enemyleft

[EDIT]Habe den Funktionsparameter Memo in TStrings geändert. Danke shmia[/EDIT]
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TreeView in Memo abbilden!

  Alt 30. Jan 2009, 11:05
Ersetze doch noch den Parameter Memo:TMemo durch Lines:TStrings.
Durch diese Verallgemeinerung kann man z.B. Folgendes tun:
Delphi-Quellcode:
var
  liste : TStrings;
begin
  liste := TStringList.Create;
  try
    ForceTreeToMemo(TreeView1, liste, 5);
    liste.SaveToFile(dateiname_treeview); // Speichern ohne Umweg über TMemo
  finally
    liste.Free;
  end;
end;
Wenn man ein TreeView in ein Memo abbilden möchte, dann wäre der Aufruf:
ForceTreeToMemo(TreeView1, Memo1.Lines, 3);
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:36 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