用画布绘制矩形

时间:2013-10-19 14:58:19

标签: delphi canvas lazarus

使用此代码我想绘制一个矩形:

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的矩形?

1 个答案:

答案 0 :(得分:2)

简单的答案是否定的。由TCanvas表示的图形设备使用具有积分坐标的坐标系。如果您的坐标是实数值,则需要在坐标系和积分设备坐标之间使用某种形式的映射。

然而,在这种情况下,它看起来并不复杂。您本身不需要实际有价值的坐标。你只有真正的价值才有真正的价值观。也许您需要做的就是使用整数除法,而不是实际除法。或者你可能更喜欢Round。

更大的问题是您的代码位于错误的位置。你不能在按钮处理程序中绘画。 Windows将不记得你画的是什么。下一次窗口无效时,它会要求面板自行刷新,你的矩形将消失。绘画代码需要在重写的Paint方法或等效内容中。也许你需要一个油漆盒控制。