/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Gemme TListItem
Fra : Erik Vest Zielke


Dato : 04-10-01 16:44

Er det muligt at gemme alle informationer fra en TListItem i en fil?. Listen
har også SubItems.

--
Erik Vest Zielke
Favstrupvej 146, Haderslev
Tlf: 74566603 - Mobil: 25369412
http://www.evz.dk



 
 
Thomas Rose (04-10-2001)
Kommentar
Fra : Thomas Rose


Dato : 04-10-01 19:24

Hej Erik,

"Erik Vest Zielke" <admin@evz.dk> wrote in message
news:9pi30g$2263$1@news.cybercity.dk...
> Er det muligt at gemme alle informationer fra en TListItem i en fil?.
Listen
> har også SubItems.

så vidt jeg ved findes der ikke en "indbygget" metode til at indlæse eller
gemme TListItem objekter... så det bliver du nødt til selv gøre "manuelt".
Hvis du kun ønsker at gemme Caption og Subitems for dine items kan du blot
anvende en tekst-baseret fil, men skal du også kunne gemme et associeret
objekt (TListItem.Data) kan det blive mere omstændigt.

Cheers,
Thomas



Erik Vest Zielke (05-10-2001)
Kommentar
Fra : Erik Vest Zielke


Dato : 05-10-01 15:33

"Thomas Rose" <trose@get2net.dk> skrev i en meddelelse
news:3bbca928$0$42011$edfadb0f@dspool01.news.tele.dk...
> Hej Erik,
>
> så vidt jeg ved findes der ikke en "indbygget" metode til at indlæse eller
> gemme TListItem objekter... så det bliver du nødt til selv gøre "manuelt".
> Hvis du kun ønsker at gemme Caption og Subitems for dine items kan du blot
> anvende en tekst-baseret fil, men skal du også kunne gemme et associeret
> objekt (TListItem.Data) kan det blive mere omstændigt.
>
> Cheers,
> Thomas
>
>

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.

--
Erik Vest Zielke
Favstrupvej 146, Haderslev
Tlf: 74566603 - Mobil: 25369412
http://www.evz.dk



Thomas Rose (06-10-2001)
Kommentar
Fra : Thomas Rose


Dato : 06-10-01 10:31

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



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste