文档章节

Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、Lo...

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 395
阅读 6
收藏 0

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 := 0 to 9 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 := 0;
  Panel1.LoadFromStream(stream);
end;

end.

本文转载自:http://www.cnblogs.com/del/archive/2011/10/05/2199327.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
Delphi XE2:这就是我们所期待的Delphi吗?

版权声明:本文为 OSChina.NET 原创编译 转载务必注明出处,并保留链接! 作者:蒂姆.安德森 Delphi是被一些人遗忘了的快速应用程序开发工具,但它与可视组件库相结合,依然是开发Windows本机...

虫虫
2011/10/31
40.7K
49
最全面的常用Delphi第三方控件汇总—报表、图表、界面、数据库等

有网友问我常用Delphi第三方控件及功能。我先大概整理一下,以后会在文章里面碰到时再仔细介绍。 报表图表方面: TeeChart Pro 在delphi 的图形显示方面目前唯一的选择,虽然从delphi 3 就随...

Leamontea
2012/12/03
0
2
ClientDataSet探讨(1)-介绍

KeyLife富翁笔记 作者: hongxingdl 标题: ClientDataSet探讨(1)-介绍 关键字: midas 分类: 开发经验 密级: 公开 与TTable、TQuery一样,TClientDataSet也是从TDataSet继承下来的,...

天地弦
2004/08/06
0
0
Delphi XE2 新功能:LiveBindings --- 把对象之间的属性绑定起来

Delphi XE2 新功能:LiveBindings --- 把对象之间的属性绑定起来日期:2011年9月9日 作者: 人气:5340 查看:[大字体 中字体 小字体] XE2 有了 FireMonkey 框架,它不同于 VCL ,以往的数据感...

vga
2016/08/09
17
0
使用 Delphi 开发移动应用

引言 现在移动设备的发展现在变成了趋势. 我们可以考虑本地语言开发 (例如ObjectiveC for IOS或 Java for Android), 但通常对新开发者的学习代价高. 另一个选择是第三方代理 (例如Titanium,...

oschina
2012/12/11
10.3K
21

没有更多内容

加载失败,请刷新页面

加载更多

ES5和ES6那些你必须知道的事儿

  ES5和ES6那些你必须知道的事儿      ES5新增的东西      一、数组方法      1、forEach      用途:遍历,循环      对于空数组不会执行回调函数      复制代码...

SEOwhywhy
8分钟前
0
0
转:[windows]DOS批处理添加任务计划

[windows]DOS批处理添加任务计划 博客分类: Windows 转自:http://gwmold.blog.163.com/blog/static/1553319892010117113457232/ 自动创建每周运行一次的计划任务 创建计划任务可用at,sch...

SamXIAO
13分钟前
0
0
redis 问题总结

1:修改内存页大小,linux 默认大小是4k(通过getconf PAGE_SIZE 查看 2:查看内存交换信息,防止使用内存交换 3: sar -n DEV 查看网络状况 4: 修改文件句柄: ulimit -n 65535...

昏鸦
15分钟前
0
0
如何在Rails应用程序中使用Kafka?

背景介绍 有那么一段时间,我们的系统需要用到分布式流式处理和消息系统,而 Apache Kafka 似乎成了我们建立业务关键型应用程序的坚实基础。它可用于很多场景下,比如产品更新管道、订单跟踪...

java菜分享
16分钟前
1
0
C#匿名委托

list自定义排序 //list自定义排序public static List<string> sortList(List<string> m_str,string splitStr) //a b表示列表中的元素{String[] strArray=m_str.ToArray();......

青衣霓裳
26分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部