zoukankan      html  css  js  c++  java
  • Delphi XE2 之 FireMonkey 入门(33) 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStream


    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.
    

  • 相关阅读:
    [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解
    Netty中的三种Reactor(反应堆)
    I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor
    【转】第8章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
    mysql 数据库 自动截取数据的问题---mysql的sql_model的四种模式:宽松模式、严格模式
    spring-session之四:Spring Session下的Redis存储结构
    Mysql auto_increment总结
    mysql实战优化之一:sql优化
    mysql字符集和校对规则(Mysql校对集)
    Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
  • 原文地址:https://www.cnblogs.com/del/p/2199327.html
Copyright © 2011-2022 走看看