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