![]() |
Canvas: Wie Formen kombinieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe Bildobjekt und ein TCanvas. Ich möchte dort mit dem Canvas nun ein Rechteck aufmalen, das durch einen Kreis ausgefüllt wird. Der Bereich im Rechteck, den der Kreis abdeckt soll transparent sein. Alle anderen Bereich im Rechteck sollen mit dem Brush des Rechtecks gefüllt werden. Im Anhang die rote Fläche. Transparent heißt, der Inhalt vom Bildobjekt soll dort durchscheinen. Es muss wirklich irgendwie transparent gezeichnet werden. Sich eine Kopie vom Bildobjekt zu holen und die dann am Ende drübermalen geht nicht. Wer hat eine Idee? |
AW: Canvas: Wie Formen kombinieren?
Ich bin nicht zu 100% sicher, aber ich glaube, mit Regions ist das zu machen.
|
AW: Canvas: Wie Formen kombinieren?
Also die Regions sind schon der richtige Weg
Und alternativ kann man das Ganze auch erstmal auf ein temporäres Bild zeichnen und dann komplett rüberkoperen. - Rechteck zeichnen (komplett ausgefüllt) - Kreis zeichnen (mit mit einer farbe füllen, welche man als Transparent definiert) - dann alles ins Zielbild einfügen und dabei die gewünschte Farbe als Transparent deklarieren, so daß diese nicht mitkopiert wird. |
AW: Canvas: Wie Formen kombinieren?
unter
![]() |
AW: Canvas: Wie Formen kombinieren?
Regions funktionieren auch ohne GDI+, sie sehen dann nur nicht so hübsch aus ;)
|
AW: Canvas: Wie Formen kombinieren?
Ich habs jetzt mit einer Paintbox und 2 Regionen probiert (Kreis+Rechteck), die kombiniert werden. Leider verändert das gar nichts an der Ausgabe. D.h. der Kreisausschnitt ist nicht transparent sondern deckt mit dem Brush alles ab. Wo liegt der Fehler:
Delphi-Quellcode:
var
r: TRect; RgnR, RgnK: HRgn; begin r.Left := 10; r.top := 20; r.Right := 50; r.Bottom := 60; RgnR := CreateRectRgn(r.Left, r.top, r.Right, r.Bottom); RgnK := CreateEllipticRgn(r.Left, r.top, r.Right, r.Bottom); CombineRgn(RgnR, RgnR, RgnK, RGN_DIFF); SetWindowRgn(PaintBox.Canvas.Handle, RgnR, True); PaintBox.Canvas.Rectangle(0, 0, PaintBox.Width, PaintBox.Height); PaintBox.Canvas.brush.Color := clRed; PaintBox.Canvas.Rectangle(r); PaintBox.Canvas.brush.Color := clYellow; PaintBox.Canvas.Ellipse(r); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz