首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

内存流的读写解决方案

2012-03-15 
内存流的读写有这么一段代码,不是很明白:procedure TForm1.ButtonWriteClick(Sender: TObject)varEditClo

内存流的读写
有这么一段代码,不是很明白:
procedure TForm1.ButtonWriteClick(Sender: TObject);
var
  EditClone: TEdit;
begin
  EditClone := TEdit(JuUtils.StrToComp(Memo.Lines.Text, nil));
  EditClone.Parent := Self;
  EditClone.Name := EditClone.Name + 'Clone';
  EditClone.Top := EditClone.Top + 40;
  EditClone.Visible := True;
  ShowComponentProperties(EditClone);
end;

其中JuUtils.StrToComp的定义如下:
function StrToComp(AStr: string; AComponent: TComponent): TComponent;
var
  StrStream: TStringStream;
  MemStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(AStr);
  try
  MemStream := TMemoryStream.Create();
  try
  Classes.ObjectTextToBinary(StrStream, MemStream);
  MemStream.Seek(0, soFromBeginning);
  Result := MemStream.ReadComponent(AComponent);
  finally
  FreeAndNil(MemStream);
  end;
  finally
  FreeAndNil(StrStream);
  end;
end;


前面已经定义了Edit1,Memo.Lines.Text保存的是Edit1的相关信息,可是这句代码:
  EditClone := TEdit(JuUtils.StrToComp(Memo.Lines.Text, nil));  
这里怎么把Edit1的信息附给了EditClone?而且这里JuUtils.StrToComp(Memo.Lines.Text, nil),这里参数可以为nil吗?

[解决办法]
delphi的例子,看完了就该明白了吧
This example shows how to use the built-in component streaming support to convert any component into a string and convert that string back into a component.

function ComponentToString(Component: TComponent): string;

var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;

end;
finally
BinStream.Free
end;
end;

function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);

finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

热点排行