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.