![]() |
ListView in einen Stream speichern und laden
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hab folgendes vor: Ich will eine ListView in einen Stream (nicht FileStream) speichern und von diesem Stream wieder laden. ich hab mich schon mal ein wenig schlau gemacht und hab auch ein kleines Beispiel-Programm geschrieben (siehe Anhang). Nur leider scheint das Speichern zu gehen, aber nicht das laden. Ich möchte nicht in eine Datei speichern, also kein FileStream. Weiss jemand was ich falsch gemacht habe? Ach ja, die Funktionen um eine Kompopente in einen Stream zu speicher und zu laden hab per DP-Hilfe hier gefunden. |
Re: ListView in einen Stream speichern und laden
Hallo,
denke mal das fehlt:
Delphi-Quellcode:
procedure TForm1.LoadComponentFromStream(Stream: TStream;
Component: TComponent); begin Stream.Position := 0;//<---------- Stream.ReadComponent(Component); end; |
Re: ListView in einen Stream speichern und laden
@helmi: ich denk mal mit readComponent ist der falsche ansatz da auch left und top mit gespeichert wird was du nicht wirklich brauchst. Denk dir doch einfach ein eigenes format aus bzw. speicher einfach die spalten unt zeilen hintereinander mit längenangaben.
|
Re: ListView in einen Stream speichern und laden
Hallo,
danke für eure Antworten. Wie aus dem Test-Programm zu sehen ist, wird über den 1. Button der Name und die Bezeichnung samt ICon einer Datei in die ListView eingefügt. Ich würd nun gerne den ganzen Inhalt der ListView samt Icon in einen Stream oder ähnliches speichern. (Später soll das per ServerSocket an ClientSockets verschickt werden). Wie kann ich dann solche Inhalte mit Icons am besten speichern? |
Re: ListView in einen Stream speichern und laden
Moin Helmi,
ich kann dir nur zu einem Blick auf die ![]() Greetz alcaeus |
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Windows API" nach "VCL-Komponenten und Controls" verschoben.
|
Re: ListView in einen Stream speichern und laden
Hallo,
ich hab mir mal die dpcollection angeschaut - nur leider kann man damit keine Listviews speichern jedenfalls hab ich keine Möglichkeit gefunden |
Re: ListView in einen Stream speichern und laden
Zitat:
Greetz alcaeus |
Re: ListView in einen Stream speichern und laden
Zitat:
|
Re: ListView in einen Stream speichern und laden
Zitat:
|
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 |
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 |
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" |
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 |
Re: ListView in einen Stream speichern und laden
Hallo,
also ich mal folgendes:
Delphi-Quellcode:
Nur der Unterschied ist, dass ich in eine andere ListView lade.
procedure TForm1.FormCreate(Sender: TObject);
begin ListView_Stream := TMemoryStream.Create; iColCount := 1; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(ListView_Stream); end; Also: Ich speichere die ListView1 in einen Stream und lade dann den Inhalt des Streams in die ListView2. Kann da ein Fehler auftreten? |
Re: ListView in einen Stream speichern und laden
Zitat:
Greetz alcaeus |
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!! |
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 |
Re: ListView in einen Stream speichern und laden
Zitat:
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. |
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 22:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz