今回は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パッケージマネージャからも取得可能。
 - 本記事のロジックはこの中から抜粋しています。
(次回:SQLite操作のTipsも同様です。) 
 - エンバカデロ社が公開しているFireMonkeyのサンプルコード集。