今回はFireMonkeyを使ってINIファイルの設定値の読み取りや書き込みを行う方法を紹介します。
この手法を使えば、WindowsのみならずiOSやAndroidでもINIファイルが使用可能になります。
初期設定・ファイルの配置
アプリ内でINIファイルを新規作成する場合は、プロジェクトで配置しておく必要はありません。
あらかじめ設定済みのINIファイルを配置する場合は、以前のTipsに記載の手順で配置して下さい。
⇒【Delphi】音声ファイルを再生する方法(#FireMonkey)
今回はOSをまたいでロジックを共通化するため、
各OSごとに異なるファイルの保管先フォルダを返す関数を作成します。
(※それぞれ、保管先の直下を想定しています)
{*******************************************************************************
設定INI保管パスの取得(関数名は任意、最後の「\」含む)
*******************************************************************************}
function SettingsFilePath: String;
begin
{$IF DEFINED(MSWINDOWS)} // Windowsの場合(今回はEXEと同階層)
Result := ExtractFilePath(ParamStr(0));
{$ELSE}
{$IF (DEFINED(MACOS) AND NOT DEFINED(IOS))} // MacOSの場合
Result := System.IOUtils.TPath.GetHomePath + System.SysUtils.PathDelim;
{$ELSE} // iOS・Androidの場合
Result := System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim;
{$ENDIF}
{$ENDIF}
end;
INIの読み取り方法
uses節にVCLと同じ『System.IniFiles』を追加し、
「TMemIniFile」クラスを使って読み書きを行います。
※「TIniFile」クラスも存在しますが、
FireMonkeyのTIniFileはTMemIniFileを継承した互換用クラスのため挙動はほぼ同じです。
対象のTMemIniFileクラスをCreateする時に、上記の関数(SettingsFilePath)で取得した
設定INI保管パスにあるファイルをパラメータとして指定します。
その他の基本的なロジックはVCLと同様です。
{*******************************************************************************
INI 読込処理(uses節にSystem.IniFilesが必要)
*******************************************************************************}
procedure TForm1.Button1Click(Sender: TObject);
var
iTEST: Integer;
SL: TStringList;
IniFile: TMemIniFile;
begin
SL := TStringList.Create;
IniFile := TMemIniFile.Create(SettingsFilePath + 'Settings1.ini');
try
if (IniFile.SectionExists('Settings')) then
begin
// 個別の変数やプロパティに取得する例
Edit1.Text := IniFile.ReadString('Settings', 'ALIAS', '');
Edit2.Text := IniFile.ReadString('Settings', 'USER', '');
Edit3.Text := IniFile.ReadString('Settings', 'PWD', '');
iTEST := IniFile.ReadInteger('Settings', 'RND_INT', 0);
CheckBox1.IsChecked := IniFile.ReadBool('Settings', 'MusicEnabled', True);
// Memoにセクションの値を一括転送する例
Memo1.Lines.Clear;
IniFile.ReadSectionValues('Settings', SL);
Memo1.Lines.Text := SL.Text;
end;
finally
FreeAndNil(IniFile);
FreeAndNil(SL);
end;
end;
INIの書き込み方法
書き込みでも「TMemIniFile」クラスを使用します。
VCLでのTIniFileへの書き込みと記述についてはほぼ同じですが、
書き込み後に「UpdateFile」メソッドを通して確定させる必要があります。
(※元々INIファイルはWindowsの設定ファイルだったため、
同じ動作を実現させるため必要になっているようです。)
{*******************************************************************************
INI 書込処理(uses節にSystem.IniFilesが必要)
*******************************************************************************}
procedure TForm1.Button2Click(Sender: TObject);
var
iTEST: Integer;
IniFile: TMemIniFile;
begin
IniFile := TMemIniFile.Create(SettingsFilePath + 'Settings1.ini');
try
// 文字列の例
IniFile.WriteString('Settings', 'TEST_STR', Edit6.Text);
// 整数値の例(ここでは0~9999ランダム)
iTEST := Random(10000);
IniFile.WriteInteger('Settings', 'RND_INT', iTEST);
// Booleanの例
IniFile.WriteBool('Settings', 'MusicEnabled', CheckBox1.IsChecked);
// 最後に確定させる必要がある
IniFile.UpdateFile;
finally
FreeAndNil(IniFile);
end;
end;
<参考リンク>
- GitHub – Embarcadero/DelphiArcadeGames
- エンバカデロ社が公開しているFireMonkeyのサンプルコード集。
(エンバカデロ社の紹介ブログ記事) - 上記のリンクの他、GetItパッケージマネージャからも取得可能。
- 本記事のロジックはこの中から抜粋しています。
- エンバカデロ社が公開しているFireMonkeyのサンプルコード集。