![]() |
TPaintbox und Canvas
Liste der Anhänge anzeigen (Anzahl: 1)
hi
Bevor ich zu meinem Problem komme noch eine Frage: Wenn ich eine Komponente brauche die einfach nur zum zeichnen genutzt werden soll ist das Paintbox das richtige? OK nun meine eigentliche Frage: Ich habe mir meine Eigene Komponente von TPaintbox abgeleitet. Auf der male ich nun einen Kreisbogen und Fülle ihn aus:
Delphi-Quellcode:
Wenn aber in der Fläche die gefüllt wird unten drunter die gleiche Farbe kommt wie die Bedinung der Füllens ist bricht Canvas ab.
procedure TMeinePaintbox.Paint;
begin inherited; Canvas.Brush.Color := clred; Canvas.Pen.Color := clred; Canvas.Arc(0-Width,0,width,2*height,0,0,0,0); Canvas.FloodFill(1,Height div 2,Canvas.Pixels[1,Height div 2],fssurface); end; Ich weis das klingt komisch deshalb hab ich eine Bild gemacht :P |
Re: TPaintbox und Canvas
Zitat:
Du kannst FloodFill besser mit dem Parameter fsBorder kontrollieren. Fill all area that does not have the color indicated by the Color parameter. Stop when Color is encountered. Dann musst du aber dafür sorgen, dass der Kreisbogen mit 2 roten Linien eine geschlossene Figur bildet. (Also 2 mal LineTo verwenden)
Delphi-Quellcode:
Canvas.FloodFill(1,Height div 2, clRed, fsBorder);
|
Re: TPaintbox und Canvas
Habe es nun so Gemacht wie gesagt:
Delphi-Quellcode:
Das deslbe wie vorher auch. Wenn im Hintergrund die Farbe FFillColor ist so bricht Canvas ab! :wall:
Canvas.Brush.Color := FFillColor;
Canvas.Pen.Color := FFillColor; Canvas.Arc(0-Width,0,width,2*height,0,0,0,0); Canvas.MoveTo(0,0); Canvas.LineTo(0,Height); Canvas.LineTo(Width,Height); Canvas.FloodFill(1,Height div 2,FFillColor,fsBorder); |
Re: TPaintbox und Canvas
Erstelle doch deine Haifischflosse oder was das auch immer sein mag ;-) in einem Bitmap und kopier es dann in das Bild.
[edit] Okay, das soll wohl ein eigenes Kuchendiagramm werden, oder? |
Re: TPaintbox und Canvas
Hihi
Das wäre eine alternative Lösung dafür, aber gibt es nicht eine Lösung mit Canvas? PS: Das brauch ich zur Anzeige bei SpülProzesse :mrgreen: (Progressiv oder Degressiv) Nicht so wichtig... |
Re: TPaintbox und Canvas
Zitat:
Delphi-Quellcode:
for y:=0 to Height do
begin // die Ausgangsposition "links" Canvas.MoveTo(0, y); // und hier kommt der Pythagoras in Spiel // A^2 + B^2 = C^2 // SQRT = Quadratwurzel ziehen // SQR = quadrieren // da dies nur im Kreis funktioniert, wird mit dem Faktor width/height scaliert p := SQRT(SQR(Height)- SQR(Height-y))*width/height; // nach "rechts" zeichnen Canvas.LineTo(p, y); end; |
Re: TPaintbox und Canvas
Gute Idee. :thumb:
An sowas in der Art hatte ich auch schon gedacht! Wenn es ein Dreieck wäre, wäre es ja auch einfach. Aber wie auf dem Bild ja deutlich zu erkennen ist ist es ein Ellipsen Bogen. Wenn jemand da eine Formel kennt um das zu berechnen wäre ich froh :zwinker: |
Re: TPaintbox und Canvas
Schau dir doch obigen Code noch einmal an. Eine Ellipse ist nichts anderes als ein gestreckter Kreis ( y=+-b/a*sqrt(r²-x²) .)
|
Re: TPaintbox und Canvas
warum rufst du die gleiche funktion zum fühllen nicht noch einmal auf aber mit andern positions werten ??? oder änderst die farbe(leicht)
|
Re: TPaintbox und Canvas
Liste der Anhänge anzeigen (Anzahl: 1)
Danke da hab ich wohl etwas zu schnell geantwortet. Der Code funzt 1A. Da ich aber in Mathe ja doch nicht so bewandert bin hätte ich da noch eine Frage: Kennt einer die Formel für ne Hyperbel, so dass der Bogen nicht nach oben "ausgebäult ist sondern nach unten hin(siehe Bild)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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