Задача такова: Написать программу построения чертежей планиметрии "протягиванием" от выбранной точки с изображением ее промежуточного положения с возможностью обозначения точек и проведения стандартных линий в треугольнике. Как это сделать я впринципе знаю но есть 1 проблема это работа с указателем мыши.Для начала я попытался сделать так чтобы при нажатии на изображение рисовалась линия из текущего положения курсора в положение указателя мыши
procedure TForm1.Image1Click(Sender: TObject); var Mo: TMouse; MX, MY: integer; begin MX := Mo.CursorPos.X; MY := Mo.CursorPos.Y; image1.canvas.LineTo(mx,my); end;
получается чето не то линия проводится явно не к указателю мыши.Может это связано с масштабом Image1 (833x533)?подскажите.И еще какие свойства в Tmouse отвечают за нажатые кнопки мыши?
1. Ввести состояние (см.конечные автоматы) и отслеживать двойной щелчок. 2. Рисовать ручками, проверяя, что та точка, которую ты хочешь закрасить, содержит цвет фона, а не линии.
Чтото не совсем понимаю как это реализовать можно пояснить?
Рисуешь линию по точкам (например, алгоритмом Брезенхема), проверяя при этом, какого цвета точка, которую ты хочешь закрасить. Если цвета фона - рисуешь, если другого цвета - пропускаешь.
Рисуешь линию по точкам (например, алгоритмом Брезенхема), проверяя при этом, какого цвета точка, которую ты хочешь закрасить. Если цвета фона - рисуешь, если другого цвета - пропускаешь.
Эх теперь возникла новая проблема(линии я рисую по пикселям) когда я вытягиваю линию и хочу ее завершить она не остается а закрашивается белым.Почему это происходит я понимаю а вот избежать этого никак не выходит
procedure DrawLine4Connected(x1,y1,x2,y2 : Integer;col:tcolor); var x, y, dx, dy, sx, sy, z, e, i : Integer; Ch : Boolean; begin x := x1; y := y1; dx := Abs(x2-x1); dy := Abs(y2-y1); If x2-x1>0 then sx:=1 else sx:=-1; If y2-y1>0 then sy:=1 else sy:=-1; e := 2*dy-dx; Ch:=dy>=dx; if Ch then begin z := dx; dx := dy; dy := z; end; i := 1; repeat image1.Canvas.Pixels[x, y]:=col; if e<dx then begin if Ch then y := y+sy else x := x+sx; e := e+2*dy; end else begin if Ch then x := x+sx else y := y+sy; e := e-2*dx; end; i := i+1; until i>dx+dy; image1.Canvas.Pixels[x, y]:=col;
end;
var p: TPoint; begin p := Point(Mouse.CursorPos.X, Mouse.CursorPos.Y); p := Image1.ScreenToClient(p); DrawLine4Connected(pfx,pfy,px,py ,clwhite);{закрашиваю предыдущюю линию} {Image1.Canvas.lineto(fx,fy);} if cl=true then begin
Вот тут я и двигаю линию она должна завершатся при событии Image1Click и если при этом она закрашивает линию белым значит почемуто обрабатывается и Image1MouseMove?Что подправить чтоб заработало?