Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: TLine - Canvas an Line ausrichten

  Alt 6. Mär 2013, 19:27
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;
  Mit Zitat antworten Zitat