【发布时间】:2009-10-20 08:50:53
【问题描述】:
我已将我在 Delphi 2009 中使用 TImage.Canvas 绘制的问题缩小到以下可重现的情况:
给定:一个表格,上面有一个TImage、TLabel 和TButton。 TImage 锚定到所有四个边缘,因此调整表单大小将调整TImage 的大小。我想要做的是在调整大小后利用Image1 的最大可用区域。所以在我的测试用例中,我的 Button 的 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 似乎也没有做任何对我有用的事情。
任何帮助表示赞赏。
【问题讨论】:
-
如果你想要一些可以绘画的东西,TImage 是错误的选择。 TImage 用于显示图形。如果您希望它看起来不同,请更改底层图形,然后刷新图像。如果您想直接在控件上绘制,请改用 TPaintBox。
-
@Rob - 感谢您指出这一点。实际上我两者都做,绘画和展示,在这种特定情况下,TImage 是更方便的选择。