我有一个 VCL 表单,其中有一个 TImage
,并为所有边设置了 anchor ,因此当用户调整表单大小时,图像大小与新大小相匹配(几乎要填充,有一些按钮)。
但是,当我调整大小时,用于图像 Canvas 的绘图工具会发生倾斜。在调整大小之前,绘图工作正常,然后,我似乎在鼠标单击的其他位置绘图。
如何调整 TImage
的大小并引用新图像的 X/Y 以便正确显示绘图?
鼠标按下:
Drawing := true;
StartX := x;
StartY := y;
EndX := x;
EndY := y;
鼠标移动:
if Drawing then begin
Image1.Canvas.Pen.Mode := pmNotXor;
Image1.Canvas.MoveTo(StartX,StartY);
Image1.Canvas.LineTo(EndX,EndY);
Image1.Canvas.MoveTo(StartX,StartY);
Image1.Canvas.LineTo(x,y);
end;
EndX := x;
EndY := y;
Image1.Canvas.Pen.Mode := pmCopy;
鼠标向上:
Image1.Canvas.MoveTo(StartX,StartY);
Image1.Canvas.LineTo(x,y);
Drawing := false;
最佳答案
我猜图像的 Strech 属性设置为 true。在这种情况下,从图像创建的位图将保持其以前的大小。
当您第一次访问 Image1.Canvas 时,会创建一个大小与 Image1 相同的 TBitmap。调整 image1 大小时,不会调整该位图大小。 Strech = true 将位图渲染为当前图像大小,但位图本身是以前的大小。
只要调整 Image1 的大小,您就可以通过调整 Image1.Picture.Bitmap 来解决此问题。由于 TImage 没有 OnResize,您可以使用 TPanel 作为容器并在其 OnResize 事件中进行调整。
关于delphi - 调整图像大小会使鼠标 X/Y 变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702214/