Pagina iniziale A scuola di Delphi

Introduzione · Capitolo 1 · Capitolo 2 · Capitolo 3 · Capitolo 4 · Capitolo 5 · Download 

Sommario
Indovina numero
Sistema lineare
Figura
Distr. automatico
Potenze
Mcm
Scomp. in fattori
Numeri primi
 

Capitolo 2

Figura

Questa applicazione, di per sé assai semplice, ci permetterà di imparare molti concetti nuovi.

Selezionando una delle 4 forme, la figura cambia di conseguenza in base alla selezione.

Selezionando o deselezionando trasparente, la figura mostra il colore selezionato, oppure mostra il colore dello sfondo.

Infine, cambiando il colore selezionato, la figura cambia di colore, se non è selezionato trasparente.

Il primo componente presente in alto a sinistra nella form è un RadioGroup rappresentato dall'icona presente sulla linguetta Standard di Delphi. Il suo scopo è quello di raggruppare vari bottoni radio in maniera semplice e di semplificarne anche la gestione. Assegniamogli come Name: RadioGroupForma, come Caption: Forma ed infine cliccando sui ... (tre puntini) della proprietà Items, apriamo lo String list editor in cui inseriremo le Caption dei 4 bottoni radio: quadrato, rettangolo, cerchio ed ellisse. Infine diamo l'OK.
Le 4 voci del RadioGroup sono indicizzate da Delphi a partire da 0 fino a 3. Poiché almeno un bottone radio deve sempre essere selezionato, impostiamo la proprietà ItemIndex a 0: in questo modo la voce quadrato diventa selezionata. Cambiando con il mouse la selezione del RadioGroup il valore della proprietà ItemIndex si modifica di conseguenza, quindi nel programma leggendo il valore di questa proprietà è possibile capire qual è il bottone radio selezionato.

Il secondo componente sotto il RadioGroup è un CheckBox, ovvero un componente che può possedere i due stati di Vero o di Falso, a seconda che sia o meno selezionato. (In realtà c'è un 3º stato possibile di cui non parleremo ora). Il componente è rappresentato dall'icona presente sulla linguetta Standard di Delphi. Assegniamogli come Name: CheckBoxTrasparente e come Caption: trasparente. La proprietà che rappresenta il suo stato è Checked, che lasciamo inizialmente impostata a False. Cambiando con il mouse lo stato del CheckBox il valore della proprietà Checked si modifica di conseguenza.

Il terzo componente è un ComboBox, rappresentato dall'icona presente sulla linguetta Standard di Delphi. (Non deve essere confuso con il componente ListBox che si trova alla sua sinistra). Il suo scopo è quello di selezionare un valore da una lista, che è troppo lunga per essere inserita in un RadioGroup.
I valori della lista vengono inseriti cliccando sui ... (tre puntini) della proprietà Items, esattamente come visto per il RadioGroup. Inseriamo le voci: Bianco, Nero, Rosso, Giallo, Verde, Azzurro, Blu e Porpora, che saranno indicizzate partendo da 0 fino a 7. Assegniamogli come Name: ComboBoxColore e come Text: Bianco, che è è il primo valore della lista che deve apparire subito al lancio del programma. Cambiando con il mouse la selezione il valore della proprietà ItemIndex si modifica di conseguenza, quindi nel programma leggendo il valore di questa proprietà è possibile capire qual è la voce selezionata.

Il quarto e ultimo componente rappresentato dall'icona presente sulla linguetta Additional di Delphi è Shape. La sua funzione è molto semplice: serve a visualizzare sulla form una forma a scelta fra: stEllipse, stRectangle, stRoundRect, stRoundSquare, stSquare, stCircle. Questi sono i valori possibili della proprietà Shape.
Vi sono poi altre proprietà che controllano l'aspetto di Shape. La proprietà Pen, è un oggetto che contiene altre proprietà fra cui il colore del bordo (Color), il suo spessore (Width), lo stile (Style), etc. La proprietà Brush, è un altro oggetto che contiene altre proprietà fra cui il colore di riempimento (Color), lo stile (Style), etc. (Vedremo in dettaglio questi due oggetti: Pen e Brush nel prossimo capitolo, quando affronteremo la grafica). Provate a cambiare i valori delle proprietà suddette, e vedete cosa succede.

N.B. Assegnare sempre ad un oggetto Brush prima il colore (Color) e dopo lo stile (Style), poiché l'assegnamento del colore dopo lo stile fa perdere il valore precedentemente assegnato allo stile. Per esempio se si imposta Style a bsClear, il successivo assegnamento di un qualunque valore di colore a Color riporta il valore di Style a bsSolid.

Passiamo alla procedura, che è la stessa per tutti i 3 oggetti: RadioGroupForma, CheckBoxTrasparente e ComboBoxColore.

Selezioniamo con un click del mouse l'oggetto RadioGroupForma e portiamo in primo piano la linguetta Events dell'Object inspector. Clicchiamo due volte con il mouse nella casella vuota a destra dell'evento OnClick: viene generata automaticamente la procedura RadioGroupFormaClick. Poiché il nome non ci piace (infatti la procedura dovrà essere associata anche agli altri oggetti), modifichiamo manualmente il nome nell'Object inspector (non nel listato del programma!) in CambiaProprieta (non CambiaProprietà: i caratteri accentati non sono ammessi nei nomi) e diamo Invio; subito il nome della procedura nel listato si modifica in CambiaProprieta.

Selezioniamo con un click del mouse l'oggetto CheckBoxTrasparente e impostiamo il suo evento OnClick a CambiaProprieta, usando il menu a tendina del ComboBox a destra di OnClick.

Infine, selezioniamo con un click del mouse l'oggetto ComboBoxColore e impostiamo il suo evento OnChange (o OnClick, di fatto è lo stesso) a CambiaProprieta, usando il menu a tendina del ComboBox a destra del nome dell'evento.

Ora spostiamoci nel listato e scriviamo la procedura CambiaProprieta.

procedure TFormFigura.CambiaProprieta(Sender: TObject);
begin
  case RadioGroupForma.ItemIndex of
    0: ShapeDisegno.Shape:=stSquare;
    1: ShapeDisegno.Shape:=stRectangle;
    2: ShapeDisegno.Shape:=stCircle;
    3: ShapeDisegno.Shape:=stEllipse;
  end;

  case ComboBoxColore.ItemIndex of
    0: ShapeDisegno.Brush.Color:=clWhite;
    1: ShapeDisegno.Brush.Color:=clBlack;
    2: ShapeDisegno.Brush.Color:=clRed;
    3: ShapeDisegno.Brush.Color:=clYellow;
    4: ShapeDisegno.Brush.Color:=clGreen;
    5: ShapeDisegno.Brush.Color:=clAqua;
    6: ShapeDisegno.Brush.Color:=clBlue;
    7: ShapeDisegno.Brush.Color:=clPurple;
  end;

  if CheckBoxTrasparente.Checked then
    ShapeDisegno.Brush.Style:=bsClear
  else
    ShapeDisegno.Brush.Style:=bsSolid;
end;

Osserviamo l'uso della nuova istruzione Pascal case of, che è algoritmicamente equivalente ad una sequenza di if then else, come si vede qui di seguito:

case n of
  0: istruzione_0;
  1: istruzione_1;
  2: istruzione_2;
  3: istruzione_3;
  else istruzione_else;
end;
 
 
 
if n=0 then
  istruzione_0
else if n=1 then
  istruzione_1
else if n=2 then
  istruzione_2
else if n=3 then
  istruzione_3
else
  istruzione_else;

Nella sintassi, l'ultima istruzione else è facoltativa e può essere omessa se non serve.

L'elenco completo dei valori che possono assumere le proprietà Color e Style di Brush può essere visto premendo il tasto funzione F1, con la proprietà selezionata nell'Object inspector, e quindi è lasciata al lettore. Come già detto, vedremo in dettaglio le caratteristiche degli oggetti grafici Pen, Brush e Font, nel prossimo capitolo.

 2.03 - Figura