Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TPaintbox und Canvas (https://www.delphipraxis.net/42119-tpaintbox-und-canvas.html)

LoL 14. Mär 2005 09:49


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:
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;
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.
Ich weis das klingt komisch deshalb hab ich eine Bild gemacht :P

shmia 14. Mär 2005 12:19

Re: TPaintbox und Canvas
 
Zitat:

Zitat von LoL
Ich habe mir meine Eigene Komponente von TPaintbox abgeleitet. Auf der male ich nun einen Kreisbogen und Fülle ihn aus:

Delphi-Quellcode:
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;
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.

Das ist das normale Verhalten von FloodFill, wenn der Parameter fsSurface angegeben wird.

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);

LoL 14. Mär 2005 13:22

Re: TPaintbox und Canvas
 
Habe es nun so Gemacht wie gesagt:

Delphi-Quellcode:
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);
Das deslbe wie vorher auch. Wenn im Hintergrund die Farbe FFillColor ist so bricht Canvas ab! :wall:

Khabarakh 14. Mär 2005 15:17

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?

LoL 14. Mär 2005 16:11

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...

shmia 14. Mär 2005 18:42

Re: TPaintbox und Canvas
 
Zitat:

Zitat von LoL
Das wäre eine alternative Lösung dafür, aber gibt es nicht eine Lösung mit Canvas?

Du könntest auch lauter waagerechte Linien zeichen.
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;

LoL 14. Mär 2005 21:34

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:

Khabarakh 15. Mär 2005 12:56

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²) .)

mimi 16. Mär 2005 07:38

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)

LoL 16. Mär 2005 09:34

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:49 Uhr.
Seite 1 von 2  1 2      

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