![]() |
Ausgeklappte Treeviewknoten merken und wieder öffnen
Hallo zusammen.
Ich erstelle in meinem Delphiprogramm mit daten aus eienr Datei eine Treeviews Struktur und diese Struktur erstellt sich jedesmal neu wenn sich Daten ändern, nun möchte ich aber, dass wenn sich dieser Baum neu ertsellt, sich die vorher geöffneten Knoten, wenn sie noch exisiteren, wieder öffnen. Dazu hatte ich überlegt den Status mithifle von expand abzufragen und in einbem array zu speichern nur irgendwie weiß ich nciht genau wie ich das hinbekommen soll :\ Ich hoffe mir kann wer weiterhelfen. |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Zitat:
Dann nach dem einlesen Prüfst du ob Text und Index noch gleich sind und setzt den ensprechenden Expand Status |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Wie könnte ich das den speichern, bräuchte ich da nicht ein Mehrdimensionales array? Ich muss ja dann mehr als eine Sache speichern.
|
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Zitat:
Aber hast du schon die Eigenschaft AutoExpand von TTreeView ausgenützt? Einfach eine CheckBox aufs Formular mit folgendem OnClick-Handler:
Delphi-Quellcode:
Ausserdem sollte TTreeview.FullExpand & .FullCollapse über ein Kontextmenue erreichbar sein.
procedure TForm1.CboAutoExpandClick(Sender: TObject);
begin TreeView1.AutoExpand := (Sender as TCheckBox).Checked; end; |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
z.B. mit TList und einem Record aus den 3 Eigenschafften
|
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
wie sieht denn die baumstruktur aus, wieviele levels gibt es oder kann es geben?..
|
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Hallo,
das funktioniert eigentlich nur über den NodeText. Merke Dir den NodeText und suche nach dem sich der Baum neu aufgebaut hat den Node mit dem Text im Baum. Dann kannst Du
Delphi-Quellcode:
aufrufen.
TTreeView.Selected:=Node;
Index merken oder das TTreeNode merken macht keinen Sinn. Denn -> Wenn sich der Baum neu aufgebaut hat ist der Index ungültig (oder rein zufällig passt der Index). Der TTreeNode ist auf jeden Fall verschwunden. Wird ja freigegeben bevor sich der Baum neu aufbaut. |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Vielen Dank für eure Hilfe, habe es nun hinbekommen teilweise mit einem Artikel aus eienr Tippsammlung und den Rest selbst zusammengefummelt, habe es wie folgt gelöst:
Vorab: TWTitelbaum bezeichnet meine TTreeviewkomponente offene ist ein dynamisches Arry vom Typ String Als erstes speichere ich alle offenen Knoten bzw. deren namen in dem Array offene
Delphi-Quellcode:
procedure TForm1.Titelbaumoeffnungmerken;
var i,j,k:Integer; Anzahloffener:Integer; begin k:=0; for i := 0 to TWTitelbaum.Items.Count - 1 do begin If TWTitelbaum.Items[i].Expanded = True then begin Anzahloffener := Anzahloffener + 1; end; end; SetLength(offene, Anzahloffener); for j := 0 to TWTitelbaum.Items.Count - 1 do begin If TWTitelbaum.Items[j].Expanded = True then begin offene[k] := TWTitelbaum.Items[j].Text; k := k + 1; end; end; end; Danach habe ich im Netz eine Suchfunktion gefunden wie man nach dem text von Knoten sucht (swissdelphicenter.ch)
Delphi-Quellcode:
function TForm1.ItemSuche(TV: TTreeView; SucheItem: string): TTreeNode;
var i: Integer; iItem: string; begin if (TV = nil) or (SucheItem = '') then Exit; for i := 0 to TV.Items.Count - 1 do begin iItem := TV.Items[i].Text; if SucheItem = iItem then begin Result := TV.Items[i]; Exit; end else begin Result := nil; end; end; end; Und als letztes eine Funktion die alle gespeicherten Knoten sucht und wenn sie geufnden sind, diese öffnet
Delphi-Quellcode:
Wenn jemand zu der Lösung noch fragen hat ruhig fragen *g* ;)
procedure Tform1.Titelbaumoeffnungherstellen;
var i:Integer; begin for i := 0 to high(offene) do begin If Itemsuche(TWTitelbaum,offene[i]) <> nil then //*Update* Fehler abfangen falls der Knoten nciht mehr existiert Itemsuche(TWTitelbaum,offene[i]).Expand(False); end; end; Vielen Dank für eure Hilfe! |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Also sicher ist das noch nicht da jetzt bei Gleichem Text vieleicht auch Nodes ausgeklappt werden die gar nicth sollen...
Habe mir aber überlegt (weil sich der index doch zu häufig ändert) wenn du dir noch den Text vom ParentNode und das Level des Nodes mit sicherst hast du ne höhere wahrscheinlichkeit das es nur die richtigen trifft. |
Re: Ausgeklappte Treeviewknoten merken und wieder öffnen
Das sist richtig, ahbe daran nciht gedacht weil bei meinem Proggie dass nciht vorkommen kann, dass 2 Knoten denselben text bekommen. Müsste dann jemand der das benötgit sich noch den Code erweitern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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