tagBitmap @ DELPHI ??? 什么类型?

Fra*_*anz 4 delphi

我收到一个错误:

[DCC错误] Unit_TProcessClass.pas(334):E2010不兼容类型:'TBitmap'和'tagBITMAP'

该类定义为

TMyClass = Class 
private
  MyBMP : TBitmap;
  property aBMP : TBitmap read MyBMP write MyBMP;
Run Code Online (Sandbox Code Playgroud)

代码就像

processABitmap(aMyClass.aBMP) ;  -> here is the compile error !!! 
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 13

问题是TBitmapVCL中有两种类型的命名.一个在Windows单元中定义,一个在Graphics单元中定义.很明显,你正在Windows.TBitmap转向期望的功能Graphics.TBitmap,反之亦然.

你几乎肯定不想和任何事情有关Windows.TBitmap.因此,解决办法是确保所有的单位列出了Graphics单位Windowsuses子句中单元.这将具有隐藏的效果Windows.TBitmap.

我的通灵调试表明声明的单元在其子句中TMyClass根本没有列出,或者之前列出.GraphicsusesGraphicsWindows

最后,你会如何自己做这样的事情?好吧,尝试按CTRL +单击TBitmap引用的TMyClass.我相信他们会把你带到TBitmap宣告中Windows.这应该足以让你知道这不是你写作时的意思TBitmap.


And*_*and 12

问题是你将VCL位图类混淆Windows.TBitmap(也就是tagBitmap描述Windows API意义上的位图的记录)Graphics.TBitmap.

所以,你要么想要

var
  b: Windows.TBitmap;
Run Code Online (Sandbox Code Playgroud)

或者(更有可能)

var
  b: Graphics.TBitmap;
Run Code Online (Sandbox Code Playgroud)

如果省略该单位,则将使用最后引用的单位.例如,如果您的uses子句看起来像

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
Run Code Online (Sandbox Code Playgroud)

然后TBitmap意味着Graphics.TBitmap,这就是你通常想要的.

因此,您的问题的解决方案是您需要添加Graphics到某个uses子句,或者您需要确保在列表中Graphics列出之后 Windows.