A.G*_*.G. 4 delphi components dfm c++builder-xe tpersistent
我写了一个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
谢谢你的帮助.
您可以创建自己的方法来读取和写入自己的方法来执行的二进制数据流并从流写入的性能,并与VCL/RTL流系统中使用它们注册DefineProperties和DefineBinaryProperty.JEDI JVCL单元JVXSlider.pas中有一个易于理解的示例:
// interface
type
TJvCustomSlider=class(TJvCustomControl)
private
procedure ReadUserImages(Stream: TStream);
procedure WriteUserImages(Stream: TStream);
...
protected
procedure DefineProperties(Filer: TFiler); override;
// implementation
procedure TJvCustomSlider.DefineProperties(Filer: TFiler);
function DoWrite: Boolean;
begin
if Assigned(Filer.Ancestor) then
Result := FUserImages <> TJvCustomSlider(Filer.Ancestor).FUserImages
else
Result := FUserImages <> [];
end;
begin
// @RemyLebeau points out that the next line is apparently a bug
// in the JVCL code, and that inherited DefineProperties should always
// be called regardless of the type of Filer. Commented it out, but
// didn't delete it because it *is* in the JVCL code I cited.
//if Filer is TReader then
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('UserImages', ReadUserImages, WriteUserImages, DoWrite);
end;
procedure TJvCustomSlider.ReadUserImages(Stream: TStream);
begin
Stream.ReadBuffer(FUserImages, SizeOf(FUserImages));
end;
procedure TJvCustomSlider.WriteUserImages(Stream: TStream);
begin
Stream.WriteBuffer(FUserImages, SizeOf(FUserImages));
end;
Run Code Online (Sandbox Code Playgroud)
Delphi流系统将根据需要自动调用定义属性的适当方法(在上面的例子中,属性UserImages),以自动保存或读取dfm文件; 你永远不需要自己打电话给他们.
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |