|
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
|