Why does this code not work?
I am writing an application that has ability to save and load its own files and need to know how to stream objects to a file using FileStream.
procedure TForm1.btnSaveClick(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('c:\temp\a.my', fmCreate); try fs.WriteBuffer(Image1.Picture.Graphic, SizeOf(TGraphic)); finally fs.Free; end; ShowMessage('ok'); Image1.Picture.Graphic := nil; end; procedure TForm1.btnLoadClick(Sender: TObject); var fs: TFileStream; g: TGraphic; begin fs := TFileStream.Create('c:\temp\a.my', fmOpenRead); try fs.ReadBuffer(g, SizeOf(TGraphic)); Image1.Picture.Graphic := g; finally fs.Free; end; ShowMessage('ok'); end; EDIT 1: Found the way to do it, but need some more help:
procedure TForm1.btnSaveClick(Sender: TObject); var fs: TFileStream; s: TMemoryStream; buf: TBytes; begin fs := TFileStream.Create('c:\temp\a.my', fmCreate); s := TMemoryStream.Create; try Image1.Picture.Graphic.SaveToStream(s); SetLength(buf, s.Size); s.Position := 0; s.ReadBuffer(buf[0], s.Size); //fs.WriteBuffer(, SizeOf(Integer)); <-here how do I save an integer which represents the size of the buffer? (so that when reading back i read this first.) fs.WriteBuffer(buf[0], s.Size); finally s.Free; fs.Free; end; ShowMessage('ok'); Image1.Picture.Graphic := nil; end;