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 中命名了两种类型。一个在Windows单元中定义,一个在Graphics单元中定义。显然,您正在传递Windows.TBitmap给期望的函数Graphics.TBitmap,反之亦然。

你几乎肯定不想与Windows.TBitmap. 因此,解决方案是确保您的所有单位在使用子句中的Graphics单位之后列出单位。Windows这样会有隐藏的效果Windows.TBitmap

我的心理调试表明,TMyClass声明的单元要么根本不在Graphicsuses子句中列出,要么Graphics在之前列出Windows

最后,您将如何自己解决这样的问题?好吧,尝试按 CTRL 键并单击TBitmap. TMyClass我相信他们会带你去TBitmap申报的Windows。这应该足以让您确定它不是您在编写时所指的类型TBitmap

于 2013-03-20T19:13:29.030 回答
12

问题是您将VCL 位图类Windows.TBitmap(又名tagBitmap,描述 Windows API 意义上的位图的记录)与Graphics.TBitmapVCL 位图类混淆了。

所以,你要么想要

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 回答