我试图在组件中使用Timage,但在" Image.Parent:=Self;" as 'incompatible type 'TWinControl' and 'TGasTurbine'上收到了一个编译器错误。
所以TGasTurbine是我的组件名
这是我的油漆程序。我该怎么办?
Procedure TGasTurbine.Paint;
var
Image: TImage;
begin
Inherited;
Image := TImage.Create(self);
Image.Parent:=Self;
Image.Height := 100;
Image.Width := 100;
Image.Stretch:=True;
Image.Picture.LoadFromFile('H:\Component\Automation\Pump.Bmp');
end;发布于 2015-03-25 06:03:06
您的组件的类型是什么?你怎么描述它的类别?
如果您的控件打算成为其他控件的父控件,则它必须是TWinControl的祖先。
编辑: TGraphicControl不能包含其他组件,也不能拥有它们。您必须选择--或者从TWindowControl继承您的类,或者拒绝使用内部TImage,并注意图片存储和绘图(更好)。
更好的方法是描述您的图片使用场景。
以及为什么在油漆过程中创建内部组件?通常,它被多次调用,在每一次重绘下,并且一次又一次地创建新组件(BTW,不释放)--这不是一种明智的方法。
发布于 2015-03-25 07:09:08
不兼容类型'TWinControl‘和'TGasTurbine’
这告诉您控件的父控件必须从TWinControl派生。而且您的TGasTurbine类不是从TWinControl派生的。
虽然你可以改变推导,这将是错误的解决方案。您应该删除TImage控件。您选择了在自定义控件中绘制图像的错误方式。
相反,请在控件中声明一个类型为TBitmap的字段。
FBitmap: TBitmap;在构造函数中创建并填充它:
FBitmap := TBitmap.Create;
FBitmap.LoadFromFile(...);然后在您的Paint方法中绘制它:
Canvas.Draw(0, 0, FBitmap);请记住释放析构函数中的位图。
您可能会更好地将图像链接为资源而不是外部文件。
发布于 2015-03-25 07:12:52
为什么您甚至尝试将TImage组件创建为您自己组件的内部组件?
相反,您应该创建TBitmap来存储图像数据,然后使用StretchDraw http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Graphics.TCanvas.StretchDraw在组件画布上绘制位图。
如果您需要对其他图像类型的支持,也可以使用TPicture作为内部组件,而不是TBitmap,这样您就能够绘制由TImage组件支持的所有受支持的图像类型,TImage组件也将TPicture作为其内部组件。
https://stackoverflow.com/questions/29248201
复制相似问题