1

我对 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 组件大于它在运行时可见的部分的情况。此外,报告的尺寸确实与我眼中显示在屏幕上的组件大小相匹配,但我没有“像素标尺”实用程序来客观地确认这一点。

4

1 回答 1

4

TImage控件通常用于显示图像文件(例如 *.bmp 文件)。因此,控件可以加载任何尺寸的图像,然后使用指定的属性( 、 和 )将其呈现在控件的Center画布StretchProportionalTImage考虑到这一点,表单上控件的宽度与 Canvas、相关位图的 Canvas 或其他任何东西的大小不同也就不足为奇了。

如果你不加载图像,而是想要一个带有画布的控件来绘制,你应该使用TPaintBox. 或者为什么不直接画上TForm

于 2010-10-09T20:44:19.477 回答