IniFile
随分前に IniFile を使って全プラットフォームのデータを保存する話を書きました。
ソースはこちら
それはそうと、TIniFile には ReadInteger, ReadString などのメソッドがあるものの TRect や TRectF といった 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 を使って良く使う機能を生やしておくと便利です!