Disegnare i Talli

Oggi vediamo come in Delphi è possibile gestire il disegno di singoli pixel e di forme geometriche. I form, i pannelli, le picture, insomma i vari controlli hanno un oggetto che si chiama canvas, che rappresenta il foglio su cui l’oggetto viene disegnato. Il canvas ha le stesse dimensioni e le stesse coordinate del controllo a cui si riferisce. Inizialmente pensavo di mettere un controllo di tipo Picture per sfruttare la possibilità di caricare/salvare le immagini ma in effetti non ho trovato questo molto utile e quindi ho deciso di disegnare direttamente sul form. Come si fa? Facilissimo…… basta l’istruzione form1.Canvas.Pixels[x, y] := clRed; e il pixel alle coordinate x,y diventa rosso.

Il Tallo è facilissimo da disegnare visto che si tratta di un cerchio con la coda, per tracciare un cerchio la si usa il comando form1.Canvas.Ellipse(CRect); dove CRect è un tipo di variabile che contiene le coordinate x e y del punto in alto a destra e x e y del punto in basso a sinistra. Se le coordinate delimitano un’area quadrata uscirà un cerchio, altrimenti un ellisse (da qui il nome della funzione). Manca ancora una cosa, di che colore facciamo il cerchio? il colore utilizzato va impostato nella variabile form1.Canvas.Pen.Color := clyellow; che indentifica il colore della penna che traccerà il disegno. Se come stile impostiamo: form1.Canvas.brush.style := bsSolid; diciamo alla funzione di disegno che vogliamo il riempimento dell’area disegnata e impostando la variabile form1.Canvas.Brush.Color := clyellow; gli diciamo di riempire l’area del cerchio di giallo. 

Scegliamo i colori

Delphi ha le variabili dei colori già impostate tipo clred è rosso e così via; per utilizzare tutti i tipi di colore si possono utilizzare i codici esadecimali, ad esempio form1.Canvas.Brush.Color := $ffffda; questi utilizzano la codifica RGB, potete farvi aiutare da QUESTO SITO per trovare il codice del colore che vi interessa. La codifica RGB rappresenta per i tre colori base Rosso, Giallo e Blu l’intensità di ognuno, la loro combinazione da il colore finale. Rispetto a Delphi la sequenza è invertita per cui se il sito vi da il colore AABBCC dovete impostare la variabile con “$CCBBAA”. Se volete a inizio programma potete impostare una costante con il colore in modo che poi per cambiare colore invece di cercare in tutto il programma potete modificare la costante; vediamo un esempio di quanto abbiamo visto finora:

Const colore_tallo = $ffa500;

var
 CRect: TRect;
 raggio : integer;
begin
 raggio := 20;
 CRect.Left   := tallo.x_int - raggio;
 CRect.Top    := tallo.y_int - raggio;
 CRect.Right  := tallo.x_int + raggio;
 CRect.Bottom := tallo.y_int + raggio;
 form1.Canvas.brush.color := colore_tallo;
 form1.Canvas.Pen.Color := colore_tallo;
 form1.Canvas.brush.style := bsSolid;
 form1.Canvas.Ellipse(CRect);

per completare il Tallo manca solo il flagello, che è una semplice linetta e si traccia utilizzando il comando moveto() e lineto(); Il comando moveto(x,y) serve a spostare la posizione della penna nel punto in cui si vuole iniziare a scrivere, eseguito da solo non serve a nulla; il comando lineto(x,y) traccia una linea dalla posizione attuale(che abbiamo impostato con moveto) alle coordinate c e y. determinare il punto di partenza e di fine della linea nel nostro caso è abbastanza complesso perchè il flagello rappresenta la direzione in cui il Tallo si muove e quindi necessita di alcuni calcoli che vedremo più avanti; ecco qui il codice per disegnare il flagello;

Const colore_coda_tallo = $ffa500;

form1.Canvas.Pen.Color := colore_coda_tallo;
form1.Canvas.MoveTo(X,Y);
form1.Canvas.LineTo(x,y);

Maurizio

Lascia un commento