AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas RoundRect aber wie

Ein Thema von DieDolly · begonnen am 14. Jun 2021 · letzter Beitrag vom 16. Jun 2021
Antwort Antwort
Seite 2 von 2     12   
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#11

AW: Canvas RoundRect aber wie

  Alt 16. Jun 2021, 09:17
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Canvas RoundRect aber wie

  Alt 16. Jun 2021, 10:01
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;
Miniaturansicht angehängter Grafiken
roundrect.png  

Geändert von TiGü (16. Jun 2021 um 10:03 Uhr) Grund: Bild hinzugefügt
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#13

AW: Canvas RoundRect aber wie

  Alt 16. Jun 2021, 12:43
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Canvas RoundRect aber wie

  Alt 16. Jun 2021, 13:19
Falls jemand die Hilfe immer noch nicht gefunden hat:
Beitrag #5?
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Canvas RoundRect aber wie

  Alt 16. Jun 2021, 16:39
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).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
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