Снова я за помощью.Я сделал программку,рисует правильно.Но только почему-то у меня координаты точек смещаются.Что нужно сделать,чтоб рисовалось там,где я кликаю мышкой?
var Form1: TForm1; x : array [0..49] of integer; y : array [0..49] of integer; implementation
uses ConvUtils;
{$R *.dfm}
procedure TForm1.PaintBox2Click(Sender: TObject); var p : tpoint; i,j : integer; f: string; begin i:=strtoint(edit1.Text); GetCursorPos(p); x[i]:=p.X; y[i]:=p.Y; paintbox2.Canvas.Pen.Color:=clblue; paintbox2.Canvas.Pen.Width:=5; paintbox2.Canvas.moveto(p.x,p.y); paintbox2.Canvas.LineTo(p.x,p.y); paintbox2.Canvas.TextOut(p.X-2,p.Y-2,'P'+inttostr(i)); i:=i+1; edit1.text:=inttostr(i); with paintbox2.Canvas do begin pen.Color:=clgreen; pen.Width:=1; for j:= 0 to i-2 do begin moveto(x[j],y[j]); lineto(x[j+1],y[j+1]); end; end; end; function fac(q: integer): integer; var k,s : integer; begin s:=1; for k:=1 to q do s:=s*k; fac:=s; end; function step (t:real;i:integer):real; var k : integer; s : real; begin s:=1; if i=0 then s:=1 else begin for k:=1 to i do s:=s*t; end; step:=s; end;
function vec(n,i : integer): real; var s : real; begin s:=fac(n)/(fac(i)*fac(n-i)); vec:=s; end; function polin(t:real;n,i:integer):real; var s:real; begin s:=vec(n,i)*step(t,i)*step(1-t,n-i); polin:=s; end;
function bezex (n : integer; t:real):integer; var i : integer; s : real; begin s:=0; for i:=0 to n do s:=s+x[i]*polin(t,n,i); bezex:=round(s); end;
function bezey (n : integer; t:real):integer; var i : integer; s : real; begin s:=0; for i:=0 to n do s:=s+y[i]*polin(t,n,i); bezey:=round(s); end;
procedure TForm1.Button1Click(Sender: TObject); var t,a,b:real; n:integer; begin n:=strtoint(edit1.text)-1; t:=0;
while t<=1 do begin with paintbox2.Canvas do begin pen.Width:=3; pixels[bezex(n,t),bezey(n,t)]:=edit2.color; end; t:=t+0.0001; end;
end;
procedure TForm1.Button2Click(Sender: TObject); begin paintbox2.Repaint; edit1.Text:='0';
end;
procedure TForm1.ComboBox1Change(Sender: TObject); var s: string; begin s:=combobox1.Text; edit2.color:=StringToColor(s); end;
procedure TForm1.Button3Click(Sender: TObject); begin close; end;