我正在使用VCL TPNGImage
类来加载PNG图像。如果我使用TPNGImage
创建FindClass(S).Create
对象(S
是String
且可能包含'TPNGImage'
),那么当我尝试使用{加载png图像时{1}}我淡化了访问冲突异常。你有什么想法吗?
请注意,我使用以下代码创建新实例:
LoadFromStream
答案 0 :(得分:6)
你说你通过调用来创建类:
P := TPNGImage(FindClass('tpngimage').NewInstance);
该代码将分配一个实例,但不会运行构造函数。那是你的问题。如果你没有正确构造它,你不能指望一个实例可以工作。
您需要使用
P := TPNGImage.Create;
现在,听起来好像您希望能够编写可以在各种TGraphic
后代上运行的代码。你可以做到这一点。
首先声明您的变量属于TGraphic
类型。
var
Image: TGraphic;
然后获取课程参考。
var
Cls: TPersistentClass;
....
Cls := FindClass('TPNGImage');
然后在类引用兼容的情况下实例化对象。
if Cls.InheritsFrom(TGraphic) then
Image := TGraphicClass(Cls).Create;
因为TGraphic
使用将运行TPNGImage
构造函数的虚构造函数。您可以使用相同的代码构建JPEG,BMP,GIF等。