掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
class of TGraphic(TGraphicClass) (ID:15120)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
例えば、以下のような、ファイルの拡張子から画像表示するためのクラス参照型を返す関数を用意します。 function GetGraphicClass(aFile: String): TGraphicClass; begin .bmp であれば Result := TBitmap; .png であれば Result := TGldPng; //Delphian Worldにあるコンポーネント) 〜〜 等 end; また、以下のような関数があります(エラー処理等は省略)。 procedure TForm1.HogeHoge; var grphClass: TGraphicClass; newGrap: TGraphic; begin grphClass := GetGraphicClass(どっかの画像ファイル名); newGrap := grphClass.Create; //.......(1) newGrap.LoadFromFile(どっかの画像ファイル名); Image1.Graphic.Assign(newGrap) end; これは、拡張子を判定し、適切な画像クラスでファイルを読み込み、 Formに貼り付けたImage1に表示するプログラム(と思ってください)。 ここで、プロジェクトのオプションで、デバック版DCUを使うようにし実行します。 (1)でブレークポイントを設定し、ここからF7でトレース実行を行います。 そうすると、bmpであれば、TBitmap.Createを実行する・・・と思っていたのですが、いきなりTObject.Createまで飛んでしまいます。 TBitmap.Createの先頭行にブレークポイントをつけても、全く止まりません。 逆に、上記例を変更し以下のようにクラス別に、明示的にクリエイトすると、正しくTbitmap.Createが実行されます(当然だわな)。...(2) if grphClass = TBitmap then begin newGrap := TBitmap.Create; end else 〜〜 「class of クラス名」って、そんなんか!?と、自分で定義したクラス型の実装部で、(1)の例のように、クラス参照型変数からのCreateをステップ実行しましたが、正しく実行されています。 もちろん、{$D-}は、はずしているので、止まらないことはありません。 (2)のように書いておけば、正しく動作するので。 TGraphicClass が、思ったように動かないのって、な〜ぜ〜!?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.