ホーム >プログラム >Delphi 6 ローテクTips

コンポーネントメモ・TImage

TImageのメモ。


TImage.Picture.Bitmapを参照するとTImage.Picture.Iconが消える

症状:
Iconプロパティにアイコン画像をロードしてある状態でBitmapプロパティを参照するとロードしてあったIcon画像が消えてしまいます。

原因:
Bitmapプロパティは参照するだけで強制的にBitmapオブジェクトを作ってしまうので、その時にIcon画像が消去されます。
これは不具合ではなく仕様です。

画像が Metafile または Icon グラフィックを保持しているときに Bitmap プロパティを参照しても,そのグラフィックは変換されません。かわりに,画像の元の内容が破棄され,Bitmap プロパティは新しい空白ビットマップを返します。

D6のヘルプには上記のように書かれています。
>画像の元の内容が破棄され
とあるように、アイコンやメタファイルはBitmapプロパティを参照しただけで破棄されてしまう仕様です。

対策:
Icon画像もしくはBitmap画像がある場合の判定は、まずIcon画像があるかを判定してからビットマップ画像があるかを判定します。

//OK
if (Image1.Picture.Icon.Empty = False) or (Image1.Picture.Bitmap.Empty = False) then begin
  //アイコン画像かビットマップ画像がある場合の処理
end;


//NG
if (Image1.Picture.Bitmap.Empty = False) or (Image1.Picture.Icon.Empty = False) then begin
  //この判定の順番だとIcon.Emptyは必ずTrueになってしまう
end;

コンパイラオプションで「完全な論理評価」にチェックが入っていると、上記のOKの例では処理内容には入るけれどもその時点ででアイコンは消去されてしまうことに注意。


2010-03-05: