在论坛上常见到有帖子问如何拷贝控件的问题。其实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

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





