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/)
-   -   Memo Inhalt in einem Stream abspeichern (https://www.delphipraxis.net/107884-memo-inhalt-einem-stream-abspeichern.html)

Nastarowje 4. Feb 2008 16:05

Re: Memo Inhalt in einem Stream abspeichern
 
Also bei POS 0 fängt der nicht an, da ich vornedran einen String eingelesen habe. Diese Konstellation funktioniert, er hält so auch die Reiehnfolge ein. Sobal ich aber 2 Memos hintereinander habe, dann läd er das 2te Memo mit.

Sobald ich nach einem Memo noch einen String habe, wird dieser nicht mitgelesen.



Hmmmm,

kann doch nicht so schwer sein :?

Apollonius 4. Feb 2008 16:21

Re: Memo Inhalt in einem Stream abspeichern
 
LoadFromStream liest alles bis zum Ende. Gehe doch einfach den selben Weg wie mit den Edits und speichere die Länge.

marabu 4. Feb 2008 16:24

Re: Memo Inhalt in einem Stream abspeichern
 
Hallo Michael,

LoadFromStream() liest von der aktuellen Position bis zum Ende des Streams. Du siehst nicht alles in deinem Memo, weil die internen Funktionen zur String-Verarbeitung beim Auftreten des ersten Zero Byte das Ende des Textes annehmen.

Möchtest du den Umgang mit Streams üben oder geht es wirklich ums Speichern von Adressdaten?

Im ersten Fall speichere wie schon beim Edit-Feld die Länge der Notizen im Stream. Im letzten Fall informiere dich über ein Standardformat, welches auch andere Adressbuchprogramme verstehen - VCARD:

Code:
BEGIN:VCARD
VERSION:2.1
N:Surname;GivenName
FN;QUOTED-PRINTABLE:GivenName Surname
TEL;HOME;VOICE:(06431) 012345
TEL;CELL;VOICE:(0171) 01234567
EMAIL;PREF;INTERNET:mailbox@provider.de
BDAY:1918-12-06
NOTE;QUOTED-PRINTABLE:This=0D=0Ais =0D=0Aa=0D=0Amulti-line=0D=0Anote
END:VCARD
Freundliche Grüße

Nastarowje 4. Feb 2008 16:41

Re: Memo Inhalt in einem Stream abspeichern
 
Eigentlich möchte ich die Streams austesten und alles mögliche üben. Habe sonst immer alles mit Mysql gemacht. Jetzt sind eigene Format dran :-)

Ich will auf alle Fälle ein eigenes Format erstellen.

Wie kann ich die Länge eines Memos bestimmen?

Keldorn 4. Feb 2008 16:49

Re: Memo Inhalt in einem Stream abspeichern
 
Hallo,

ich würde über Treader/Twrioter gehen, wenn du daten in den stream laden/speichern willst. Dort sind schon routinen für strings, integers etc dabei, über irgendwelchen Längenangaben brauchst du dir keinen Kopf zerbrechen.

als Bsp:
Delphi-Quellcode:
procedure TForm1.ButtonSpeichernClick(Sender: TObject);
Var Stream:TFilestream;
begin
  Stream:=TFileStream.Create('D:\TestStream',fmcreate);
  try
    //TWriter objekt erstellen und Daten in den Stream speichern
    with TWriter.create(Stream,1024) do
      try
        WriteString(Memo1.Text);
        WriteString(Edit1.Text);
        WriteInteger(SpinEdit1.Value);
        WriteBoolean(CheckBox1.Checked);
      finally
        free;
      end;
   finally
     Stream.free;
   end;
end;

 
procedure TForm1.ButtonLadenClick(Sender: TObject);
Var Stream:TFilestream;
begin
  Stream:=TFileStream.Create('D:\TestStream',fmOpenRead  or fmShareDenyNone);
  try
    //TReader objekt erstellen und Daten aus den Stream laden
    with TReader.create(Stream,1024) do
      try
        Memo1.Text       := ReadString;
        Edit1.Text       := ReadString;
        SpinEdit1.Value  := ReadInteger;
        CheckBox1.Checked := ReadBoolean;
      finally
        free;
      end;
   finally
     Stream.free;
   end;
end;
Gruß Frank

Nastarowje 4. Feb 2008 18:26

Re: Memo Inhalt in einem Stream abspeichern
 
Das hört sich vielversprechend an,

Wofür brauche ich die 1024 im create des Streams? Ist die Größe des Puffers variabel?




Vielen Dank
Michael

Keldorn 4. Feb 2008 18:33

Re: Memo Inhalt in einem Stream abspeichern
 
Zitat:

Zitat von Nastarowje
Wofür brauche ich die 1024 im create des Streams? Ist die Größe des Puffers variabel?

ich weiß es nich :oops: .

Irgendwo in der DP gabs mal einen Thread zu optimalen Puffergröße, ich hab ihn aber nich wieder gefunden.

Du kannst dir so auch ein komplexen Dateiformat aufbauen, jedes Klasse hat eine saveto/loadfromstream-methode. Das sind bei mir in einem konkretem Fall recht viele. Ich hatte dort mal bissel mit der Puffergröße experimentiert, zeitliche Unterschiede waren zwar messbar, aber vernachlässigbar.

Gruß Frank

Nastarowje 4. Feb 2008 18:36

Re: Memo Inhalt in einem Stream abspeichern
 
Boh das ist ja richtig geil, das funktioniert tadellos.

Wo bekommt man solche Infos her?



Suppi

Ich danke dir

Michael


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

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