4

我已将我TImage.Canvas在 Delphi 2009 中使用的问题缩小到以下可重现的情况:

给定:一个表格,一个TImageTLabelTButton它。被TImage锚定到所有四个边缘,因此调整表单大小将调整TImage. 我想要做的是Image1在调整大小后利用我可用的最大区域。所以在我的测试用例中,我的按钮OnClick处理程序中有以下代码:


procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption:= IntToStr (Image1.Width)+' x '+IntToStr(Image1.Height);
  Image1.Canvas.Pen.Color:= 0;
  Image1.Canvas.Rectangle(0,0,Image1.Width, Image1.Height);
end;
您会看到,如果调整了表单的大小Image1.Width并按.Height预期进行了更改,但是如果调整后的表单大于原始表单,则绘制的矩形将是不完整的,仅在之前存在的相同区域上绘制。

我如何让它使用整个调整大小的区域?

对于它的价值,在我玩过的原始问题中Image1.Stretch,这允许我在调整大小时使用更多区域,但会导致我的绘图被扭曲(不需要)。如果我也使用Image1.Proportional,那就更好了,但我仍然无法使用可用的全部区域。Image1.AutoSize似乎也没有对我做任何有用的事情。

任何帮助表示赞赏。

4

2 回答 2

8

在表单中添加 OnResize 事件:

procedure TForm1.FormResize(Sender: TObject);
begin
  Image1.Picture.Bitmap.Width := Image1.Width;
  Image1.Picture.Bitmap.Height := Image1.Height;
end;

此外,如果您使用该组件进行绘图,而不是显示来自文件等的图像,请考虑使用 TPaintBox 而不是 TImage。

于 2009-10-20T09:23:21.633 回答
3

也许您还必须调整 Image1.Picture.Width/Height 或 Image1.Picture.Bitmap.Width/Height。

于 2009-10-20T09:18:00.597 回答