SaveToStream()、LoadFromStream() 对应文本流;
SaveToBinStream()、LoadFromBinStream() 对应二进制流; 相对文本流, 二进制流会小一些.

有这几个方法, 控件数据与状态的序列化就太容易了.

示例:
1、控件: ListBox1、Button1、Button2
2、事件: Button1.OnClick、Button2.OnClick、Form1.OnCreate


unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Layouts, FMX.ListBox; type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.fmx} {给 ListBox1 加点内容}
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := to do
    ListBox1.Items.Add('Item' + IntToStr(i));
end; {存取 ListBox1}
procedure TForm1.Button1Click(Sender: TObject);
const
  path = 'c:\temp\ListBox1Stream.txt';
var
  stream: TFileStream;
begin
  {1}
  stream := TFileStream.Create(path, fmCreate);
  ListBox1.SaveToStream(stream);
  stream.Free;   {2}
  ListBox1.Clear;
  ShowMessage('a');   {3}
  stream := TFileStream.Create(path, fmOpenRead);
  ListBox1.LoadFromStream(stream);
  stream.Free;
end; {存取当前窗体}
procedure TForm1.Button2Click(Sender: TObject);
const
  path = 'c:\temp\Form1Stream.dat';
var
  stream: TFileStream;
begin
  {1}
  stream := TFileStream.Create('c:\temp\Form1Stream.dat', fmCreate);
  Self.SaveToBinStream(stream);
  stream.Free;   {2}
  Button1.Free;
  Button2.Free;
  ListBox1.Free;
  Realign;
  ShowMessage('a');   {3}
  stream := TFileStream.Create('c:\temp\Form1Stream.dat', fmOpenRead);
  Self.LoadFromBinStream(stream);
  stream.Free;
end; end.

状态保存测试:
1、控件: Button1、Button2、Panel1; 在 Panel1 中再放三个 TCheckBox
2、事件: Button1.OnClick、Button2.OnClick、Form1.OnCreate、Form1.OnDestroy

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs; type
  TForm1 = class(TForm)
    Panel1: TPanel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.fmx} var
  stream: TMemoryStream; procedure TForm1.FormCreate(Sender: TObject);
begin
  stream := TMemoryStream.Create;
  Button2.Enabled := False;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
  stream.Free;
end; {调整三个 CheckBox 的状态后保存}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.SaveToStream(stream);
  ShowMessage(IntToStr(stream.Size));
  Button2.Enabled := True;
end; {恢复}
procedure TForm1.Button2Click(Sender: TObject);
begin
  stream.Position := ;
  Panel1.LoadFromStream(stream);
end; end.

最新文章

  1. Windows And Video Memory
  2. Tomcat环境配置部署测试环境及架构
  3. BZOJ4530: [Bjoi2014]大融合
  4. Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案
  5. css的display属性小实验
  6. 取消jQuery validate验证
  7. easyui源码翻译1.32--Menu(菜单)
  8. 使用JAVA与SmartFoxServer来实现游戏服务器概述
  9. ExtJS002Window创建
  10. Spring MVC Json数据传递
  11. 无声的吐槽csdn
  12. 九度OJ 1014 排名
  13. css边框动画
  14. 尝试Java,从入门到Kotlin(下)
  15. STL之heap学习
  16. Swift 设置某个对象的normal 属性找不到normal 解决方案
  17. iOS Message from debugger: Terminated due to memory issue ~解决方法
  18. 转载:MySQL EXPLAIN 命令详解学习
  19. py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图
  20. luogu2024 食物链 (并查集)

热门文章

  1. Solaris下truss的使用
  2. mybatis捕获sql工具
  3. ActiveMQ与Spring / SpringBoot 整合(四)
  4. DevExpress v19.1新版亮点——WinForms篇(四)
  5. 在UIScrollView、UICollectionView和UITableView中添加UIRefreshControl实现下拉刷新
  6. postman+newman+jenkins 接口自动化
  7. 曙光浪潮IBM驱动
  8. UVa 213 信息解码 (模拟 && 二进制)
  9. .Net MVC JsonResult在IE下返回值变成下载文件问题
  10. NOIP2018初赛划水记