Всё разобрался! Всем кто попытался вникнуть пасибо)
А для будущих поколения вот полноценный код.
Код:
var
Form1: TForm1;
abux,abuy:integer;
implementation
{$R *.dfm}
procedure TForm1.Brezenhems(x0, y0, x1, y1: integer);
var pn, //risinajosha parametra vertiba
n, //iteracija numurs
dx, dy, //x1-x0, y1-y0
xn, yn, //x un y koordinashu vertibas katra soli
xi, yi:integer; //(-1 vai 1)
begin
xn:=x0; // funkcija otpravila zna4enije koordinat iz edit boksov(dljazapisi koordinat na kazdom 6agu)
yn:=y0; // funkcija otpravila zna4enije koordinat iz edit boksov(dljazapisi koordinat na kazdom 6agu)
dx:=abs(x1-x0); // NAklon liniji
dy:=abs(y1-y0); // NAklon liniji
If x1>x0 then
xi:=1 else xi:=-1;{vi4isljaet polozitelnoje li napravlenije}
If y1>y0 then
yi:=1 else yi:=-1; {vi4isljaet polozitelnoje li napravlenije}
Image1.Canvas.Pixels[x0,y0]:=clRed;
if dx>dy then //opredeljenije neklonnosti, tipo po x ili y pro6losj bol6e
begin
n:=-1;
pn:= 2*dy - dx;
while xn<>x1 do //cikl zapisi vsex etix zna4enij v matricu
begin
If pn>=0 then
begin
n:=n+1;
xn:=xn+xi;
yn:=yn+yi;
pn:=pn+2*dy-2*dx;
end
else
begin
n:=n+1;
xn:=xn+xi;
pn:=pn+2*dy;
end;
{kakije zna4enija budut propisivatsaj v matricu}
Image1.Canvas.Pixels[xn, yn]:=clGreen;
StringGrid1.RowCount:=n+1;
StringGrid1.Cells[0, n+1]:= IntToStr(n);
StringGrid1.Cells[1, n+1]:= IntToStr(xn);
StringGrid1.Cells[2, n+1]:= IntToStr(yn);
StringGrid1.Cells[3, n+1]:= IntToStr(pn);
{konec kakije zna4enija budut propisivatsaj v matricu}
end;
end;
if dx<dy then
begin
n:=-1;
pn:=2*dx-dy;
while yn<>y1 do
begin
if Pn>0 then
begin
xn:=xn+xi;
yn:=yn+yi;
Pn:=Pn+2*dx-2*dy;
end
else //pn<=0
begin
xn:=xn;
yn:=yn+yi;
Pn:=Pn+2*dx;
end;
Image1.Canvas.Pixels[xn, yn]:=clgreen;
StringGrid1.RowCount:=n+1;
StringGrid1.Cells[0, n+1]:=IntToStr(n); // iterac nr
StringGrid1.Cells[1, n+1]:=IntToStr(xn); //x
StringGrid1.Cells[2, n+1]:=IntToStr(yn); //y
StringGrid1.Cells[3, n+1]:=IntToStr(pn); //risin param vert
end;
end;
end;
{verxnjaja stroja matrici}
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Pen.Color:=clWhite;
StringGrid1.Cells[0,0]:='NR';
StringGrid1.Cells[1,0]:='Xn';
StringGrid1.Cells[2,0]:='Yn';
StringGrid1.Cells[3,0]:='Pn';
end;
{kenoc verxnjaja stroja matrici}
{fiksacija kursora koordinat}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label5.Caption:='X='+IntToStr(x)+', y='+intTOStr(y);
end;
{konec fiksaciji kursora koordinat}
{otpravka koordinat ir edit boksov v funkciju}
procedure TForm1.Button2Click(Sender: TObject);
var x0, y0, x1, y1:integer;
begin
x0:=((Image1.Height) div 2);
y0:=((Image1.Width) div 2);
x1:=StrToInt(Edit3.Text);
y1:=StrToInt(Edit4.Text);
brezenhems(x0, y0, x1, y1);
end;
{konec otpravka koordinat ir edit boksov v funkciju}
{zamazivanije kvadratom vsego narisovannogo i stiranije zna4enij v matrice}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(0,0, image1.Width, Image1.Height);
For i:=1 to StringGrid1.RowCount do
For j:=0 to StringGrid1.ColCount do
StringGrid1.Cells[i,j]:=' ';
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var x0, y0, x1, y1,abix,abiy:integer;
begin
if (Button = mbRight)and(Shift=[])then begin
x0:=abux;
y0:=abuy;
x1:=X;
y1:=Y;
Edit3.Text:=IntToStr(X);
Edit4.Text:=IntToStr(Y);
brezenhems(x0, y0, x1, y1);
end
else
begin
x0:=((Image1.Height) div 2);
y0:=((Image1.Width) div 2);
x1:=X;
y1:=Y;
Edit3.Text:=IntToStr(X);
Edit4.Text:=IntToStr(Y);
brezenhems(x0, y0, x1, y1);
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
abux:=X;
abuy:=Y;
Form1.Edit1.Text:=IntToStr(X);
Form1.Edit2.Text:=IntToStr(Y);
end;
end.