Delphi 6:TImage宽度和高度属性报告错误值?

时间:2010-10-09 20:33:01

标签: delphi canvas height width timage

我对TImage组件的宽度和高度属性有一个相当奇怪的问题。作为测试,我通过取TImage宽度和高度的中点并在那里绘制点以使其居中(centerPoint2D是TPoint),在TImage组件的中心绘制一个红点(应该是什么):

// The center point is the center of the display area.
centerPoint2D.X := Trunc(Image1.Width / 2);
centerPoint2D.Y := Trunc(Image1.Height / 2);

Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Ellipse(centerPoint2D.X - 5, centerPoint2D.Y - 5, centerPoint2D.X + 5, centerPoint2D.Y + 5);

红点不会出现在TImage的中心,而是出现在它的正下方和右侧。此外,我打印到组件的任何文本都显示为拉伸。就好像TImage比报告的尺寸大得多,大于从视在视口可见的尺寸,就好像可见的被剪裁一样。

其他细节。 TImage控件位于TPanel上,该TPanel位于TFrame上的TGroupBox上。但是,所有这些组件的Align属性都设置为alClient。 TFrame本身的Align属性设置为alNone。但是,位于Form上的它的实例在设计时将Align属性设置为alClient。换句话说,它不应该是TImage组件大于在运行时可见的部分。此外,报告的尺寸似乎与屏幕上显示的组件大小相符,但我没有“像素标尺”实用程序来客观地确认。

1 个答案:

答案 0 :(得分:4)

TImage控件通常用于显示图像文件(例如* .bmp文件)。因此,控件可以加载任何维度的图像,然后使用指定的属性(CenterStretchProportional)在控件的画布上渲染它。考虑到这一点,表单上TImage控件的宽度与相关位图的Canvas,Canvas或其可能的大小不同,这并不奇怪。

如果您不加载图片,而是希望使用画布绘制控件,则应使用TPaintBox。或者为什么不直接在TForm上绘制?