-2

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

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

4

1 回答 1

2

简单回答是不。由 TCanvas 表示的图形设备使用具有积分坐标的坐标系。如果您的坐标是真实值,那么您需要在坐标系和整体设备坐标之间使用某种形式的映射。

但是,在这种情况下,它看起来并没有那么复杂。你不需要真正有价值的坐标本身。你只有真正的价值,因为你使用了真正的除法。也许您需要做的就是使用整数除法,div,而不是真正的除法。或者你可能更喜欢圆形。

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

于 2013-10-19T21:11:23.180 回答