Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TCanvas.RoundRect nur teilweise farbig ausfüllen (https://www.delphipraxis.net/103409-tcanvas-roundrect-nur-teilweise-farbig-ausfuellen.html)

s-off 15. Nov 2007 13:10


TCanvas.RoundRect nur teilweise farbig ausfüllen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo zusammen,

ich habe das Ziel, Grafiken im Stil der angehängten Screenshots zu zeichnen.

Beispiel 1:
kein Problem - Brush.Color auf den Blauton setzen und ein RoundRect zeichnen. Das Ausfüllen erfolgt automatisch.
Hinterher noch mit LineTo die Linien drüber und gut ist.
Delphi-Quellcode:
MyCanvas.Brush.Color := clBlue;
MyCanvas.RoundRect(iX1, iY1, iX1 + iX2, iY + iY2, iRundung, iRundung);
Beispiel 2:
Kriege ich gerade noch so hin, obwohl der Weg ziemlich umständlich ist
Delphi-Quellcode:
//ausgefülltes RoundRect oben zeichnen und Höhe um die Länge der Rundung erhöhen
MyCanvas.Pen.Color := StringToColor(sRahmenfarbe);
MyCanvas.Brush.Color := StringToColor(sHintergrundfarbe);
MyCanvas.RoundRect(iX1, iY1, iX1 + iX2, iY1 + iHöheFarbe + iRundung, iRounding, iRounding);

//Rechteck drübermalen, um innere Rundungen zu vermeiden
MyCanvas.Brush.Color := clNone;
MyCanvas.FillRect(Rect(iX1, iY1 + iHöheFarbe, iX1 + iX2, iY + iHöheFarbe + iRundung));

//unausgefülltes RoundRect zeichnen, um den Rahmen zu bekommen
MyCanvas.Brush.Color := clWhite;
MyCanvas.RoundRect(iX1, iY1, iX1 + iX2, iY + iY2, iRundung, iRundung);
Habe es auch mit FloodFill versucht, das haut aber irgendwie überhaupt nicht hin :(

Bei Beispiel 3 habe ich gar keinen Ahnung :(

Also,

zu 1 - sollte klar sein.
zu 2 - unschön - müsste doch auch besser gehen, oder?
zu 3 - geht soetwas überhaupt, ohne große Umstände? Und wenn ja - wie?

Edit: musste noch die Linien in die Bilder einfügen

Namenloser 15. Nov 2007 13:33

Re: TCanvas.RoundRect nur teilweise farbig ausfüllen
 
Hallo.

Ich weiß nicht, ob ich dein Problem richtig verstanden habe, aber eventuell wäre es einfacher, mit Create...Region und SelectObject dem Canvas eine Art Maske zuzuweisen, und auf der zu Zeichnen.

s-off 15. Nov 2007 13:54

Re: TCanvas.RoundRect nur teilweise farbig ausfüllen
 
Da smit den Regions schaue ich mir mal an.

Aber es müsste doch auch mit FloodFill gehen, oder? Habe dazu mal einen separaten Thread aufgemacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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