Delphi XE7からFiremonkeyアプリケーションのフォームの状態を保存する機能を利用できるようになりました。
状態保存機能の使用例のサンプルです。
サンプルアプリケーション
フォーム上にTEditを配置します。
フォームの位置と大きさ、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に入力して、フォームの位置をサイズを変更します。
アプリケーションを終了して、再び実行すると、フォームの位置とサイズ、入力した値が復元されます。