用rectangle(p1.x,p1.y,p2.x.,p2.y)绘图的时候,第二点p2在第一点p1的上方(p2.y<p1.y)和在第一点的下方(p2.y>p1.y)相比:
点p1.x,p1.y----到p2.x,p1.y(也就是横线)居然会上下移动一格!!!
相当于p1.y有一个点距的变化!!!不信你试试

解决方案 »

  1.   

    我这样试没有问题的procedure TForm1.Button1Click(Sender: TObject);
    begin
      self.Canvas.Rectangle(500,500,50,50);
      self.Canvas.Rectangle(50,50,500,500);
    end;
      

  2.   

    procedure TForm1.Button4Click(Sender: TObject);
    var
      p1, p2: TPoint;
    begin
      p1.X :=10;
      p1.Y := 10;
      p2.x:=50;
      p2.Y := 50;
     rectangle(GetDC(Self.Handle),p1.x,p1.y,p2.x,p1.y);  //没有任何问题啊// rectangle(GetDC(Self.Handle),p1.x,p1.y,p2.x,p1.y+1);
    end;
      

  3.   

    form1.Canvas.MoveTo(10,300);
    form1.Canvas.LineTo(800,300);
    form1.Canvas.Rectangle(200,300,400,100);
    form1.Canvas.Rectangle(410,300,750,400);有三条共线,明显能看到,上面的矩形和直线不重合不知道你的是不是重合,我试了两台机子都这样!
    这有什么良方保证共线呢?视觉上要共线!!
      

  4.   

    运行后看起来确实象楼主描述的一样。但后来一想,应该就是因为那1个像素的问题。
    比如,把LineTo换成下面这种样式实现,测试一下:
    form1.Canvas.Rectangle(10,300,800,300);//啥也没有画form1.Canvas.Rectangle(10,300,800,301);//直线一条有点晕。过后再想。