我对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组件大于在运行时可见的部分。此外,报告的尺寸似乎与屏幕上显示的组件大小相符,但我没有“像素标尺”实用程序来客观地确认。
答案 0 :(得分:4)
TImage
控件通常用于显示图像文件(例如* .bmp文件)。因此,控件可以加载任何维度的图像,然后使用指定的属性(Center
,Stretch
和Proportional
)在控件的画布上渲染它。考虑到这一点,表单上TImage
控件的宽度与相关位图的Canvas,Canvas或其可能的大小不同,这并不奇怪。
如果您不加载图片,而是希望使用画布绘制控件,则应使用TPaintBox
。或者为什么不直接在TForm
上绘制?