delphi - "unused"类可以在Delphi XE中使用吗

标签 delphi delphi-xe rtti

我正在使用 Delphi XE、Windows 7。

在应用程序中,我想启用不同的报告类型供用户选择。 为此,我有 1 个基本报告类和每个报告类型(xml、csv、ppt 等)的子类。

{Just an illustrating example}
TBaseReport = class
public
  constructor Create;
  procedure GenerateReport; virtual; abstract;
  class function ReportType: string; virtual; abstract;
end;

T*Report = class(TBaseReport);
//Etcetera.

我想要做的是使用 Rtti 检测所有报告类并列出它们的 ReportType。 之后,我想使用 Rtti 创建所选报告类的实例并调用GenerateReport。总而言之,实现这一点并不是太难。

但是有一个主要缺点:我从来没有对降序类的使用进行硬编码,因此代码不会包含在可执行文件中。

是否有一种合适的方法来强制链接器/编译器包含这些类?

一个(丑陋的)解决方法是在初始化部分模拟报告的使用,但我不想这样做。 更好的解决方案是使基类持久化并调用“RegisterClass(T*Report);”在初始化部分。它有效,但我认为没有任何其他需要让它们持久存在,所以再说一次,我宁愿不这样做。另一方面,也许这是唯一的方法?

提前致谢。

最佳答案

您可以创建自己的 RegisterClass 版本。类似 RegisterReportClass 之类的东西。在内部,您可以保留自己的可以使用的报告类列表。您的注册函数将采用 TBaseReport 类类型 - 不需要 TPersistent。

您的 RegisterReportClass 方法应在初始化部分中调用,以确保包含这些类。

如果您查看图形单元,您可以看到 TFileFormatsList = class(TList)。该类用于保存不同的图形类型,并且可以用作创建您自己的 TReportFormatsList 的示例。 Delphi 使用静态函数 TPicture.RegisterFileFormat 将项目添加到其内部列表中。

关于delphi - "unused"类可以在Delphi XE中使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547913/

相关文章:

android - TIdIOHandler.Write 程序不适用于移动设备

rest - 在 TRESTClient 中添加 CustomHeader

delphi - PChar ('' ) 是否保证是指向 #0 (不是 nil)的指针?

multithreading - 如何在Delphi中进行异步编程?

delphi - 需要多线程内存管理器

c++ - 指向对象开头的指针 (C++)

delphi - 我可以阻止XE8添加System.ImageList吗?

php - 创建从 PHP 到 Delphi 的应用程序打印队列

c++ - 如何让一个类包含不同的类类型并调用持有的那些对象的成员?

abap - 分配类的组件