Delphi的持久化

本文介绍了一种使用Delphi的持久化机制来实现控件的保存和加载的方法。通过创建TComPersister类,实现了将多个控件保存到流中和从流中读出控件的功能。在类中,利用TReader和TWriter进行组件的序列化,并确保在读取时生成唯一的名字。示例代码展示了如何在窗体创建、销毁、保存和加载控件到内存流中。

在论坛上常见到有帖子问如何拷贝控件的问题。其实Delphi提供了非常好的持久化机制,笔者写了一个类,提供两个方法,一个是将多个控件保存到流中,另一个是从流中读出控件。

下面是源代码:

unit ComPersist;

 

interface

uses

  Windows, Classes, Controls;

 

type

  TComPersister = class

  private

    FRoot: TComponent;

  protected

    function UniqueName(BaseName: string): string; virtual;

    procedure ReaderSetName(Reader: TReader; Component: TComponent;

      var Name: string);

    procedure ReaderReadComponent(Component: TComponent); virtual;

  public

    procedure SaveComsToStream(AStream: TStream; ComList: TList);

    procedure LoadComsFromStream(AStream: TStream; AParent: TWinControl);

   

    constructor Create(ARoot: TComponent);

    property Root: TComponent read FRoot write FRoot;

  end;

 

implementation

uses

  SysUtils;

{ TComPersister }

 

constructor TComPersister.Create(ARoot: TComponent);

begin

  FRoot := ARoot;

end;

 

procedure TComPersister.LoadComsFromStream(AStream: TStream;

  AParent: TWinControl);

var

  Reader: TReader;

begin

  Reader := TReader.Create(AStream, 1024);

  try

    Reader.OnSetNa

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值