Hej Erik,
"Erik Vest Zielke" <admin@evz.dk> wrote in message
news:9pkg5m$2eoq$1@news.cybercity.dk...
> Ja, men hvordan gemmer jeg lige manuelt?. Altså hvordan løber jeg alle
items
> og deres subitems igennem? Jeg er heller ikke for god til at arbejde med
> filer, så det må gerne skæres ud i pap.
Ok... men det betyder nok, at dette indlæg kommer til at fylde en del...
Som den mest simple fremgangsmåde vil jeg vise, hvordan du vha. en
TStringList kan gemme og indlæse Items kollektionen fra en TListView
kontrol... koden er ikke specielt pæn, og bestemt ikke særlig robust - og
kræver du performance, ville jeg nok implementere dette vha. Streams... men
det er en anden snak.
Nåh, jeg viser et simpelt eksempel, og så må du selv udvide og ændre efter
behov... eksemplet antager at du har en TListView kontrol kaldt
"ListView"...
Følgende procedure kan gemme alle TListItem's til fil...
procedure Form1.SaveListItemsToFile(const aFileName : string);
var
i, j : integer;
Item : TListItem;
StrList : TStringList;
begin
StrList := TStringList.Create;
try
// Tilføj antallet af elementer til listen
StrList.Add(IntToStr(ListView.Items.Count));
// Tilføj antallet af subitems ( = antal kolonner - 1)
StrList.Add(IntToStr(ListView.Columns.Count - 1));
// Tilføj alle TListItem's til listen
for i := 0 to ListView.Items.Count - 1 do
begin
Item := ListView.Items[i];
// Tilføj Caption for det aktuelle Item
StrList.Add(Item.Caption);
// Tilføj SubItems for det aktuelle item
for j := 0 to Item.SubItems.Count - 1 do
StrList.Add(Item.SubItems[j]);
end;
// Gem listen til fil
StrList.SaveToFile(aFileName);
finally
StrList.Free;
end;
end;
og følgende procedure kan indlæse en fil, gemt med forrige procedure:
procedure TForm1.OpenListItemsFromFile(const aFileName : string);
var
i : integer;
NoItems : integer;
NoSubItems : integer;
StrList : TStringList;
procedure ReadListItem(aLineIndex : integer);
// Denne procedure indlæser ét TListItem fra den givne linie (aLineIndex)
i filen
var
i : integer;
Item : TListItem;
begin
// Tilføj TListItem
Item := ListView.Items.Add;
// Indlæs Caption
Item.Caption := StrList[aLineIndex];
// Indlæs SubItems
for i := 1 to NoSubItems do
Item.SubItems.Add(StrList[aLineIndex + i]);
end;
begin
StrList := TStringList.Create;
try
// Indlæs filen i StrList
StrList.LoadFromFile(aFileName);
// Læs antallet af items
NoItems := StrToInt(StrList[0]);
// Læs antallet af SubItems for hver TListItem
NoSubItems := StrToInt(StrList[1]);
// Indlæs alle TListItems
for i := 0 to NoItems - 1 do
ReadListItem(2 + i * (NoSubItems + 1));
finally
StrList.Free;
end;
end;
men, som sagt er koden ikke særlig robust, og du kan passende indføre en
række checkpunkter for, om den givne fil eksisterer, at den har den rette
længde, at din ListView-kontrol har det korrekte antal kolonner, o.lign.
Håber det var "pap" nok...
Cheers,
Thomas