LoginSignup
9
4

More than 1 year has passed since last update.

[Delphi][小ネタ] TIniFile に class helper を生やすと便利だよという話

Last updated at Posted at 2023-05-15

IniFile

随分前に IniFile を使って全プラットフォームのデータを保存する話を書きました。
ソースはこちら

それはそうと、TIniFile には ReadInteger, ReadString などのメソッドがあるものの TRectTRectF といった record には対応していません。

ということで、その IniFile に class helper を使ってそれらを読み書きできるメソッドを生やすと便利です。

↓は TMemIniFile に class helper を生やす例です。

unit PK.Utils.IniFileHelper;

interface

uses
  System.Types,
  System.IniFiles;

type
  TIniFileHelper = class helper for TMemIniFile
  private const
    RECT_LEFT = '_left';
    RECT_TOP = '_top';
    RECT_RIGHT = '_right';
    RECT_BOTTOM = '_bottom';
  public
    function ReadRectF(
      const ASection, AName: String;
      const ADefault: TRectF): TRectF;
    procedure WriteRectF(const ASection, AName: String; const AValue: TRectF);
  end;

implementation

function TIniFileHelper.ReadRectF(
  const ASection, AName: String;
  const ADefault: TRectF): TRectF;
begin
  Result.Left := ReadFloat(ASection, AName + RECT_LEFT, ADefault.Left);
  Result.Top := ReadFloat(ASection, AName + RECT_TOP, ADefault.Top);
  Result.Right := ReadFloat(ASection, AName + RECT_RIGHT, ADefault.Width);
  Result.Bottom := ReadFloat(ASection, AName + RECT_BOTTOM, ADefault.Height);
end;

procedure TIniFileHelper.WriteRectF(
  const ASection, AName: String;
  const AValue: TRectF);
begin
  WriteFloat(ASection, AName + RECT_LEFT, AValue.Left);
  WriteFloat(ASection, AName + RECT_TOP, AValue.Top);
  WriteFloat(ASection, AName + RECT_RIGHT, AValue.Right);
  WriteFloat(ASection, AName + RECT_BOTTOM, AValue.Bottom);
end;

end.

使い方

これを使うと↓のように Form の位置を簡単に保存できます。

uses
  PK.Utils.IniFileHelper; // Helper を読み込みます

procedure TForm1.Form1Create(Sender: TObject);
begin
  var Ini := TMemIniFile.Create('ファイル名', TEncoding.UTF8);
  try
    BoundsF := Ini.ReadRectF('セクション名', '名前', BoundsF);
  finally
    Ini.Free;
  end;
end;

procedure TForm1.Form1Destroy(Sender: TObject);
begin
  var Ini := TMemIniFile.Create('ファイル名', TEncoding.UTF8);
  try
    Ini.WriteRectF('セクション名', '名前', BoundsF);
  finally
    Ini.Free;
  end;
end;

おわりに

TIniFile に限らず class helper を使って良く使う機能を生やしておくと便利です!

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4