我在PaintBox上画了很多圆
后来由于项目需要又要增加一个画线条的功能
线条需要很粗
但是发现调整了pen的width属性后
以前画的圆的边框宽度也跟着增加了
所以决定用矩形框代替线条
已知2点坐标 画一个矩形 宽度为6 长度为2点之间距离
2点恰好位于矩形的2个短边中间
如何得到画矩形的2个坐标的参数?也就是左上和右下点的坐标

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
        FOpt,   
              FCpt:   TPoint;   
              procedure   DrawRectangle(AOpt,   ACpt:   TPoint);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure   TForm1.DrawRectangle(AOpt,   ACpt:   TPoint);   
      begin   
          With   Canvas   do   
          begin   
              //左垂   
              MoveTo(AOpt.X,   AOpt.Y);   
              LineTo(AOpt.X,   ACpt.Y);   
        
              //右垂   
              MoveTo(ACpt.X,   AOpt.Y);   
              LineTo(ACpt.X,   ACpt.Y);   
        
              //上水   
              MoveTo(AOpt.X,   AOpt.Y);   
              LineTo(ACpt.X,   AOpt.Y);   
        
              MoveTo(AOpt.X,   ACpt.Y);   
              LineTo(ACpt.X,   ACpt.Y);   
          end;   
      end;   
        
      procedure   TForm1.FormMouseDown(Sender:   TObject;   Button:   TMouseButton;   
          Shift:   TShiftState;   X,   Y:   Integer);   
      begin   
          With   Canvas   do   
          begin   
              if   Shift   =   [ssleft]   then   
              begin   
                  Canvas.Pen.Mode   :=   pmNot;   
                  Canvas.Pen.Color   :=   clRed;   
                  FOpt   :=   Point(X,   Y);   
                  FCpt   :=   Point(X,   Y);   
                  MoveTo(X,   Y);   
                  LineTo(X,   Y)   
              end;   
          end;   
      end;   
        
      procedure   TForm1.FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,   
          Y:   Integer);   
      begin   
          With   Canvas   do   
          begin   
              if   Shift   =   [ssleft]   then   
              begin   
                  DrawRectangle(FOpt,   FCpt);   
                  FCpt   :=   Point(X,   Y);   
                  DrawRectangle(FOpt,   FCpt);   
                  exit;   
        
                  MoveTo(FOpt.X,   FOpt.Y);   
                  LineTo(FCpt.X,   FCpt.Y);   
                  FCpt   :=   Point(X,   Y);   
                  MoveTo(FOpt.X,   FOpt.Y);   
                  LineTo(FCpt.X,   FCpt.Y)   
              end;   
          end;   
      end;   
        
      end.   参考一下
      

  2.   

    你为什么不用画线呢,画线之前保存之前的pen的属性,画完后再回复pen的属性,这样后面画的圆就不会跟着变了
      

  3.   

    这个画矩形的代码跟API的没什么区别啊
      

  4.   

    基本就是这样的.
    pen.width:=默认
    pen.width:=12;
    //画矩形
    pen.width:=默认