标签: tpersistent

从流中读取对象时忽略未知属性

我们有一个应用程序,它通过TPersistent的降序将项目信息存储在一个文件中.我们使用TSteam.ReadComponentRes从流中读取对象.

我们希望能够打开具有未知属性的项目文件(来自我们应用程序的较新版本或其他开发分支).目前,这导致TReader中的异常,该异常由TStream创建.我们考虑过制作一个TStream后代,它使用TReader后代来处理这个异常,而不是停止阅读.谁能想到更优雅的方式呢?

delphi properties delphi-2009 tpersistent

6
推荐指数
1
解决办法
620
查看次数

运行时设计 - 存储和加载表单布局(递归?)

我正在创建一个应用程序,其布局需要在客户端完全配置.这意味着每个组件(控件)可以调整大小并在表单中移动,可以添加新控件或删除一些控件.我想使用JVCL Runtime Design(Design Surface和Object Inspector).

问题是关于存储加载表单.T流.WriteComponent方法不支持递归写入,这意味着它只保存组件的"第一级".

因此,举例来说,如果我在表单上放置TPanel,然后在Panel上放置TButton,并在Form上调用WriteComponent,则只保存TPanel,而不是TButton.

我的问题是 - *如何使用WriteComponent存储完整的控件层次结构

delphi persistence tpersistent

6
推荐指数
1
解决办法
606
查看次数

编写C++ Builder/Delphi组件并将二进制属性保存到DFM文件

我写了一个C++构建器组件来显示SVG文件对它们执行一些操作.

现在,我发布了一个名为SvgFile(UnicodeString)的属性,该属性可以在IDE中使用SVG文件的文件名进行初始化.这很好用.此属性保存在DFM文件中,可以从中重新加载.

但是我必须为应用程序提供SVG文件,因此我想将SVG保存到DFM文件中,因为它是使用TImage组件完成的.

我想我必须写一个TPropertyEditor,也许是一个TPersistent类,但我不知道该怎么做.

有人能帮我这么做吗?

编辑2013/01/17:这是一个解决方案http://www.informit.com/articles/article.aspx?p=28278&seqNum=5

谢谢你的帮助.

delphi components dfm c++builder-xe tpersistent

4
推荐指数
1
解决办法
1063
查看次数

集合编辑器不会为TPersistent属性中的TCollection属性打开

我有自定义集合属性,当它是我的组件的直接成员时,它工作得很好.

但我想将集合属性移动到我的组件中的TPersistent属性.现在出现问题,它不起作用:双击对象检查器中的集合属性通常会打开集合编辑器,但它不再存在.

所有的拳头 - 我应该传递给TPersistent属性的构造函数?

TMyCollection = class(TCollection)
  constructor Create(AOwner: TComponent); // TMyCollection constuctor
  ...
Run Code Online (Sandbox Code Playgroud)

我无法通过自我,所以我应该通过我的执着主人?

constructor TMyPersistent.Create(AOwner: TComponent);
begin
  inherited Create;
  fOwner := AOwner;
  fMyCollection := TMyCollection.Create(AOwner); // hmmm... doesn't make sense
end;
Run Code Online (Sandbox Code Playgroud)

我想我错过了什么.如果需要更多代码,请评论此帖.

Da visualizationz

delphi delphi-2010 tpersistent

2
推荐指数
1
解决办法
2046
查看次数

我可以使用默认的WriteComponent操作将Delphi TPersistent序列化为TComponent的字段吗?

我对如何从具有TPersistent字段的TComponent写出属性感到非常困惑.例如,我有:

  TChildObj = class( TPersistent )
  PRIVATE
    FVisible: boolean;
    FColor: TColor;
  PUBLIC
  PUBLISHED
    property Visible : boolean
               read FVisible
               write FVisible;
    property Color : TColor
               read FColor
               write FColor;
  end;


  TTest = class( TComponent )
    constructor Create( AOwner : TComponent ); override;
    destructor Destroy; override;
  private
    FChildObj : TChildObj;
    FOne: integer;
  published
    property One : integer
               read FOne
               write FOne;
    property ChildObj : TChildObj
               read FChildObj;
  end;
Run Code Online (Sandbox Code Playgroud)

当我使用以下编写器代码时:

procedure TForm1.Button5Click(Sender: TObject);
var
  MS : TMemoryStream;
  SS : TStringStream;
  Test : …
Run Code Online (Sandbox Code Playgroud)

delphi serialization tpersistent tcomponent

2
推荐指数
1
解决办法
2092
查看次数