Grossa Speaks Final

コンピュータに関するテーマを
気の向くまま取り上げています。
(時々雑談...)

DenGas作成ノート4

2006年12月14日 | Programming
レイヤーの状態を保存するコード。CSV形式は中止。テキストファイル。
Delphi Users' Forum にサンプルコードがあった。
1の方法でいこうと思う。streamはよくわからない。

---サンプルコードの始まり
[Q]
StringGridにはSaveToFileメソッドが見あたりませんどうやって保存するのでしょう。

[A]

セルの文字列に改行コードが含まれないなら、比較的簡単に保存する方法
が有ります。

1.ファイルに保存する場合、テキストファイルルーチンを使い
For..to..do..を2重にしてWritelnで書き込む

2.ストリームに保存する場合.

[例]

1.

var
F : TextFile;
I,J:Integer;
begin
AssignFile(F,'Grid.dat');
ReWrite(F);
for I:=0 to StringGrid1.ColCount-1 do
for J:=0 to StringGrid1.RowCount-1 do
Writeln(F,StringGrid1.Cells[I,J]);
CloseFile(F);
end;


2.

procedure StrWrite(Stream:TStream;Str:String);
var Size:Integer;
begin
Size:=Length(Str);
Stream.WriteBuffer(Size,SizeOf(Size));
Stream.WriteBuffer(PChar(Str)^,Size);
end;

function StrRead(Stream:TStream):String;
var Res,Size:Integer;
begin
Res:=Stream.Read(Size,SizeOf(Size));
if Res=SizeOf(Size) then begin
SetLength(Result,Size);
Stream.Read(PChar(Result)^,Size);
end;
end;


procedure SaveGrid(Stream:TStream;Grid:TStringGrid);
var I:Integer;
begin
for I:=0 to Grid.ColCount-1 do
StrWrite(Stream,Grid.Cols[i].Text);
end;

procedure LoadGrid(Stream:TStream;Grid:TStringGrid);
var I:Integer;
S:TStrings;
begin
S:=TStringList.Create;
for I:=0 to Grid.ColCount-1 do
begin
S.Text:=StrRead(Stream);
Grid.cols[i].Assign(S);
end;
S.Free;
end;

最新の画像もっと見る

コメントを投稿