我正在使用 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/