Delphi XE2의FireMonkey 입문(33) - 컨트롤 기초: TFmxObject: SaveToStream, LoadFromStream, SaveToBinStream, LoadFromBinStream
3865 단어 Delphi
SaveToBinStream(), LoadFromBinStream()은 2진 흐름에 대응한다.텍스트 흐름에 비해 이진 흐름은 좀 작을 것이다.
이 몇 가지 방법이 있는데, 컨트롤 데이터와 상태의 서열화는 너무 쉽다.
예:
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 3개 추가
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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.