使用此代码我想绘制一个矩形:
procedure TForm1.Button1Click(Sender: TObject);
var rectangle:Trect;
begin
fx:=400;
fy:=400;
sc1:=base/fx;
sc2:=altezza/fy;
sc:=max(sc1, sc2);
lx:=fx*sc;
ly:=fy*sc;
xc:=base/2;
yc:=altezza/2;
x1:=xc-(lx/2); x2:=xc+(lx/2); y1:=yc-(ly/2); y2:=yc+(ly/2);
panel1.Repaint;
panel1.Canvas.Brush.color:= clblack;
panel1.Canvas.line((panel1.width div 2),0,(panel1.Width div 2), panel1.Height);
panel1.Canvas.line(0,(panel1.height div 2), panel1.Width,(panel1.Height div 2));
panel1.canvas.brush.style:=bsclear;
Rectangle:=rect(x1, y1, x2, y2);
end;
但是有一个问题,因为我必须只使用整数值。
是否可以使用实际值来绘制TCanvas
的矩形?
答案 0 :(得分:2)
简单的答案是否定的。由TCanvas表示的图形设备使用具有积分坐标的坐标系。如果您的坐标是实数值,则需要在坐标系和积分设备坐标之间使用某种形式的映射。
然而,在这种情况下,它看起来并不复杂。您本身不需要实际有价值的坐标。你只有真正的价值才有真正的价值观。也许您需要做的就是使用整数除法,而不是实际除法。或者你可能更喜欢Round。
更大的问题是您的代码位于错误的位置。你不能在按钮处理程序中绘画。 Windows将不记得你画的是什么。下一次窗口无效时,它会要求面板自行刷新,你的矩形将消失。绘画代码需要在重写的Paint方法或等效内容中。也许你需要一个油漆盒控制。