Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Con l'avanzamento degli anni, a cominciare dalla pubblicazione di Windows 95 lo stile grafico delle varie edizioni di Windows è andato piano piano raffinandosi, aggiungendo inizialmente lo smussamento (smoothing) dei caratteri e poi le ombreggiature. Tuttavia fino a Windows 2000 lo stile grafico era rimasto molto similare a quello del vecchio parente Windows 95.
L'arrivo di Windows XP ha introdotto la possibilità per un tema (una combinazione di colori e stili) di variare anche gli attributi delle finestre, come l'altezza, la forma e i colori delle singole finestre. Ormai da alcuni anni le moderne applicazioni utilizzano il look moderno di XP e sarebbe davvero un peccato non poter usufruire di questa caratteristica anche in progetti scritti in Visual Basic.
Le Figure 1 e 2 mostrano entrambe la Calcolatrice di Windows XP rispettivamente con il tema classico e con il tema di XP e le differenze sono parecchie: il colore di fondo è leggermente più chiaro, la barra e i pulsanti sul titolo sono più grandi e disegnati diversamente, la casella con il risultato nel tema XP non presenta il bordo incassato (bevel), i pulsanti hanno gli angoli arrotondati e tutta la finestra è circondata da un bordo blu. Ma le differenze non si limitano solo a questo e lo vedremo nel seguito di quest'articolo. Prepareremo allo scopo un semplice progetto contenente quasi tutti i controlli Thunder (nativi di Visual Basic) e quasi tutti i controlli della libreria Microsoft Windows Common Controls. È necessaria una premessa riguardante proprio questi ultimi controlli. Fino a Visual Basic 5 con il compilatore erano distribuiti anche due librerie ActiveX (OCX) di nome COMCTL32.OCX e COMCT232.OCX (chiamate informalmente Common Controls 5) contenenti all'interno tanti controlli standard di Windows presenti in quasi tutte le applicazioni moderne. Entrambe queste librerie si appoggiavano ad una terza libreria di sistema di nome COMCTL32.DLL. Il corretto funzionamento di un'applicazione che utilizzava uno di questi due OCX richiedeva la presenza della terza libreria aggiornata almeno alla versione 4.72. Questo spesso si traduceva nella necessità di dover distribuire un'altra libreria nel pacchetto di installazione. A questi tre files potevano aggiungersene altri per le singole localizzazioni (traduzioni del testo in esse contenuto). Con l'arrivo di Visual Basic 6 gli sviluppatori Microsoft hanno avuto la brillante idea di riscrivere i suddetti OCX da capo includendo dentro le librerie MSCOMCTL.OCX e MSCOMCT2.OCX (chiamate informalmente Common Controls 6) il codice presente all'interno della libreria di sistema COMCTL32.DLL. Questo si traduceva nel vantaggio di non dover distribuire con il programma anche la terza libreria. Di contro naturalmente la dimensione delle due librerie è raddoppiata.
C'è da dire che con l'occasione gli sviluppatori hanno voluto migliorare alcuni controlli ed aggiungerne altri all'interno delle due librerie e questo, unito al vantaggio di non distribuire un file aggiuntivo nel pacchetto di installazione con il solo costo di un paio di centinaia di KB in più ha convinto parecchie persone. Tuttavia il problema era dietro l'angolo e l'avvento di Windows XP l'ha subito rivelato. Il lavoro svolto dagli sviluppatori di Windows XP infatti si basava sull'aggiornamento delle librerie di sistema fra cui anche COMCTL32.DLL e richiedeva la presenza di un file di configurazione che richiedesse al sistema l'applicazione del nuovo stile grafico. Questo ha comportato la possibilità di aggiornare con semplicità anche le applicazioni già compilate che utilizzassero i Common Controls 5, dovendo infatti aggiungere soltanto il file di configurazione esterno. Invece i programmi che utilizzano i Common Controls 6 hanno continuato ad applicare il vecchio stile grafico, non dovendo infatti appoggiarsi alla COMCTL32.DLL. Acclusi a questo articolo saranno presenti due progetti: il primo utilizzerà i Common Controls 5 mentre il secondo utilizzerà i Common Controls 6; le differenze saranno minime e si limiteranno all'inclusione dei controlli presenti nella libreria più aggiornata. La barra del titolo mostrerà anche la versione dei controlli in uso. Non saranno descritti i singoli componenti sul form perché poco importante e comunque troppo lungo; per semplificare la comprensione sono stati lasciati i nomi originali dei controlli fuorchè per la matrice di PictureBox picGruppo che conterrà al suo interno tutti gli altri controlli; è quindi proposto subito il codice del form uguali per i due progetti:
La funzione InitCommonControls, utilizzata durante l'avvio del programma (Initialize infatti è il primo evento che scatta durante l'avvio) provoca il caricamento in memoria della libreria COMCTL32.DLL. Sarà tale libreria ad occuparsi autonomamente dell'aggiornamento di tutti i controlli standard di VB e dei Common Controls 5. Quest'operazione è necessaria anche quando il progetto utilizza le librerie COMCTL32.OCX o COMCT232.DLL e quindi indirettamente anche COMCTL32.DLL. Basteranno infatti solo queste poche righe di codice per applicare lo stile visuale di Windows XP; tutto il resto del codice, molto semplice invero, si occuperà di utilizzare i numerosi controlli sul form.
Il codice funzionale non farà altro che legare le due ProgressBaral valore dei due Slider(righe 9-11); in funzione della scheda scelta nella TabStripsarà mostrata la PictureBox corrispondente e verranno nascoste le altre due all'interno della stessa matrice picGruppo (righe 13-18); infine al caricamento del form saranno inseriti alcuni valori nella TreeViewe nelle due ListViewper vedere in funzione i suddetti controlli. Se provassimo questo progetto su Windows XP non otterremmo completamente
il nuovo stile visuale; verrà infatti aggiornata soltanto la parte
esterna alla client area, la superficie del form e cioè
vedremmo aggiornata la barra del titolo ed i suoi pulsanti ed il bordino
azzurro che circonda la finestra. Per funzionare correttamente manca ancora
il file di configurazione dell'applicazione, il cosiddetto file MANIFEST.
Si tratta di un semplice documento XML
con uno schema ben preciso che dovrà esser posto nella stessa cartella
del programma e con il nome del file eseguibile seguito dall'estensione
.manifest. <?xml version="1.0" encoding="UTF-8"
standalone="yes"?> Il testo in grassetto può essere modificato con i dati della nostra applicazione: Nome, Versione e Descrizione. Al giorno d'oggi non esiste alcun controllo di congruità tra i dati dichiarati nel file manifest e quelli inseriti all'interno del programma eseguibile, ma in vista delle possibili modifiche alla tecnologia side-by-side su cui si basa questo sistema si raccomanda di fornire dati congruenti con quelli dell'applicazione. Importante! Lanciamo l'esecuzione dei due progetti, il primo utilizzerà i Common Controls 5 mentre il secondo i Common Controls 6, entrambi su Windows XP e vediamone le differenze:
Le Figure 4 e 5 mostrano la prima scheda dei due programmi ed in entrambe possiamo vedere lo stile visuale di XP in azione mettendo a confronto i lati positivi con quelli negativi:
Nulla da dire invece per l'aspetto dei Common Controls; la versione 5 è perfettamente aggiornata (perché basata su COMCTL32.DLL) mentre la versione 6 a destra continua a mantenere il vecchio stile grafico, avendo infatti i programmatori inserito il codice dentro le librerie ActiveX anziché affidarsi alla COMCTL32.DLL. |
Per quanto riguarda i controlli Thunder il nuovo stile è regolarmente applicato salvo che per quei controlli che presentano proprietà Style=1 Graphical; un bug grafico minore si verifica nel caso di frames annidati. Al di là dei controlli aggiuntivi mostrati nella Figura 9, i Common Controls 6 perdono nettamente questo confronto ed andrebbero evitati perché non in grado di aggiornare la loro estetica al nuovo stile di Windows XP. Fibia
FBI
|
Torna all'indice degli HowTo |