4

エラーが発生します:

[DCC エラー] Unit_TProcessClass.pas(334): E2010 互換性のない型: 'TBitmap' および 'tagBITMAP'

クラスは次のように定義されます

TMyClass = Class 
private
  MyBMP : TBitmap;
  property aBMP : TBitmap read MyBMP write MyBMP;

コードは次のようになります

processABitmap(aMyClass.aBMP) ;  -> here is the compile error !!! 
4

2 に答える 2

13

問題はTBitmap、VCL で名前が付けられた 2 つの型があることです。1 つはWindowsユニットで定義され、もう 1 つはユニットで定義されGraphicsます。明らかWindows.TBitmapに、期待する関数に渡しているGraphics.TBitmapか、またはその逆です。

ほとんどの場合、 とは何の関係も持ちたくありませんWindows.TBitmap。したがって、解決策は、すべてのユニットが uses 句のGraphicsユニットのにユニットをリストしていることを確認することです。Windowsこれにより、非表示の効果が得られWindows.TBitmapます。

私の精神的なデバッグは、宣言されているユニットがその句にまったくTMyClassリストされていないか、 の前にリストされていることを示唆しています。GraphicsusesGraphicsWindows

最後に、このようなことを自分で解決するにはどうすればよいですか? TBitmapでは、 で参照されている を CTRL キーを押しながらクリックしてみてくださいTMyClassTBitmapで宣言された場所に連れて行ってくれると確信していますWindows。書いたときに意図したタイプではないことを理解するには、これで十分なはずですTBitmap

于 2013-03-20T19:13:29.030 に答える
12

問題は、VCL ビットマップ クラス ( Windows.TBitmapWindows tagBitmapAPI の意味でのビットマップを記述するレコード)を混同していることです。Graphics.TBitmap

だから、あなたはどちらかが欲しい

var
  b: Windows.TBitmap;

または(はるかに可能性が高い)

var
  b: Graphics.TBitmap;

単位を省略すると、最後に参照された単位が使用されます。たとえば、uses句が次のようになっている場合

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

thenTBitmapは を意味Graphics.TBitmapし、通常はこれが必要です。

したがって、問題の解決策は、Graphicsいくつかのuses句に追加する必要があるか、リストの後にリストされていることを確認する必要があるGraphicsことです Windows

于 2013-03-20T19:11:50.187 に答える