You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Colour(primo piano, sfondo=O)<br />
che imposta i colori di primopiano e di sfondo per tutte<br />
le funzioni che non hanno un parametro colore esplicito,<br />
come per esempio la TextF( ). I parametri devono indica-<br />
re il numero di registro colore che si intende utilizzare, il<br />
cui valore è limitato dal tipo di schermo su cui si opera.<br />
Per finire, è possibile cambiare la rastport di disegno con<br />
la funzione:<br />
vecchia := SetStdRast(nuova)<br />
che imposta stdmst a nuova, e al tempo stesso ritorna il<br />
vecchio valore. nuova deve essere una RastPort valida,<br />
che puo essere ottenuta dal campo rastport di uno scher-<br />
mo o dal campo vport di una finestra.<br />
Nel listato 1 potete vedere un semplice esempio di uso<br />
di queste funzioni, che mette a frutto quanto abbiamo<br />
già appreso riguardo alla ricorsione;per inciso, notate co-<br />
me tutti i triangoli siano disegnati da Box( ), che traccia<br />
soltanto rettangoli!<br />
PROC main()<br />
DEF s<br />
IF s:=0penS(640,512,1,$8004,'Schenno di E')<br />
ric1(60,20,240)<br />
Delay(500)<br />
CloseS ( s )<br />
ENDIF<br />
ENDPROC<br />
PROC ricl(x,y,len)<br />
IF len>O<br />
Box(x,y,x+len,y+len)<br />
ricl(x+len,y,len/Z)<br />
ricl(x+len,y+len,len/Z)<br />
ricl(x,y+len,len/2)<br />
ENDIF<br />
ENDPROC<br />
Gadget e altro<br />
Abbiamo visto che la OpenW( ) ha fra i suoi parametri<br />
un puntatore a una lista di gadget. Questa lista può esse-<br />
re costruita "a mano", come era d'uso con 1'<strong>Amiga</strong>OS 1.3,<br />
compilando le strutture gadget di Intuition, oppure trami-<br />
te il ricorso alla gadtools.library o ad altre librerie analo-<br />
ghe, non ultima la "EasyGUI" di E, di cui parleremo in<br />
futuro.<br />
Per evitare queste complicazioni, E offre la funzione<br />
Gadget( ), i cui parametri sono i seguenti:<br />
nuovobuf:=Gadget( precbuf, buffer, id,<br />
tipo, x, Y,<br />
larghezza, testo )<br />
i parametri precbuf e buffer servono alla funzione per<br />
costruire la lista di gadget, e vedremo fra poco un esem-<br />
pio del loro uso; basterà dire che il buffer allocato deve<br />
avere dimensione pari al prodotto del numero di gadget<br />
che si intendono allocare per la costante predefinita<br />
GADGETSIZE. L'id è semplicemente un identificatore nu-<br />
merico che serve a riconoscere il gadget, mentre tipo in-<br />
dica (appunto) il tipo di di gadget: O indica un normale<br />
"pulsante", 1 indica un pulsante booleano e 3 un pulsan-<br />
te booleano selezionato. Come già per le altre funzioni, x<br />
e y indicano le coordinate del gadget, relative alla fine-<br />
stra, e 1ar;ghezza deve essere sufficiente a contenere il te-<br />
sto indicato.<br />
Purtroppo, la funzione Gadget( ) può soltanto creare p~il-<br />
santi (i cosiddetti "button gadget"), ma nessuno degli altri<br />
tipi ormai familiari (liste, "radio button", "checkmark",<br />
ecc.). inoltre, i gadget creati sono particolarmente brutti,<br />
e non esibiscono il look 3D che caratterizza tutto l'Ami-<br />
gaOS dalla versione 2: in altre parole, è bene usare la<br />
Gadget( ) soltanto in utility estremamente semplici, o a<br />
scopo personale, preferendo l'uso della gadtools.library o<br />
di una delle sue equivalenti per programmi destinati a<br />
una piti ampia diffusione.<br />
Ed eccoci finalmente alla ricezione e interpretazione dei<br />
messaggi di Intuition, richiesti tramite i flag IDCMP della<br />
finestra. La funzione più interessante che E mette a di-<br />
sposizione a questo riguardo è:<br />
che preleva un messaggio, sospendendo l'applicazione<br />
finché esso non arriva. Ciascun messaggio trasporta quat-<br />
tro informazioni fondamentali, dette classe (class), codice<br />
(code), qualficatore (qualifier) e indirizzo (address). La<br />
classe indica il tipo di evento che si è verificato, e corri-<br />
sponde ai jlag IDCMP; spesso la sola classe è sufficiente