Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: In Stream schreiben und lesen ?

  Alt 25. Jun 2008, 13:54
Mein Vorschlag (ungetestet) wäre wie folgt:
Du baust dir deinen Stream aus mehreren einzelnen Streams (welche den einzelnen Icons entsprechen) zusammen und speicherst vorher immer noch die Länge des folgenden Icons.

Delphi-Quellcode:
var c:cardinal;
    tempStream:TMemorytsream;
begin
  Stream:= TMemoryStream.Create;
  tempStream:=TMemorystream.Create;
  try
    frmMain.CDS_Laden(cdsLand, '\Land.dat');

    for i:=0 to 240 do
      begin
        frmMain.ilFlaggen.GetIcon(i, icBild);
        // SaveImageToStream
        tempstream.clear;
        icBild.SaveToStream(tempStream);
        c:=tempstream.size;
        stream.write(c,4); //Größe des IconStreams speichern
        tempstream.seek(0,sofrombeginnig);
        stream.copyfrom(tempstream,c); //IconStream kopieren / anhängen
        
        cdsLand.Insert;
          cdsLand['sLand'] := cbLand.Items[i]; // LandName eintragen
          // LoadBlobFieldFromStream
          TBlobField(cdsLand.FieldByName('blbFahne')).LoadFromStream(Stream); // Icon eintragen
        cdsLand.Post;
      end;
  finally
    Stream.free;
    tempstream.free;
  end;

end;
 


begin
  Stream:= TMemoryStream.Create;
  tempStream:=TMemorystream.Create;

  try
     
    //warum hier keine Schleife?
  
    // DatenLesen
    TBlobField(cdsLand.FieldByName('blbFahne')).SaveToStream(Stream);
    Stream.seek(0,sofrombeginnig);
    Stream.read(c,4); //Länge des ersten/nächsten Icons lesen
    tempstream.clear;
    tempstream.copyfrom(stream,c); //Icon rauskopieren
    
    icBild.LoadFromStream(tempStream);
    Image1.Picture.Assign(icBild);
  finally
    Stream.Free;
    tempstream.free;
  end;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat