2

VCLTPNGImageクラスを使用して PNG 画像をロードしています。( is であり、 が含まれている可能性がある)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 に答える