tagBitmap @ DELPHI ???什么类型?

时间:2013-03-20 19:10:35

标签: delphi

我收到错误:

  

[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 !!! 

2 个答案:

答案 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时的意思。