AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TPaintbox und Canvas
Thema durchsuchen
Ansicht
Themen-Optionen

TPaintbox und Canvas

Ein Thema von LoL · begonnen am 14. Mär 2005 · letzter Beitrag vom 16. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
LoL
(Gast)

n/a Beiträge
 
#1

TPaintbox und Canvas

  Alt 14. Mär 2005, 10:49
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
Miniaturansicht angehängter Grafiken
bogen_108.jpg  
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 13:19
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)
  Canvas.FloodFill(1,Height div 2, clRed, fsBorder);
Andreas
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#3

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 14:22
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!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 16:17
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?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#5

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 17:11
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 (Progressiv oder Degressiv) Nicht so wichtig...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 19:42
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;
Andreas
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#7

Re: TPaintbox und Canvas

  Alt 14. Mär 2005, 22:34
Gute Idee.
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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: TPaintbox und Canvas

  Alt 15. Mär 2005, 13:56
Schau dir doch obigen Code noch einmal an. Eine Ellipse ist nichts anderes als ein gestreckter Kreis ( y=+-b/a*sqrt(r²-x²) .)
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#9

Re: TPaintbox und Canvas

  Alt 16. Mär 2005, 08:38
warum rufst du die gleiche funktion zum fühllen nicht noch einmal auf aber mit andern positions werten ??? oder änderst die farbe(leicht)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#10

Re: TPaintbox und Canvas

  Alt 16. Mär 2005, 10:34
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)
Miniaturansicht angehängter Grafiken
ell_170.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:54 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