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ę.
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ę.
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... ;]
Jednak chciałbym by były to pliki ini, a komponentem był zwykły TreeView.
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".....
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;
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.
....................................................................................................................................
........................................................................................................................................
...................................................................................................................................
..................................................................................................................................
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... ;)
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;
...