首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在组件中使用TImage

在组件中使用TImage
EN

Stack Overflow用户
提问于 2015-03-25 05:36:27
回答 3查看 1.2K关注 0票数 0

我试图在组件中使用Timage,但在" Image.Parent:=Self;" as 'incompatible type 'TWinControl' and 'TGasTurbine'上收到了一个编译器错误。

所以TGasTurbine是我的组件名

这是我的油漆程序。我该怎么办?

代码语言:javascript
复制
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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-25 06:03:06

您的组件的类型是什么?你怎么描述它的类别?

如果您的控件打算成为其他控件的父控件,则它必须是TWinControl的祖先。

编辑: TGraphicControl不能包含其他组件,也不能拥有它们。您必须选择--或者从TWindowControl继承您的类,或者拒绝使用内部TImage,并注意图片存储和绘图(更好)。

更好的方法是描述您的图片使用场景。

以及为什么在油漆过程中创建内部组件?通常,它被多次调用,在每一次重绘下,并且一次又一次地创建新组件(BTW,不释放)--这不是一种明智的方法。

票数 3
EN

Stack Overflow用户

发布于 2015-03-25 07:09:08

不兼容类型'TWinControl‘和'TGasTurbine’

这告诉您控件的父控件必须从TWinControl派生。而且您的TGasTurbine类不是从TWinControl派生的。

虽然你可以改变推导,这将是错误的解决方案。您应该删除TImage控件。您选择了在自定义控件中绘制图像的错误方式。

相反,请在控件中声明一个类型为TBitmap的字段。

代码语言:javascript
复制
FBitmap: TBitmap;

在构造函数中创建并填充它:

代码语言:javascript
复制
FBitmap := TBitmap.Create;
FBitmap.LoadFromFile(...);

然后在您的Paint方法中绘制它:

代码语言:javascript
复制
Canvas.Draw(0, 0, FBitmap);

请记住释放析构函数中的位图。

您可能会更好地将图像链接为资源而不是外部文件。

票数 3
EN

Stack Overflow用户

发布于 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作为其内部组件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29248201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档