Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView in einen Stream speichern und laden (https://www.delphipraxis.net/44281-listview-einen-stream-speichern-und-laden.html)

Helmi 17. Apr 2005 10:55

Re: ListView in einen Stream speichern und laden
 
mmh
gute Frage

ich stell das jetzt einfach mal so frei in den Raum - ich weiss nicht was besser ist, die Imagelist mitspeichern oder extra übertragen

alcaeus 17. Apr 2005 11:08

Re: ListView in einen Stream speichern und laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe schnell die App zusammengecodet. Sieh sie dir an, teste sie durch. Die Icons werden noch nicht beruecksichtigt, das ist aber eine Kleinigkeit wenn du ein bisschen reindenkst ;)
Ich speichere zur Zeit noch in ein File, aber die TmxJsCollection bietet auch die Moeglichkeit in einen Stream zu speichern. Einfach SaveToStream/LoadFromStream anstatt SaveToFile/LoadFromFile verwenden.
Ich habe den Code ein wenig dokumentiert, ich hoffe du steigst durch, ansonsten frag einfach hier.

Greetz
alcaeus

Helmi 17. Apr 2005 12:08

Re: ListView in einen Stream speichern und laden
 
Hallo,

danke für dein beispiel-programm :-)

Ich hab das mal so übernommen - nur eine frage hätt ich:
Wie speichere ich in einen Stream?
Ich hab mal TStream und TMemoryStream probiert

aber sobald ich laden will bekomm ich nen fehler "Stream-Lesefehler"

alcaeus 17. Apr 2005 12:12

Re: ListView in einen Stream speichern und laden
 
Hast du den Stream erzeugt?
Probier mal, den Stream zu erzeugen (TMemoryStream), und in den Stream zu schreiben. Anschliessend saeuberst du die ListView (Items.Clear), und ladest die Collection wieder aus dem Stream. Wichtig ist, den Stream nicht freizugeben, sonst sind die Daten futsch ;)

Greetz
alcaeus

Helmi 17. Apr 2005 12:19

Re: ListView in einen Stream speichern und laden
 
Hallo,

also ich mal folgendes:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView_Stream := TMemoryStream.Create;
  iColCount := 1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(ListView_Stream);
end;
Nur der Unterschied ist, dass ich in eine andere ListView lade.

Also: Ich speichere die ListView1 in einen Stream und lade dann den Inhalt des Streams in die ListView2.

Kann da ein Fehler auftreten?

alcaeus 17. Apr 2005 12:21

Re: ListView in einen Stream speichern und laden
 
Zitat:

Zitat von Helmi
Also: Ich speichere die ListView1 in einen Stream und lade dann den Inhalt des Streams in die ListView2.

Kann da ein Fehler auftreten?

Eigentlich nicht. hast du auch Stream.Position auf 0 gesetzt? Evtl. koennte das der Fehler sein...

Greetz
alcaeus

Helmi 17. Apr 2005 12:28

Re: ListView in einen Stream speichern und laden
 
Hallo,

das war der Fehler.

Ich muss, bevor der Stream geladen wird, Stream.Position auf 0 setzen.

Interessanterweise wird das Icon, dass ich ja in der ersten Spalte habe, mitgespeichert.

Danke für deine Hilfe!!

Helmi 17. Apr 2005 15:30

Re: ListView in einen Stream speichern und laden
 
Jetzt hätt ich aber trotzdem nochmal eine Frage:

Wie kann ich das Icon jeder Zeile mit in den Stream speichern?

Ich dachte das würd funktionieren, hatte aber einen Fehler bei mir im Test-Projekt

Robert_G 17. Apr 2005 15:38

Re: ListView in einen Stream speichern und laden
 
Zitat:

Zitat von Helmi
Jetzt hätt ich aber trotzdem nochmal eine Frage:

Wie kann ich das Icon jeder Zeile mit in den Stream speichern?

Ich dachte das würd funktionieren, hatte aber einen Fehler bei mir im Test-Projekt

Sorry, das ich das mal so direkt sagen muss...
Aber Alki war einfach dumm, als er dir das Ganze Rundumsorglos-Paket geliefert hat. Es war absolut klar, dass du nun wegen jeder Kleinigkeit sofort nachfragst bevor du nachdenkst.
Hat es dich denn überhaupt nicht interessiert, was die dpCollection ist/macht? Warum nur SubItems und Caption in der Datei stehen?

Hättest du das wirklich gemacht, wäre dir aufgefallen, dass die collectionItem-Ableitung nur 2 Published Properties hat.
Die zufälligerweise genauso heißen, wie die einzigen 2 Werte eines Items, die in der Datei landen.
Wenn dir jetzt kein Licht aufgeht, wie du auch noch den ItemIndex da reinkriegst, ist dir wohl nicht mehr zu helfen.

Wenn ich etwas offensiv klang, war das kein Zufall. ;)
Es gibt nur wenige Dinge, bei denen ich mich aufregen kann. Desinteressse für seinen Job ist eines davon.

alcaeus 17. Apr 2005 15:42

Re: ListView in einen Stream speichern und laden
 
Nun, da musst du dir ueberlegen, ob du die Images direkt speichern willst, oder nur die Indize der Images. Bei letzterem reicht eine published Integer-property, wenn du das Image selbst speichern willst, musst du ein TBitmap oder so zur Collection hinzufuegen, und das Bitmap aus der Imagelist holen. Beim Laden schreibst du es in die Imagelist. Nachteil: du hast Images doppelt und dreifach, ausser du fuegst eine entsprechende Pruefung ein.
Alternativ kannst du die Collection zweiteilen: eine globale Collection, welche 2 Subcollections hat: eine fuer die ListView-Items, eine fuer die Imagelist.

@Robert: ja, das Beispiel ist zu umfangreich geraten, da hast du Recht.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 2 von 2     12   

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