早说嘛:
var
X1, Y1 : integer;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//当鼠标按下去的时候,如果按下了 Shift 键,那么记录起始点
if (ssShift in Shift) then
Canvas.MoveTo(X, Y);
X1 := X;
Y1 := Y;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
D, DX, DY : integer;
begin
//当鼠标抬起的时候,如果按下了 Shift 键,那么画线
if (ssShift in Shift) then
begin
//求绝对距离
D := Abs(Min(X - X1, Y - Y1));
if X > X1 then
DX := D
else
DX := -1*D;
if Y > Y1 then
DY := D
else
DY := -1*D;
Canvas.LineTo(X1 + DX, Y1 + DY);
end;
end;
function TForm1.Min(A, B: integer): integer;
begin
//求最小值
if A < B then
result := A
else
result := B;
end;