Hallo und Willkommen in den Heiligen Hallen des Wissens und des Wahnsinns
Der Deckungsgrad ist mit
1.0
schon richtig gewählt. Es liegt an der Dicke des Stifts. Füge nach deinem
BeginScene()
mal die Zeile
PaintBox1.Canvas.StrokeThickness := 0.75;
ein und der Effekt verstärkt sich noch!
Es wäre nämlich zu einfach gewesen auf glatten Koordinaten wie (100 | 0) zu zeichnen, du musst jeweils
die halbe Stiftbreite wieder abziehen.
Hier als Beispiel einmal das ständige Abziehen einmal in eine lokale Prozedur "draw" ausgelagert. Im Nachhinein merke ich dass es wohl schlauer gewesen wäre das als
Klassenhelfer zu machen
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
fromPoint: TPointF;
toPoint: TPointF;
draw: TProc<TPointF, TPointF>;
begin
draw :=
procedure(fromPoint, toPoint: TPointF)
var
offset: Single;
begin
offset := PaintBox1.Canvas.StrokeThickness / 2.0;
fromPoint.Offset(-offset, -offset);
toPoint.Offset(-offset, -offset);
PaintBox1.Canvas.DrawLine(fromPoint, ToPoint, 1.0);
end;
PaintBox1.Canvas.BeginScene();
try
fromPoint := TPointF.Create(10, 10);
toPoint := fromPoint; toPoint.Offset(100, 0);
draw(fromPoint, toPoint);
fromPoint.Offset(100, 0); toPoint.Offset(0, 100);
draw(fromPoint, toPoint);
fromPoint.Offset(0, 100); toPoint.Offset(-100, 0);
draw(fromPoint, toPoint);
fromPoint.Offset(-100, 0); toPoint.Offset(0, -100);
draw(fromPoint, toPoint);
finally
PaintBox1.Canvas.EndScene();
end;
end;