Natürlich muss sich "XPos" bei "MoveTo" und "LineTo" unterscheiden, sonst gibt es keine Linie.
Das ist natürlich Käse, denn Du hast das TextOut vergessen.
Und bei TextOut wird die PenPos auf die rechte obere Ecke gesetzt und somit wird die Linie selbstverständlich gezeichnet.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
XPos: Integer;
YPos: Integer;
begin
XPos := 20;
YPos := 20;
Canvas.MoveTo(XPos, YPos);
Canvas.TextOut(XPos, YPos, 'Text1');
Canvas.LineTo(XPos, YPos);
end;
Diese Ausgabe ergibt den 'Text1' mit einer Linie darüber, obwohl XPos nicht geändert wurde.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.