我收到错误:
[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 !!!
答案 0 :(得分:12)
问题是你将Windows.TBitmap
(又名tagBitmap
,一个描述Windows API意义上的位图的记录)与Graphics.TBitmap
(VCL位图类)混淆。
所以,你要么
var
b: Windows.TBitmap;
或(更有可能)
var
b: Graphics.TBitmap;
如果省略该单位,则将使用最后引用的单位。例如,如果您的uses
子句看起来像
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
然后TBitmap
表示Graphics.TBitmap
,这就是您通常想要的。
因此,您的问题的解决方案是,您需要将Graphics
添加到某个uses
子句中,或者您需要确保{<1}}列在之后< / em> Graphics
在列表中。
答案 1 :(得分:12)
问题是VCL中有两种名为TBitmap
的类型。一个在Windows
单位中定义,另一个在Graphics
单位中定义。很明显,您将Windows.TBitmap
传递给期望Graphics.TBitmap
的函数,反之亦然。
您几乎肯定不希望与Windows.TBitmap
有任何关系。因此,解决方案是确保所有单元在使用子句中的Graphics
单元之后列出Windows
单元。这将隐藏Windows.TBitmap
。
我的通灵调试表明,声明TMyClass
的单位在其Graphics
子句中根本不会列出uses
,或者在Graphics
之前列出Windows
1}}。
最后,你会如何自己做这样的事情?好吧,尝试按CTRL +点击TBitmap
中引用的TMyClass
。我相信他们会带你到TBitmap
中声明的Windows
。这应该足以让你知道它不是你写TBitmap
时的意思。