世の中 Windows95 以降は、設定はレジストリに保存するのが一般になったようです。
しかし、いまだにこだわりを持って INI ファイルを使っているソフトはいくつもあります。
その理由は
と言うわけでレジストリよりも魅力的な点がいくつかあるのです。
以上の利点を理解した上、利用してみようという話です。
では実際に利用する方法を。
まずは利用する前に uses に IniFiles を追加します。
次に IniFile のオブジェクトを生成します。
IniFile: TIniFile;
・
・
・
IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
普通のINIファイルは、プログラムファイルの拡張子を置き換えたものなので、上のようにすれば良いでしょう。
IniFileのCreateは、メインフォームの Create イベントで行えば良いでしょう。
当然ながら生成したものは破棄しないといけないので、メインフォームの Destroy イベントに
IniFile.Free;
と書くなどしましょう。
実際の読み書きです。
INI ファイルに書き込む一番の典型例である、ウインドウ位置の保存を例にとって見ましょう。
[Window]
Top=88
Left=88
Width=768
Height=537
Maxmize=0
上のような形式で書き込むには、以下のようにします。
procedure TMainForm.WriteEnv;
begin
with IniFile do
begin
if WindowState = wsNormal then
begin
WriteInteger('Window', 'Top', Top );
WriteInteger('Window', 'Left', Left );
WriteInteger('Window', 'Width', Width );
WriteInteger('Window', 'Height', Height);
WriteBool( 'Window', 'Maxmize', False );
end
else
WriteBool('Window', 'Maxmize', True);
end;
IniFile.UpdateFile;
(* for Delphi3.x or older
WritePrivateProfileString(nil, nil, nil, PChar(IniFile.FileName)); *)
end;
用語等とかもありますが、見て対応関係がわかれば大丈夫だと思うので、はしょります。
必要ならヘルプ引けばいくらでも出てます。
UpdateFile は 4.x 以降じゃないとないみたい(ちゃんと調べてはいません)なので、代替コードも載せておきます。
これをやらないとキャッシングの関係で Windows9X 系では変な状態になることがあります。
逆に読み込んでみましょう。
procedure TMainForm.ReadEnv;
begin
IniFile.UpdateFile;
(* for Delphi3.x or older
WritePrivateProfileString(nil, nil, nil, PChar(IniFile.FileName)); *)
with IniFile do
begin
Top := ReadInteger('Window', 'Top', Top );
Left := ReadInteger('Window', 'Left', Left );
Width := ReadInteger('Window', 'Width', Width );
Height := ReadInteger('Window', 'Height', Height);
if ReadBool('Window', 'Maxmize', False) then WindowState := wsMaximized
else WindowState := wsNormal;
end;
end;
読み込みのポイントは第3引数でしょう。
この第3引数は、INI ファイルに対応するデータがないとき、デフォルトとして使用する値です。
補足: レジストリの利点