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