问题标签 [tpersistent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1291 浏览

delphi - 编写 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

谢谢你的帮助。

0 投票
1 回答
2472 浏览

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

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

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

我只得到以下内容:

即缺少 TPersistent TChildObj。

这篇关于组件序列化的文章指出“默认情况下,组件将流式传输任何非 TComponent 类型的 TPersistent 属性。我们的 TPersistent 属性像组件一样被流式传输,并且它可能具有其他将被流式传输的 TPersistent 属性。” 但是,当我进入 System.Classes 时,在第 12950 行(XE3)附近进行了测试:

这似乎表明只有组件和子组件被序列化。如果我让 TChildObj 从 TComponent 下降(并给它一个名字),我会得到它的名字出现在书面文件中(但仍然没有属性)。

我真正不明白的是,TControl(一个组件)具有 Font 属性(TPersistent),例如,当您编写 TLabel 时,它会很好地流出。

还是这与默认属性有关?

任何帮助表示赞赏。

0 投票
1 回答
263 浏览

delphi - Delphi:TPersistent 和 csDesigning 状态

如何检测TPersistent类处于 csDesigning 状态?

0 投票
1 回答
333 浏览

multithreading - Delphi - 未创建自定义线程

我这里有点问题。我有一个继承 TPersistent 类的自定义类,在这个自定义类内部(私有部分),我有一个自定义的 TThread,它具有覆盖的 Execute 方法,每(1000 毫秒)触发一次。一切都很好,直到我将我的 2 个自定义类移动到一个新单元......

上面的代码在主项目单元中工作得很好,但是当我将它移动到一个新单元时,线程代码不再工作,当我尝试释放一个 TMyClass 对象时,我得到一个 AV。我认为线程根本没有被构建,这就是为什么我在尝试释放它时得到一个 AV ......但为什么呢?代码在哪个单元中并不重要...

单元1:

单元2:

0 投票
0 回答
113 浏览

delphi - TCollectionItem 中的 TPersistent 组件/从 TPersistent 访问 TCollectionItem 属性

请查看 a 的波纹管代码部分TComponent

当方法SetFieldfromTSqlField被处理时,我想访问属性NamefromTSqlField : TCollectionItem以便我可以重命名它。

备注: 的所有者TCollection可能是一个或另一个TComponent

请就如何做到这一点提出一些建议。

0 投票
2 回答
301 浏览

delphi - 在我的特定类中实现 Clone() 的最佳方法

在我的特定TPersistent类中,我想提供一个Clone函数,它返回对象的独立副本。

是否可以在后代中正常工作,而无需Clone在每个后代中实现该功能?

这与克隆任何未知字段或深度克隆(可以使用 RTTI 完成)无关。在下面我的最小示例中,您可以看到我想要放置Clone函数的位置。

由于它用于Assign()复制数据,因此它适用于任何后代。问题是构造函数,请参阅评论。如何调用该后代的正确构造函数?如果这很难做到,可以假设没有一个后代在没有覆盖的情况下覆盖构造函数Clone

输出是

所以,正确的类出来了,它在这个最小的例子中正常工作,但不幸的是,我必要的初始化没有完成(应该出现两次)。

我希望我能说清楚,你喜欢我的示例代码:) - 我也很感激任何其他评论或改进。我的Assign()实施好吗?