![]() |
Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Hallo DP !
Ich habe einen TTreeView mit einem Dutzend Einträgen:
Code:
Mit folgendem Code öffne ich das jeweils letze Child und selektiere es:
[+]Mercedes
[-]BMW |-> schwarz |-> breit [-] Ausstattung |-> Zeile 1 |-> Zeile 2
Delphi-Quellcode:
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)
TreeView.TopItem := tn.GetLastChild;
TreeView.Selected := tn.GetLastChild;
Delphi-Quellcode:
Funktioniert einwandfrei. Ich möchte aber nicht nur die Strings von GetLastChild im RichEdit haben, sondern den gesamten letzten Knoten:
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; Marke: BMW Farbe: schwarz Eigenschaft: breit Ausstattung: Zeile 1 Zeile 2 Wie kann ich denn den letzten (root)Knoten markieren anstatt seines lastChild ? |
AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Hallo,
Zitat:
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:
Delphi-Quellcode:
Vielleicht hilft's
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; Gruß |
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:
Als Tipp/Idee.
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; |
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; |
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; |
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: |
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.
|
AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Zitat:
Ansonsten können wir auch einfach auf Ajintaro warten und sehen dann, ob er vielleicht doch noch mehr geplant hat, als im Post ersichtlich. |
AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Zitat:
|
AW: Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz