Дорабоотал прежний код, чтобы можно было рисовать не только элипс, но и прямоугольник, когда нажата клавиша SHIFT:
Код
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button=mbLeft) and not (ssShift in Shift) then Circle:=true else Circle:=false;
if ssShift in Shift then Rectangle:=true else Rectangle:=false;
if (MouseButtonDown=true) and (Rectangle=true) then // Если кнопка мыши нажата и Rect=true, то... begin Canvas.Rectangle(StartX, StartY, EndX, EndY); // рисуем прямоугльник. EndX:=X; EndY:=Y; // Фиксируем конечные координаты, Canvas.Rectangle(StartX, StartY, EndX, EndY); // и перерисовываем нарисованную фигуру, чтобы избежать следа. end else // Иначе.. if (MouseButtonDown=true) and (Circle=true) then // Если кнопка мыши нажата и Circle=true, то... begin Canvas.Ellipse(StartX, StartY, EndX, EndY); // рисуем элипс. EndX:=X; EndY:=Y; // Фиксируем конечные координаты, Canvas.Ellipse(StartX, StartY, EndX, EndY); // и перерисовываем нарисованную фигуру, чтобы избежать следа. end; end;
Однако заметил один глюк. Когда я отпускаю кнопку мыши и Shift, прям-ник продолжает рисоваться за мышью до тех пор пока не кликнешь левой кнопкой мыши. Как сделать так, чтобы прям-ик не рисовался после отпускание кнопки мыши и клавиши Shift?