Newsgroup: it.comp.lang.delphi
Titolo: colorare spicchi con Canvas

prendiamo un classico tabellone pe rle freccette,
quelli neri e gialli, volendo riempire delle aree che
non sono rettangolari , quindi Canvas.Rectangle , non
serve allo scopo
 Canvas.Brush.Color:=clBlack;
  Canvas.MoveTo(X1,Y1);
  Canvas.Ellipse(X1-Raggio,Y1-Raggio,X1+Raggio,Y1+Raggio);
  Canvas.Brush.Color:=clYellow;
  Canvas.Pen.Color:=clRed;
  Canvas.MoveTo(X1,Y1);
  Canvas.Ellipse(X1-Raggio1,Y1-Raggio1,X1+Raggio1,Y1+Raggio1);
cosi' , sovrapponendo , riesco ad avere vari cechi di colore diverso,
ma non aree di colore diverso nello stesso cerchio.
Stefano 

Stefano ha scritto:

Dall'help di TCanvas in delphi:
Use Arc to draw an elliptically curved line with the current Pen. The 
arc traverses the perimeter of an ellipse that is bounded by the points 
(X1,Y1) and (X2,Y2). The arc is drawn following the perimeter of the 
ellipse, counterclockwise, from the starting point to the ending point. 
The starting point is defined by the intersection of the ellipse and a 
line defined by the center of the ellipse and (X3,Y3). The ending point 
is defined by the intersection of the ellipse and a line defined by the 
center of the ellipse and (X4, Y4).
Ciao, Vitto

> traverses the perimeter of an ellipse that is bounded by the points
...
ma se disegni un'arco (Arc) e due rette (LineTo) , la superficie interna
allo spicchio risulta non colorata (usando Canvas.Brsush.Color)
Stefano

 Canvas.Brsush.Color) 
puoi provare a disegnare tutti i raggi, forse...
Nell'antidiluviano Zx Spectrum del 1983 c'era una funzione (Fill, forse) di 
riempimento che, dato un punto qualsiasi situato all'interno di una 
qualsiasi regione chiusa, la riempiva...
Se non erro, il meccanismo era questo: 
- dato il punto, guarda un punto più sopra;
- se è il bordo
    termina
  altrimenti
    - riempi la riga orizzontale, a destra e a sinistra,
      finchè non arrivi al bordo, con il colore della penna;
    - guarda un punto più sopra;
 
(la stessa cosa ripetuta anche per i punti sotto)
-- 
Mauro Falzari
"Io passo in mezzo agli uomini,
come in mezzo a frammenti dell'avvenire:
di quell'avvenire che io contemplo".
  (Friedrich Wilhelm Nietzsche, 1844-1900)

Perfavore ... Siete O.T.
procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);
Description
Use FloodFill to fill a possibly non-rectangular region of the image with
the value of Brush. The boundaries of the region to be filled are
determined by moving outward from the point (X,Y) until a color boundary
involving the Color parameter is encountered.
X and X are the coordinates on the canvas where filling starts.
Color is the color that defines the boundary of the region to fill. Its
interpretation depends on the value of FillStyle.
FillStyle specifies whether the region is defined by all pixels with the
same value as Color, or all points with a different value.
Tip:	Use the Pixels property to get the exact value of the color at the
point (X,Y) when using a FillStyle of fsSurface. Similarly, when FillStyle
is fsBorder, use Pixels to get the exact value of the boundary color if a
point on the boundary is known.
--- posted by geoForum on 
http://www.delphiedintorni.it

Vi posto meglio per non fare l'errore del colore del bordo.
Nota: clRed messo in floodfill deve corrispondere a quello del bordo 
1) Disegna una figura non piena e assegna un colore al bordo
2) dai in brush il colore di riempimento
3) dai le coordinate dove iniziare il fill, ma DEVI dargli il colore del
BORDO !!!
Canvas.Pen.Color:=clRed;
Canvas.Brush.Color:=clBlack;
Canvas.Arc(10,10,200,200,30,30,10,10);
showmessage('OK adesso colorami!!');
Canvas.FloodFill(2,2,clRed,fsborder);  // oppure fssurface
Ciao!
