Delphi-PRAXiS
Seite 1 von 2  1 2   

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 Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben (https://www.delphipraxis.net/180569-strings-des-letzten-treeview-knoten-mit-allen-children-ein-richedit-schreiben.html)

Ajintaro 30. Mai 2014 10:11

Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Hallo DP !

Ich habe einen TTreeView mit einem Dutzend Einträgen:

Code:
[+]Mercedes
[-]BMW
 |-> schwarz
 |-> breit
 [-] Ausstattung
  |-> Zeile 1
  |-> Zeile 2
Mit folgendem Code öffne ich das jeweils letze Child und selektiere es:

Delphi-Quellcode:
TreeView.TopItem := tn.GetLastChild;
TreeView.Selected := tn.GetLastChild;
Mit diesem Code schreibe ich den Inhalt der "Ausstattung" in ein RichEdit (um es dann in die Zwischenablage aufzunehmen und in einer anderen Anwendung einzufügen)

Delphi-Quellcode:
procedure TFdetail.copy1Click(Sender: TObject);
var
  i: integer;
  tn:TTreeNode;
begin
 RichEdit1.Clear;
 with TreeView.Selected do
     for i := 0 to Pred(Count) do
     begin
       RichEdit1.Lines.Add(Item[i].Text);
     end;
  Richedit1.SelectAll;
  RichEdit1.CopyToClipboard;
end;
Funktioniert einwandfrei. Ich möchte aber nicht nur die Strings von GetLastChild im RichEdit haben, sondern den gesamten letzten Knoten:

Marke: BMW
Farbe: schwarz
Eigenschaft: breit
Ausstattung:
Zeile 1
Zeile 2

Wie kann ich denn den letzten (root)Knoten markieren anstatt seines lastChild ?

Volker Z. 1. Jun 2014 22:51

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Hallo,

Zitat:

Wie kann ich denn den letzten (root)Knoten markieren anstatt seines lastChild ?
Wenn es wirklich der letzte Wurzelknoten sein soll, vielleicht so?
Delphi-Quellcode:
function GetLastRootNode (const Treeview : TTreeView) : TTreeNode;
var
  n : TTreeNode;
begin
  Result := nil;
  if Assigned (Treeview) then
    begin
      Result := Treeview.Items.GetFirstNode;
      if Assigned (Result) then
        begin
          n := Result.getNextSibling;
          while Assigned (n) do
            begin
              Result := n;
              n     := n.getNextSibling
            end
        end
    end
end;
Zitat:

[...] Ich möchte aber nicht nur die Strings von GetLastChild im RichEdit haben, sondern den gesamten letzten Knoten
Dann so:
Delphi-Quellcode:
procedure TFdetail.NodesToRichedit (Node : TTreeNode);
begin
  while Assigned (Node) do
    begin
      RichEdit1.Lines.Add (Node.Text);
      NodesToRichedit (Node.getFirstChild);
      Node := Node.getNextSibling
    end
end;

procedure TFdetail.copy1Click(Sender: TObject);
var
  n : TTreeNode;
begin
  RichEdit1.Lines.Clear;
  // Vielleicht noch die Zwischenablage platt machen Clipboard.Clear;

  n := GetLastRootNode (Treeview1);
  if Assigned (n) then
    begin
      RichEdit1.Lines.Add (n.Text);
      NodesToRichedit (n.getFirstChild);
      Richedit1.SelectAll;
      RichEdit1.CopyToClipboard
    end
end;
Vielleicht hilft's

Gruß

Dejan Vu 2. Jun 2014 06:33

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Übergib mal noch 'RichEdit' an 'NodesToRichEdit', dann ist das allgemeingültiger.
Delphi-Quellcode:
procedure TFdetail.NodesToRichedit (richEdit : TRichEdit; Node : TTreeNode);
begin
  while Assigned (Node) do
    begin
      richEdit.Lines.Add (Node.Text);
      NodesToRichedit (richEdit, Node.getFirstChild);
      Node := Node.getNextSibling
    end
end;
Als Tipp/Idee.

DeddyH 2. Jun 2014 07:28

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Mit einem TStrings-Parameter wäre das aber noch allgemeingültiger.
Delphi-Quellcode:
procedure TFdetail.NodesToList(AList: TStrings; Node : TTreeNode);
begin
  while Assigned (Node) do
    begin
      AList.Add (Node.Text);
      NodesToList(AList, Node.getFirstChild);
      Node := Node.getNextSibling;
    end
end;

jaenicke 2. Jun 2014 07:29

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Besser ist es gleich nur Richedit.Lines als Parameter vom Typ TStrings zu übergeben. Dann kann man da auch eine TStringList reinpacken.

Wenn es nämlich nur darum geht das Ergebnis in die Zwischenablage zu packen, macht es absolut keinen Sinn dafür ein TRichEdit als visuelle Komponente zu benutzen. Das ist ausschließlich zur Eingabe und Anzeige da, nicht für die Datenverarbeitung...

Also:
Delphi-Quellcode:
procedure TFDetail.NodesToStrings(const ATarget: TStrings; const ANode: TTreeNode);
var
  CurrentNode: TTreeNode;
begin
  CurrentNode := ANode;
  while Assigned(CurrentNode) do
  begin
    ATarget.Add(CurrentNode.Text);
    NodesToStrings(ATarget, CurrentNode.getFirstChild);
    CurrentNode := CurrentNode.getNextSibling;
  end
end;

procedure TFDetail.copy1Click(Sender: TObject);
var
  LastRootNode: TTreeNode;
  TargetStringList: TStringList;
begin
  LastRootNode := GetLastRootNode(TreeView1);
  if Assigned(LastRootNode) then
  begin
    TargetStringList := TStringList.Create;
    try
      TargetStringList.Add(LastRootNode.Text);
      NodesToStrings(TargetStringList, LastRootNode.getFirstChild);
      Clipboard.AsText := TargetStringList.Text;
    finally
      TargetStringList.Free;
    end;
  end
end;

Dejan Vu 2. Jun 2014 09:56

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Also ich weiß nicht... Eine Methode 'NodesToRichEdit' in 'NodesToString' umbenennen? Was ist denn, wenn die Intention die war, hier noch Formatierungen reinzupacken? Das geht bekanntermaßen mit TStrings nicht so gut (außer, man schreibt Raw-RTF rein).

Es wird ja vom Fragesteller nicht umsonst TRichEdit verwendet (und nicht TMemo).

Und *noch* allgemeingültiger wird das nicht: Das ist eine Methode um Baumknoten in ein *RichEdit* zu packen. Abhängigkeiten: Baum(knoten) + RichEdit. Wenn ich dann zwei Parameter vom Typ 'RichEdit' und 'Baum(Knoten)' habe. Wo sind denn da noch innere Abhängigkeiten? :wall:

DeddyH 2. Jun 2014 09:59

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Schau Dir doch den Ausgangscode einfach an, da wird nichts formatiert, von daher kann man getrost auf TStrings umstellen, und das ist sehr wohl allgemeingültiger.

himitsu 2. Jun 2014 10:01

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Zitat:

Zitat von Dejan Vu (Beitrag 1260992)
Und *noch* allgemeingültiger wird das nicht:

TCustomRichEdit ... dann könnte es z.B. auch mit den RichEdits anderer Komponentenhersteller funktionieren :angel:


Ansonsten können wir auch einfach auf Ajintaro warten und sehen dann, ob er vielleicht doch noch mehr geplant hat, als im Post ersichtlich.

Dejan Vu 2. Jun 2014 10:02

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Zitat:

Zitat von himitsu (Beitrag 1260995)
Zitat:

Zitat von Dejan Vu (Beitrag 1260992)
Und *noch* allgemeingültiger wird das nicht:

TCustomRichEdit ... dann könnte es z.B. auch mit den RichEdits anderer Komponentenhersteller funktionieren :angel:

Yo. Akzeptiert. :thumb:

jaenicke 2. Jun 2014 10:18

AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
 
Zitat:

Zitat von Dejan Vu (Beitrag 1260992)
Also ich weiß nicht... Eine Methode 'NodesToRichEdit' in 'NodesToString' umbenennen? Was ist denn, wenn die Intention die war, hier noch Formatierungen reinzupacken?

Was an dem konditionalen Teil meines Posts war denn missverständlich? :roll:
Zitat:

Zitat von jaenicke (Beitrag 1260978)
Wenn es nämlich nur darum geht das Ergebnis in die Zwischenablage zu packen, ...



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Seite 1 von 2  1 2   

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