Zapamiętywanie wybranego itema w TreeView

0

Witam.

Mam pytanie: jak z pomocą plików ini można zapisać i odczytać zaznaczony item treeview?

Próbowałem już kilku sposobów jakie wpadły mi do głowy, ale błędy występowały w czasie odczytywania.

Proszę o pomoc i z góry dziękuję.

0

a czy to musi byc ini...?
bo jesli nie:
kiedys bylo cos takiego jak ListViewSaver czy jakos tak...
powinien sie przydac.

a w ogole to: http://www.torry.net/quicksearchd.php?String=ListView&Title=Yes

//holera, przepraszam... dopiero teraz zauwazylem, ze tam jest treeView a nie ListView... ;]

0

Jednak chciałbym by były to pliki ini, a komponentem był zwykły TreeView.

0

hmmmm.... a co konkretnie chcesz zapisać? wiesz... nie ma problemu chyba zeby zapisa Selected.Text, Selected. - Indexy ikonek, .... banał.... wystarczy przeczytać art o plikach INI....

a jak chcesz też wszystie subitemy to to samo tylko Selectev.getFirstChild, getNextChild... itd....

jak już zapiszesz to z odczytaniem też chyba nie bedziesz miał problemu.... nie wiem... może nie bardzo wiem o co ci chodzi, ale na moje oko to chcesz po prostu zapisać pare "stringów" i "integerów".....

0

nie wiem... znalazlem na jakims niemieckim forum...

procedure TreeToIni(Tree: TTreeView; INI: TIniFile; Section: string); 
var 
  n: integer; 
  MS: TMemoryStream; 
  tTv: TStringList; 
  Msg: string; 
begin 
  tTv := TStringList.Create; 
  MS := TMemoryStream.Create; 
  try 
    Tree.SaveToStream(MS); 
    MS.Position := 0; 
    tTv.LoadFromStream(MS); 
    INI.EraseSection(Section); 
    for n := 0 to tTv.Count - 1 do 
      INI.WriteString(Section, 'Node' + IntToStr(n), StringReplace(tTv[n], #9, 
        '#', [rfReplaceAll])); 
  finally 
    tTv.Free; 
    MS.Free; 
  end; 
end; 

procedure TreeFromIni(Tree: TTreeView; INI: TIniFile; Section: string; 
  Expand: boolean); 
var 
  n: integer; 
  MS: TMemoryStream; 
  tTv: TStringList; 
  Msg: string; 
begin 
  tTv := TStringList.Create; 
  MS := TMemoryStream.Create; 
  try 
    INI.ReadSection(Section, tTv); 
    for n := 0 to tTv.Count - 1 do 
      tTv[n] := StringReplace(INI.ReadString(Section, tTv[n], ''), '#', #9, 
        [rfReplaceAll]); 
    tTv.SaveToStream(MS); 
    MS.Position := 0; 
    Tree.LoadFromStream(MS); 
    if (Expand = True) and (Tree.Items.Count > 0) then 
    begin 
      Tree.Items[0].Expand(True); 
      Tree.Items[0].MakeVisible; 
    end; 
  finally 
    tTv.Free; 
    MS.Free; 
  end; 
end;
0

Ja nie chcę zapisywać całego drzewa do ini, ani ikonek przy wybranym itemie. Chcę aby program zapamiętał który item jest zaznaczony, a po ponownym uruchomieniu programu zaznaczył ten item.

0

....................................................................................................................................
........................................................................................................................................
...................................................................................................................................
..................................................................................................................................

zapisz zobie do pliku INI albo string z nazwą itema, albo integer z indexem - zrób to w OnClick TreeView.....

a potem w onCreate formy
jak zapiszesz stringa to zrob petle króra poleci po itemach i jak trafi na twoj zapisany tekst to TreeView1.Selected := TreeView1.Items[twoj Index]

tak zamo jak zapiszesz Index - tyle ze nie musisz robic petli.....

....... no wez przeczytaj artykul o plikach ini....... jestem prawie pewny ze po tej lekturze dasz rade... ;)

0

Już sobie poradziłem. Może się komuś przyda:

Zapisywanie:

...
INI.WriteInteger('BLABLABLA', 'Blabla', TreeView.Selected.AbsoluteIndex);
...

Odczytywanie:

var iZaznaczony : Integer;
...
    iZaznaczony := INI.ReadInteger('BLABLABLA', 'Blabla', 0);
    TreeView.Select(TreeView.Items.Item[iZaznaczony]);

  //jak nie bedzie widac zaznaczenia, a chcielibyśmy je zobaczyć to mozemy dac jeszcze potem:
   ActiveControl := TreeView;
...

1 użytkowników online, w tym zalogowanych: 0, gości: 1