вот есть кое какие наработки только после того как поставил 2 точку и начинаю двигать мышью она начинает мерцать сильно и судня по все получать сразу 2 координаты
| Код | Form1: TForm1;
cX,cY,pX,pY,cX2,cY2,Ugol:Integer; bPoint, bLine : boolean; Angle : Integer; //Угол, под катоым пересекаются прямые
implementation
{$R *.dfm}
function PosFromAngle(cX, cY : Integer; rLen : cardinal; Angle: Extended): TPoint; begin //Координаты точки лежащей на окружности, радиусом rLen //с центром cX,cY и углом Angle Result.X:= cX+Round(rLen*Cos(DegToRad(Angle))); Result.Y:= cY+Round(rLen*Sin(DegToRad(Angle))); end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin Cx := X; Cy := Y; bPoint := false; Label1.Caption := 'Точка 1 : X = '+inttostr(cx)+' Y = '+inttostr(cy); Form1.Canvas.Pixels[Cx,cY]:=ClBlack; end; if button = mbRight then begin Cx2 := X; Cy2 := Y; Label2.Caption := 'Точка 2: X = '+inttostr(cx2)+' Y = '+inttostr(cy2); bPoint := true; Form1.Canvas.Pixels[cX2,cY2]:=ClBlack; Ugol := Round (180*arctan2(cY2-cY,cX2-cX)/pi); Label3.Caption := 'Угол = ' + inttostr(ugol); end; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Pos:TPoint; begin Edit1.Text := 'X = '+inttostr(x); Edit2.Text := 'Y = '+inttostr(y); if bPoint then begin //cX,cY, - координаты центра //cx2,cy2 - координаты 2 точки //pX,pY - предыдущие координаты //If (X = pX) and (Y = pY) then exit; //Если перемещения не было - выходим. If (X > cX2) and (Y > cY2) then Angle := Ugol else If (X > cX2) and (Y < cY2) then Angle := Ugol + 90 else If (X < cX2) and (Y < cY2) then Angle := Ugol + 180 else If (X < cX2) and (Y > cY2) then Angle := Ugol + 270 ; Pos := PosFromAngle(cX2, cY2, Round (sqrt(sqr(cX2 - X) + sqr (cY2 - Y))), Angle); SetCursorPos(ClientOrigin.X + pos.X, ClientOrigin.Y + pos.Y); Form1.Canvas.Pixels[X,Y]:=clBlack; abort; //pX := X; //pY := Y; end; end;
procedure TForm1.FormResize(Sender: TObject); begin bPoint := false; end;
end.
|
|