假设有这么一个类:
  TTmp=class
  private
    FBackBmp:TBitmap;
    FCurBMP:TBitmap;
    xPos:integer;
    yPos:integer;
  public
    procedure SaveToFile(const Filename:string);
    procedure LoadFromFile(const FileName:string);
  end;现在,FBackBmp已经载入一张图片a,FCurBMP载入一张图片b,xpos=10,yPos=50;
现在调用SaveToFile方法,把这个类保存起来,假设存为 abc.dat 这个文件。下次运行的时候,调用LoadFromFile('abc.dat')方法,那么,FBackBmp的图片应该是a,而FCurBMP的图片是b,xpos=10,yPos=50.
请问大家怎么组织这个abc.dat的结构,如何这样保存呢?
thanks.

解决方案 »

  1.   

    FBackBmp: TBitmap = {用十六进制编码表示图片a的数据}
    FCurBmp: TBitmp = {用十六进制编码表示图片b的数据}
    xPos = 10
    yPos = 50十六进制编码: 一个字节使用 2 个 0..F 字母表示.
    这样数据肯定不会丢失, 也易于读取.
      

  2.   

    用 WriteComponentResFile ReadComponentResFile 可能比较好做
      

  3.   

    //演示...
    procedure TTmp.SaveToFile(const Filename:string);
    var
      fm : TFileStream;
      mm1,mm2 : TMemoryStream;
      dwSize1,dwSize2, dwOffset : DWORD;
    begin
      mm1 := TMemoryStream.Create;
      FBackBmp.SaveToStream(mm1);
      mm2 := TMemoryStream.Create;
      FCurBMP.SaveToStream(mm2);
      dwSize1 := mm1.size;  
      dwSize2 := mm2.size;
      dwOffset :=0;  fm := TFileStream.Create('c:\abc.dat',fmCreate );
      //先把两个bmp的大小写入文件流
      fm.write( dwSize1,sizeof(DWORD));  
      fm.write( dwSize2,sizeof(DWORD));  
      //再写入两个bmp在文件中的偏移地址
      fm.write( dwOffset,sizeof(dwoffset));
      dwOffset := dwSize1;
      fm.write( dwOffset,sizeof(dwoffset));
      //再把两个bmp写入文件流
      fm.copyfrom(mm1,0);
      fm.copyfrom(mm2,0);  fm.free;
      mm1.free...
    end;
        
    procedure TTmp.LoadFromFile(const FileName:string);var
      fm : TFileStream;
      mm1,mm2 : TMemoryStream;
      dwSize1,dwSize2, dwOffset1,dwOffset2 : DWORD;
    begin
      fm := TFileStream.Create('c:\abc.dat',fmOpenRead);
      fm.read(dwSize1,sizeof(DWORD);
      fm.read(dwSize2,sizeof(DWORD);
      fm.read(dwOffset1,sizeof(DWORD));
      fm.read(dwOffset2,sizeof(DWORD));  mm1 := TMemoryStream.Create;
      mm1.copyfrom(fm,dwSize1);
      FBackBmp.LoadFromStream(mm1);  mm2 := TMemoryStream.Create;
      mm2.copyfrom(fm,dwSize2);
      FCurBMP.LoadFromStream(mm2);
    ...满意吗?给分吧:-)