AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Strings des letzten TreeView Knoten mit allen Children in ein Richedit schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Ajintaro · begonnen am 30. Mai 2014 · letzter Beitrag vom 2. Jun 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#1

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

  Alt 30. Mai 2014, 11:11
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 ?
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

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

  Alt 1. Jun 2014, 23:51
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ß
Volker Zeller
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

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

  Alt 2. Jun 2014, 07:33
Ü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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 2. Jun 2014, 08:28
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 2. Jun 2014, 08:29
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;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

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

  Alt 2. Jun 2014, 10:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 2. Jun 2014, 10:59
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 2. Jun 2014, 11:01
Und *noch* allgemeingültiger wird das nicht:
TCustomRichEdit ... dann könnte es z.B. auch mit den RichEdits anderer Komponentenhersteller funktionieren


Ansonsten können wir auch einfach auf Ajintaro warten und sehen dann, ob er vielleicht doch noch mehr geplant hat, als im Post ersichtlich.
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

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

  Alt 2. Jun 2014, 11:02
Und *noch* allgemeingültiger wird das nicht:
TCustomRichEdit ... dann könnte es z.B. auch mit den RichEdits anderer Komponentenhersteller funktionieren
Yo. Akzeptiert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 2. Jun 2014, 11:18
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?
Wenn es nämlich nur darum geht das Ergebnis in die Zwischenablage zu packen, ...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:10 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