2

我正在使用 VCLTPNGImage类来加载 PNG 图像。如果我使用( is a并且它可能包含) 创建TPNGImage对象,当我尝试使用加载 png 图像时,我会淡化访问冲突异常。你有什么想法?FindClass(S).CreateSString'TPNGImage'LoadFromStream

请注意,我使用以下代码创建一个新实例:

P := TPNGImage(FindClass('tpngimage').NewInstance);
4

1 回答 1

6

你说你通过调用创建类:

P := TPNGImage(FindClass('tpngimage').NewInstance);

该代码将分配一个实例,但不会运行构造函数。那是你的问题。如果您没有正确构建实例,您就不能期望实例能够正常工作。

你需要使用

P := TPNGImage.Create;

现在,听起来好像您希望能够编写可以在各种TGraphic后代上工作的代码。你可以做到这一点。

首先声明你的变量是 type TGraphic

var
  Image: TGraphic;

然后获取类引用。

var
  Cls: TPersistentClass;
....
Cls := FindClass('TPNGImage');

然后实例化对象,如果类引用是兼容的。

if Cls.InheritsFrom(TGraphic) then
  Image := TGraphicClass(Cls).Create;

因为TGraphic使用将运行TPNGImage构造函数的虚拟构造函数。您可以使用相同的代码来构建 JPEG、BMP、GIF 等。

于 2013-03-05T13:36:55.777 回答