组件的持久化,delphi

本文介绍了一个使用Delphi实现的组件属性读取和克隆的方法。通过将组件转换为字符串再还原的方式实现了组件的复制,并展示了如何获取和显示组件的属性。这种方法可用于快速复制组件设置。

注意,需要注册类;

2.读入多个属性的时候,只会构造第一个控件;


unit Unit1;



interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    mmo1: TMemo;
    btn1: TButton;
    edt1: TEdit;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    procedure ShowComponentProperties(AComponent: TComponent);
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}
function CompTostr(AComponent: TComponent): string;
var
  memstream: TMemoryStream;
  strStream: TStringStream;
  str: string;
begin
  memstream := TMemoryStream.Create();
  try
    strstream := TStringStream.Create(str);
    try
      memstream.WriteComponent(AComponent);
      memstream.Seek(0, soFromBeginning);
      classes.ObjectBinaryToText(memstream, strStream);
      strStream.Seek(0, soFromBeginning);
      Result := strStream.DataString;
    finally
      FreeAndNil(strStream);
    end;
  finally
    FreeAndNil(memstream);
  end;
end;


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;
procedure TForm1.btn1Click(Sender: TObject);
var
  str: string;
begin
  mmo1.Clear;
  ShowComponentProperties(edt1);
end;


procedure TForm1.ShowComponentProperties(AComponent: TComponent);
var
  str: string;
begin
  str := compToStr(AComponent);
  mmo1.Lines.Add(str);
end;


procedure TForm1.btn2Click(Sender: TObject);
var
  editclone: Tedit;
begin
  editclone := TEdit(StrToComp(mmo1.Lines.Text,nil));
  editclone.Parent := self;
  editclone.Name := editclone.Name + 'Clone';
  editclone.Top := editclone.Top + 40;
  editclone.Visible := true;
  ShowComponentProperties(editclone);
end;


initialization
Classes.registerClass(TEdit);


end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值