Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Canvas RoundRect aber wie (https://www.delphipraxis.net/208124-canvas-roundrect-aber-wie.html)

Redeemer 16. Jun 2021 08:17

AW: Canvas RoundRect aber wie
 
Dann beginn halt mit einem Delphi-Referenz durchsuchenRectangle. Die ersten vier Parameter sind nämlich identisch. Und dann beginnst du mit ganz kleinen Zahlen (2 oder 3) für X3 und Y3.

Und mit "was falsches" kann hier auch keiner was anfangen. Es ist nicht "falsch", es ist nur das, was du gesagt hast. Anhand der Eingabewerte und des sich ergebenden Bildes kannst du durch kleinere Veränderungen selbst lernen, was was ist. Wenn du nicht in der Lage bist, ein Rechteck zu zeichnen, kommen wir hier nicht weiter.

TiGü 16. Jun 2021 09:01

AW: Canvas RoundRect aber wie
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche es nochmal mit ein bisschen guten Willen und Beispielquelltext.
Bitte einfach ein neues VCL-Projekt erstellen, einen Paint-Eventhandler zusammenklicken und folgenden Quelltext reinkopieren:

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var
    R: TRect;
    X, Y: Integer;
begin
    Self.Canvas.Pen.Width := 3;

    Self.Canvas.Brush.Color := clWebYellowGreen;
    Self.Canvas.Pen.Color := clWebGreen;

    R := Self.ClientRect;

    R.Offset(0, R.Height div 2);

    X := Round(R.Width * 0.1);
    Y := Round(R.Height * 0.1);
    R.Inflate(-X, -Y);

    Self.Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);

    Self.Canvas.Brush.Color := clWebLavender;
    Self.Canvas.Pen.Color := clWebChocolate;

    X := Round(R.Width * 0.1);
    Y := Round(R.Height * 0.1);
    R.Inflate(-X, -Y);

    Self.Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 30, 30);

    Self.Canvas.Brush.Color := clWebLightYellow;
    Self.Canvas.Pen.Color := clWebFirebrick;

    X := Round(R.Width * 0.1);
    Y := Round(R.Height * 0.1);
    R.Inflate(-X, -Y);

    Self.Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 10, 10);

    Self.Canvas.Brush.Color := clWebLightSlateGray;
    Self.Canvas.Pen.Color := clWebOrchid;

    X := Round(R.Width * 0.1);
    Y := Round(R.Height * 0.1);
    R.Inflate(-X, -Y);

    Self.Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, X, Y);
end;

Blup 16. Jun 2021 11:43

AW: Canvas RoundRect aber wie
 
Falls jemand die Hilfe immer noch nicht gefunden hat: http://docwiki.embarcadero.com/Libra...nvas.RoundRect

Benötigt werden nur 2 Punkte zum Zeichnen eines Rechtecks.
Delphi-Quellcode:
 PTL := ARect.TopLeft;    // links oben
 PBR := ARect.BottomRight; // rechts unten
Für ein Rechteck mit runde Ecken muss man zusätzlich noch den Breite und Höhe der Rundungen festlegen.
Delphi-Quellcode:
  Rx := 10; // Radius einer runden Ecke horizontal
  Ry := 5; // Radius einer rundne Ecke vertical
Damit die unteren Ecken nicht sichtbar sind, vergrössert man das Rechteck um den Radius der unteren runden Ecken.
Damit ragt das Rechteck aus dem Zeichenbereich hinaus.
Delphi-Quellcode:
  {Rahmen}
  Canvas.Pen
  {Inhalt}
  Canvas.Brush
  {Zeichnen}
  Canvas.RoundRect(PTL.X, PTL.y, PBR.x, PBR.y + Ry, Rx * 2, Ry * 2);
Leider werden runde Excken, Kreisbögen oder schräge Linien nur unbefriedigend dargestellt.
Für bessere Qualität müssten die Zeichenwerkzeuge Pixel z.T. halbtransparent zeichnen.

TiGü 16. Jun 2021 12:19

AW: Canvas RoundRect aber wie
 
Zitat:

Zitat von Blup (Beitrag 1491127)
Falls jemand die Hilfe immer noch nicht gefunden hat:

Beitrag #5? :warn:

striderx 16. Jun 2021 15:39

AW: Canvas RoundRect aber wie
 
Zitat:

Zitat von Blup (Beitrag 1491127)
Leider werden runde Excken, Kreisbögen oder schräge Linien nur unbefriedigend dargestellt.
Für bessere Qualität müssten die Zeichenwerkzeuge Pixel z.T. halbtransparent zeichnen.


Das kann man gut mit GDI+ machen (SmoothingModeAntiAlias). Wenn man die unteren runden Ecken nicht braucht, reichen die beiden oberen Kreisbögen und die Basis-Linie - den Rest kann man von GDI+ ergänzen lassen (CloseFigure).


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz