SaveStateでFireMonkeyの状態を保存するサンプル

Delphi XE7からFiremonkeyアプリケーションのフォームの状態を保存する機能を利用できるようになりました。

状態保存機能の使用例のサンプルです。

サンプルアプリケーション

フォーム上にTEditを配置します。

SaveState01

フォームの位置と大きさ、TEditに入力された文字列を保存・復元します。

状態を保存する

TJSONObjectを使って、フォームの状態を保存します。

uses
  System.JSON;

procedure TForm1.FormSaveState(Sender: TObject);
var
  JSON: TJSONObject;
  Writer: TBinaryWriter;
begin
  JSON := TJSONObject.Create;
  JSON.AddPair(
    'Left',
    TJSONNumber.Create(Self.Left));
  JSON.AddPair(
    'Top',
    TJSONNumber.Create(Self.Top));
  JSON.AddPair(
    'Width',
    TJSONNumber.Create(Self.Width));
  JSON.AddPair(
    'Height',
    TJSONNumber.Create(Self.Height));
  JSON.AddPair(
    'Text',
    Edit1.Text);

  SaveState.Stream.Clear;
  Writer := TBinaryWriter.Create(SaveState.Stream);
  try
    Writer.Write(JSON.ToJSON);
  finally
    Writer.Free;
  end;
  JSON.Free;
end;

状態を復元する

保存されている状態を読み込んで、復元します。

procedure TForm1.FormCreate(Sender: TObject);
var
  Reader: TBinaryReader;
  JSON: TJSONObject;
begin
  if (SaveState.Stream.Size > 0) then
  begin
    Reader := TBinaryReader.Create(SaveState.Stream);
    JSON := TJSONObject.ParseJSONValue(Reader.ReadString) as TJSONObject;

    Edit1.Text := JSON.Values['Text'].Value;
    Self.Left := (JSON.Values['Left'] as TJSONNumber).AsInt;
    Self.Top := (JSON.Values['Top'] as TJSONNumber).AsInt;
    Self.Width := (JSON.Values['Width'] as TJSONNumber).AsInt;
    Self.Height := (JSON.Values['Height'] as TJSONNumber).AsInt;

    JSON.Free;
    Reader.Free;
  end;
end;

アプリケーションを実行する

Edit1に入力して、フォームの位置をサイズを変更します。

アプリケーションを終了して、再び実行すると、フォームの位置とサイズ、入力した値が復元されます。

SaveState02

参考

DelphiのJSON関連の記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です