我们有一个应用程序,它通过TPersistent的降序将项目信息存储在一个文件中.我们使用TSteam.ReadComponentRes从流中读取对象.
我们希望能够打开具有未知属性的项目文件(来自我们应用程序的较新版本或其他开发分支).目前,这导致TReader中的异常,该异常由TStream创建.我们考虑过制作一个TStream后代,它使用TReader后代来处理这个异常,而不是停止阅读.谁能想到更优雅的方式呢?
我正在创建一个应用程序,其布局需要在客户端完全配置.这意味着每个组件(控件)可以调整大小并在表单中移动,可以添加新控件或删除一些控件.我想使用JVCL Runtime Design(Design Surface和Object Inspector).
问题是关于存储和加载表单.T流.WriteComponent方法不支持递归写入,这意味着它只保存组件的"第一级".
因此,举例来说,如果我在表单上放置TPanel,然后在Panel上放置TButton,并在Form上调用WriteComponent,则只保存TPanel,而不是TButton.
我的问题是 - *如何使用WriteComponent存储完整的控件层次结构?
我写了一个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
谢谢你的帮助.
我有自定义集合属性,当它是我的组件的直接成员时,它工作得很好.
但我想将集合属性移动到我的组件中的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)
我想我错过了什么.如果需要更多代码,请评论此帖.
我对如何从具有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 ×5
tpersistent ×5
components ×1
delphi-2009 ×1
delphi-2010 ×1
dfm ×1
persistence ×1
properties ×1
tcomponent ×1