AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ausgeklappte Treeviewknoten merken und wieder öffnen
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgeklappte Treeviewknoten merken und wieder öffnen

Ein Thema von Mysterious Spirit · begonnen am 2. Dez 2004 · letzter Beitrag vom 2. Dez 2004
Antwort Antwort
Mysterious Spirit

Registriert seit: 26. Okt 2004
29 Beiträge
 
#1

Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 10:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 10:51
Zitat von Mysterious Spirit:
Hallo zusammen.
die vorher geöffneten Knoten, wenn sie noch exisiteren, wieder öffnen.
Am besten du speicherst dir den Index, den Text und den Expand Status von dem Knoten.

Dann nach dem einlesen Prüfst du ob Text und Index noch gleich sind und setzt den ensprechenden Expand Status
  Mit Zitat antworten Zitat
Mysterious Spirit

Registriert seit: 26. Okt 2004
29 Beiträge
 
#3

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 10:56
Wie könnte ich das den speichern, bräuchte ich da nicht ein Mehrdimensionales array? Ich muss ja dann mehr als eine Sache speichern.
  Mit Zitat antworten Zitat
shmia

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

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 10:58
Zitat von Mysterious Spirit:
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.
Tja, nicht so einfach.
Aber hast du schon die Eigenschaft AutoExpand von TTreeView ausgenützt?
Einfach eine CheckBox aufs Formular mit folgendem OnClick-Handler:
Delphi-Quellcode:
procedure TForm1.CboAutoExpandClick(Sender: TObject);
begin
   TreeView1.AutoExpand := (Sender as TCheckBox).Checked;
end;
Ausserdem sollte TTreeview.FullExpand & .FullCollapse über ein Kontextmenue erreichbar sein.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 11:00
z.B. mit TList und einem Record aus den 3 Eigenschafften
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 11:04
wie sieht denn die baumstruktur aus, wieviele levels gibt es oder kann es geben?..
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 11:23
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
TTreeView.Selected:=Node; aufrufen.
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Mysterious Spirit

Registriert seit: 26. Okt 2004
29 Beiträge
 
#8

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 12:51
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:
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;
Wenn jemand zu der Lösung noch fragen hat ruhig fragen *g*
Vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 12:58
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.
  Mit Zitat antworten Zitat
Mysterious Spirit

Registriert seit: 26. Okt 2004
29 Beiträge
 
#10

Re: Ausgeklappte Treeviewknoten merken und wieder öffnen

  Alt 2. Dez 2004, 13:01
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.
  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 11:17 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