我正在使用 VCLTPNGImage
类来加载 PNG 图像。如果我使用( is a并且它可能包含) 创建TPNGImage
对象,当我尝试使用加载 png 图像时,我会淡化访问冲突异常。你有什么想法?FindClass(S).Create
S
String
'TPNGImage'
LoadFromStream
请注意,我使用以下代码创建一个新实例:
P := TPNGImage(FindClass('tpngimage').NewInstance);
你说你通过调用创建类:
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 等。