フォームの変更を保存する(その2)
前回,「ini」ファイルを使ってフォームの位置や大きさを保存する方法を書きましたが,今回はフォームにMemoコンポーネントを貼り付け,Memoコンポーネントに書き込んだ内容も「ini」ファイルに書き込む方法を述べてみます。
ソースは前回使ったものを応用します。
まず,フォームにMemoコンポーネントを配置します。
手順としては,前回と同じようにフォームの設定を変更した後,フォームを閉じるときに「hozon.ini」ファイルに位置や大きさなどの情報を書き込みます。そして,ファイルを起動するときに「hozon.ini」ファイルの情報を読み込んで,フォームを開きます。
procedure TForm1.Button1Click(Sender: TObject);
begin
if colordialog1.Execute then begin
//ボタンを押すとカラーダイアログを開く
form1.Color:=colordialog1.Color;
//カラーダイアログで選択した色を,フォームの色にする
end;
end;
//フォームを閉じるときの手続き
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
fi:textfile;
//テキスト型を宣言
begin
assignfile(fi,getcurrentdir + '\hozon.ini');
//fiと「hozon.ini」ファイルを関連づける
rewrite(fi);
//fiを開き,書き込めるようにする
writeln(fi,form1.Left);
//フォームのX座標を,fiに書き込む
writeln(fi,form1.Top);
//フォームのY座標を,fiに書き込む
writeln(fi,form1.Width);
//フォームの横の大きさを,fiに書き込む
writeln(fi,form1.Height);
//フォームの縦の大きさを,fiに書き込む
writeln(fi,form1.Color);
//フォームの色を,fiに書き込む
write(fi,memo1.Lines.Text); //Memo1の書き込みをfiに書き込む※1
closefile(fi);
//ファイルを閉じる。これで「hozon,ini」ファイルが作成される
end;
//フォームを起動するときの手続き
procedure TForm1.FormCreate(Sender: TObject);
var
fi:textfile;
//テキスト型を宣言
i::array[1..5] of string;
//文字列型の配列を宣言
j:integer; //jを整数型の変数として宣言
begin
if FileExists(getcurrentdir + '\hozon.ini')=true then begin
//もし「hozon.ini」ファイルがあれば以下のソースを実行
assignfile(fi,getcurrentdir + '\hozon.ini');
//fiと「hozon.ini」ファイルを関連づける
reset(fi);
//ファイルを開く
readln(fi,i[1]);
//i[1]からi[5]に「hozon.ini」ファイルに書かれたものを代入する
readln(fi,i[2]);
readln(fi,i[3]);
readln(fi,i[4]);
readln(fi,i[5]);
closefile(fi);
//ファイルを閉じる
form1.Left:=strtoint(i[1]);
//フォームのX座標をi[1]にする
form1.Top:=strtoint(i[2]);
//フォームのY座標をi[2]にする
form1.Width:=strtoint(i[3]);
//フォームの横の大きさを,i[3]にする
form1.Height:=strtoint(i[4]);
//フォームの縦の大きさを,i[4]にする
form1.Color:=strtoint(i[5]);
//フォームの色を,i[5]にする
memo1.Lines.LoadFromFile(getcurrentdir + '\hozon.ini'); //Memo1に「hozon.ini」の内容を書き込む※2
for j:=1 to 5 do memo1.Lines.delete(0); //Memo1に書き込まれた内容から,最初の4行を削除する※3
end;
end;
※1
「memo1.Lines.Text」はmemo1に書かれた内容すべてを指定します。
「memo1.Lines[0]」とすると,memo1の一行目を指定します。
(一行目が0から始まるところが少し紛らわしいです。)
※2
「readln」や「read」はファイルから一行しか読み取りません。そのため,memo1の内容のような複数行書き込まれている場合は適しません。そのためここでは「hozon.ini」ファイルの内容をmemo1に書き込み,そこから不要なデータを削除する方法をとりました。
※3
「memo1.Lines.delete(0)」は,memo1から一行目を削除します。括弧内の「0」は一行目を表します。二行目を削除したいときは,括弧内の数字を「1」にします。