Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

TLine - Canvas an Line ausrichten

  Alt 6. Mär 2013, 18:52
Ich erstelle z.Z eine TLine Klasse (Shape).

Dabei habe Ich folgendes Problem: Damit die Line vollständig in das Canvas hineinpasst, muß man beim Zeichnen der Linie Offsets abziehen. Wenn man das aber tut, wird die Linie zwar schön dargestellt (Siehe Paint), aber sie stimmt nicht mehr, weder Start- noch Endpunkt. Man sieht auch, daß der Winkel falsch ist (Siehe Anlage).

Ich müßte die ganze Komponente andersrum aufziehen. Zwei Eckpunkte vorgeben und die Komponentengröße wird dann entsprechend berechnet (statt die Linie einzupassen). Es wäre auch schön, wenn das auch schon zur Designzeit so angezeigt werden könnte.

Da ich von Grafikprogrammierung nur wenig Ahnung habe, wolle ich mal fragen, wie könnte man denn so was machen? TLine ist z.Z. von TGraphicControl abgeleitet?

Edit: Crosspost vergessen

http://forum.delphi-treff.de/showthr...Sets-erstellen

Delphi-Quellcode:
function TLine.OffSet1: integer;
begin
  Result := FPen.Width div 2;
end;

function TLine.OffSet2: integer;
begin
  Result := OffSet1 + FPen.Width mod 2;
end;

procedure TLine.Paint;
var
  X1, Y1, X2, Y2: Integer;
begin
  with Canvas do
  begin
    Pen := FPen;
    X1 := 0;
    Y1 := 0;
    X2 := Width;
    Y2 := Height;
    if X2 < 0 then
    begin
      Dec(X1, OffSet2);
      Inc(X2, OffSet1);
    end
    else
    begin
      Inc(X1, OffSet1);
      Dec(X2, OffSet2);
    end;
    if Y2 < 0 then
    begin
      Dec(Y1, OffSet2);
      Inc(Y2, OffSet1);
    end
    else
    begin
      Inc(Y1, OffSet1);
      Dec(Y2, OffSet2);
    end;
    MoveTo(X1, Y1);
    LineTo(X2, Y2);
  end;
end;
Zum besseren Verständnis hab ich einem Image die korrekte Line mal gezeichnet.
Angehängte Dateien
Dateityp: pdf TLine.pdf (62,3 KB, 28x aufgerufen)

Geändert von Bjoerk ( 6. Mär 2013 um 18:55 Uhr)
  Mit Zitat antworten Zitat