probier mal folgende Funktion:
Delphi-Quellcode:
procedure DrawLine(ACanvas: TCanvas; x1, y1, x2, y2: Integer; AColor: TColor);
var
lCount,
lDistanceX,
lDistanceY,
lStepSize : Integer;
begin
lDistanceX := x2 - x1;
lDistanceY := y2 - y1;
if Abs(x2 - x1) < Abs(y2 - y1) then
begin
lCount := 0;
if (lDistanceY > 0) then
lStepSize := +1
else
lStepSize := -1;
while (lCount <> lDistanceY) do
begin
ACanvas.Pixels[x1 + Trunc(lCount * lDistanceX / lDistanceY), y1 + lCount] := AColor;
lCount := lCount + lStepSize;
end;
end
else
begin
lCount := 0;
if (lDistanceX > 0) then
lStepSize := +1
else
lStepSize := -1;
while (lCount <> lDistanceX) do
begin
ACanvas.Pixels[x1 + lCount, y1 + Trunc(lCount * lDistanceY / lDistanceX)] := AColor;
lCount := lCount + lStepSize;
end;
end;
ACanvas.Pixels[x2, y2] := AColor;
end;
Wie bereits erwähnt geht es hier um ein Verhältnis damit die Linie nicht 45 Grad wird und nicht wie du es machst entweder +1 oder 0. Sondern der X Punkt muss sich zum Y Punkt in dem Verhältnis ändern wie das Verhältnis der Länge der Linien ist.