Deine Linien Komponente bräuchte ein Property mit dem angegeben wird wie die Linie im umgebenden "Kasten" ausgerichtet sein soll.
Delphi-Quellcode:
TLineAlign = (
laLeft, // links anliegend
laRight, // rechts anliegend
laTop, // oben anliegend
laBottom, // unten anliegen
laDiagUp, // diagonal "abwärts"
laDiagDown // diagonal "aufwärts"
)
Bei laLeft und laRight kann die Linie nur gerade von oben nach unten verlaufen.
Der x-Offset beträgt dann 0.5 * Linienbreite.
Bei laTop und laBottom kann die Linie nur waagerecht verlaufen.
Der y-Offset beträgt dann 0.5 * Linienbreite.
Bei laDiagUp und laDiagDown läuft die Linie von Ecke zu Ecke.
Dein Beispiel wäre laDiagDown weil die Linie von links oben nach rechts unten verläuft.
Bei den diagonalen Linien muss man die Endpunkte der Linie jeweils in x- und y-Richtung
um die halbe Linienbreite verschieben.
Es ist sinnvoll sich diese 6 Fälle grafisch aufzuzeichnen (so wie du das im Anhang schon für einen Fall gemacht hast).
Delphi-Quellcode:
procedure CalcOffsets(la:TLineAlign; Linewidth:integer; var offsetX, offsetY:Integer);
begin
offsetX = 0;
offsetY = 0;
case la of
laLeft : offsetX := Linewidth div 2;
laRight: offsetX := -(Linewidth div 2);
laTop : offsetY := Linewidth div 2;
laBottom : offsetY := -(Linewidth div 2);
laDiagUp, laDiagDown :
begin
offsetX := Linewidth div 2;
offsetY := Linewidth div 2;
end;
end;
end;