我正在尝试在我的组件中使用 Timage ,但我在第" Image.Parent:=Self;" as 'incompatible type 'TWinControl' and 'TGasTurbine'
行接收编译器错误
所以'TGasTurbine是我的组件名称
这是我的Paint程序。我该怎么办?
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;
答案 0 :(得分:3)
您的组件的类型是什么?你是怎么描述它的班级的? 如果您的控件旨在成为其他控件的父级,则它必须是TWinControl的祖先。
修改强>
TGraphicControl不能包含其他组件,不能拥有它们。
您必须选择 - 或从TWindowControl继承您的类,或拒绝使用内部TImage,并注意图片存储和绘图(最好)。
最好用你的方式描述你的情景。
为什么要在Paint程序中创建内部组件?通常情况下,在每次重新绘制时都会多次调用它,并且一次又一次地创建新组件(顺便说一句,没有释放) - 这不是一个明智的方法。
答案 1 :(得分:3)
不兼容的类型'TWinControl'和'TGasTurbine'
这告诉您控件的父级必须派生自TWinControl
。而您的TGasTurbine
课程并非来自TWinControl
。
虽然您可以更改派生,但那将是错误的解决方案。您应该删除TImage
控件。您选择了错误的方法在自定义控件中绘制图像。
而是在控件中声明类型为TBitmap
的字段。
FBitmap: TBitmap;
在构造函数中创建并填充它:
FBitmap := TBitmap.Create;
FBitmap.LoadFromFile(...);
然后用Paint
方法绘制它:
Canvas.Draw(0, 0, FBitmap);
请记住在析构函数中释放位图。
您可能最好将图像作为资源而不是外部文件进行链接。
答案 2 :(得分:2)
为什么甚至尝试将TImage组件创建为您自己组件的内部组件?
相反,您应该创建TBitmap来存储图像数据,然后使用StretchDraw http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Graphics.TCanvas.StretchDraw
在组件画布上简单地绘制该位图如果您需要支持其他图像类型,您还可以使用TPicture作为内部组件而不是TBitmap,这样您就可以绘制TImage组件支持的所有支持的图像类型,该组件也将TPicture作为其内部组件。