次のように呼び出してクラスを作成するとします。
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 などを作成できます。