お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"StringGridの内容をファイルに保存/読込"



こんにちは、凛です。

Streamを使ってStringGridのセルの内容を保存/読み込みするサンプルです。
もっとよい方法があるかもしれません。
フォームにStringGrid,OpenDialog,SaveDialog,ボタン二つ を一つ貼り付けて、

//保存
procedure TForm1.Button1Click(Sender: TObject);
var
  fs:TFileStream;
  r,c,rc,cc:LongInt;
  theSize:integer;
  buf:String;
begin
  if SaveDialog1.Execute then
  begin
    fs:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
    try
      cc:=StringGrid1.ColCount;
      rc:=StringGrid1.RowCount;
      fs.write(cc,sizeOf(cc));
      fs.write(rc,sizeOf(rc));
      for r:= 0 to rc-1 do
        for c:= 0 to cc-1 do
        begin
          theSize:=Length(StringGrid1.Cells[c,r]);
          fs.write(theSize,sizeOf(theSize));
        end;
      for r:= 0 to rc-1 do
        for c:= 0 to cc-1 do
        begin
          buf:=StringGrid1.Cells[c,r];
          fs.Write(Pointer(buf)^,Length(buf));
        end;
    finally
      fs.free;
    end;
  end;
end;

//読み込み
procedure TForm1.Button1Click(Sender: TObject);
var
  fs:TFileStream;
  sizes:Array of integer;
  r,c,rc,cc:LongInt;
  theSize:integer;
  buf:PChar;
begin
  if OpenDialog1.Execute then
  begin
    fs:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
    try
      fs.read(cc,sizeOf(cc));
      fs.read(rc,sizeOf(rc));
      SetLength(sizes,cc*rc);
      StringGrid1.RowCount:=rc;
      StringGrid1.ColCount:=cc;
      for r:= 0 to rc-1 do
        for c:= 0 to cc-1 do
        begin
          fs.read(theSize,sizeOf(theSize));
          sizes[r*cc+c]:=theSize;
        end;
      for r:= 0 to rc-1 do
        for c:= 0 to cc-1 do
        begin
          theSize:=sizes[r*cc+c];
          buf:=StrAlloc(theSize+1);
          try
            fs.read(buf^,theSize);
            buf[theSize]:=#0;
            StringGrid1.Cells[c,r]:=String(buf);
          finally
            StrDispose(buf);
          end;
        end;
    finally
      fs.Free;
    end;
  end;
end;

                              2000/10/05(Thu) 00:01am  MXB01744 凛
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/10/06 -

Original document by 凛              氏 ID:(MXB01744)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum