Controlli standard di VB in stile Windows XP
a cura di Giorgio Brausi (requisiti: nessuno)Con l'uscita della versione XP di Windows, Microsoft ha per l'ennesima volta stravolto l'interfaccia grafica anche se, ormai, siamo abituati a questi cambiamenti (chi non ricorda le peripezie per riuscire a trasformare una toolbar nello stile 'flat', e lo stesso dicasi per i vari ComboBox, Check, per non parlare poi dei menu con le immagini di Office, ecc.).
Fortunatamente, almeno per una volta, eseguire un aggiornamento dei nostri programmi alla nuova veste grafica è molto più semplice di quanto non sia stato finora anche se, vostro malgrado, dovrete ugualmente ricompilare i vostri programmi.
Ma, vista la semplicità disarmante con cui potrete farlo, ne vale veramente la pena, considerando che la compatibilità con le precedenti versioni di Windows è garantita.Sicuramente chi ha provato a sviluppare e/o eseguire i propri programmi scritti in Visual Basic nell'ambiente Windows XP avrà notato che la nuova interfaccia grafica viene rispecchiata per la maggior parte degli oggetti ed esattamente quelli relativi all'area 'non client', questo però non vale per i controlli standard (CommandButton, List, ecc.) dell'area 'client'.
La ragione di tutto questo sta nel fatto che in Windows XP è stata aggiornata la Common Controls Library (Comctl32.dll) ora giunta alla versione 6.0, mentre i programmi scritti in Visual Basic utilizzano i controlli definiti nella User32.dll ed i controlli comuni definiti nella versione 5.0 della Comctl32.dll.
A dire il vero, Windows XP viene fornito con entrambe le versioni 5.0 e 6.0, ma per impostazione 'predefinita' viene sempre utilizzata la versione 5.0, quindi se desideriamo sfruttare la nuova veste grafica della Common Controls Library 6.0 occorre comunicarlo a Windows XP.Questo deve essere fatto procedendo nel modo seguente:
- Occorre creare un file definito come 'manifest' che contenga le seguenti specifiche:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="CompanyName.ProductName.YourApp" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>Come noterete è un semplice file di testo (potete anche copiarvelo con un'operazione di Copia&Incolla).
Il nome del file deve rispettare una determinata convenzione, deve essere salvato con il nome: "MyProg.exe.manifest" in cui sostituirete "MyProg" col nome dell'eseguibile del vostro programma.
Se, ad esempio, il nome del file eseguibile del vostro programma è "Magazzino.exe" allora il file manifest dovrete chiamarlo: "Magazzino.exe.manifest".
Importante: questo file deve risiedere nella stessa cartella del programma.- All'avvio, il vostro programma deve 'manifestare' la propria intenzione di utilizzare la nuova Common Controls 6.0, mediante un'apposita funzione di tale libreria: la InitCommonControls.
Prima di tutto occorre dichiararla nel form principale, nel modo seguente:Private Declare Function InitCommonControls Lib "Comctl32.dll" () As LongInfine si chiama la funzione nell'evento Initialize, sempre del form principale:Private Sub Form_Initialize() Dim x As Long x = InitCommonControls End SubE' importante che questa chiamata avvenga nell'evento Initialize ed è raccomandato che sia la prima istruzione eseguita, per evitare così che venga eseguito altro codice che inizializzi erroneamente la vecchia libreria.Il risultato di quanto appena descritto lo si può osservare nelle figure 1 e 2 che illustrano la stessa finestra di dialogo comune Apri File visualizzata nei due stili (cliccando su ciascuna immagine aprirete due nuove pagine con le immagini ingrandite, da affiancare per il confronto):
Un semplice progetto di esempio è scaricabile dall'Area Download.
Tenete presente che la nuova veste grafica dei controlli standard è visibile solamente avviando il file eseguibile, infatti avviando (run) il progetto dall'IDE di Visual Basic non otterremo alcun cambiamento rispetto a prima, ma continueremo a vedere i nostri controlli alla 'vecchia maniera'. Quindi per osservare il risultato occorrerà compilare il progetto ed avviarne l'eseguibile.
Ultima raccomandazione (mai dare niente per scontato!): ricordate di inserire anche il file 'manifest' nel pacchetto di distribuzione della vostra applicazione.
Conclusione
Come avrete capito, l'aggiornamento al nuovo stile grafico è veramente semplice. Tra l'altro sembra che il contenuto del file 'manifest' non abbia alcuna relazione con la vostra applicazione. Questo vi permette di utilizzare lo stesso file manifest per ogni vostro programma, la sola condizione è che lo rinominiate in base al nome del nuovo programma.Quanto detto in questo articolo vale solamente per i controlli comuni della Common Controls Library, per i controlli personalizzati (OwnerDraw) la faccenda cambia del tutto, come vedrò di scriverne prossimamente. (segue)
In merito a questo articolo, potete scrivere all'autore, Giorgio Brausi.
L'autore
Giorgio Brausi, autodidatta, ha iniziato a programmare in Basic, dBaseIII Plus, poi Clipper, infine convertito a VB già dalla mitica (si fa per dire) versione 1.0. E' l'autore della libreria MenuExtended.dll che subclassa i menu di CodeBook e dell'add-in per VB 6.0 MenuCreator. Inoltre cura la sezione [MenuEx] del nostro sito.