Controlli standard di VB in stile Windows XP (2)
a cura di Giorgio Brausi (requisiti: nessuno)Premessa
In seguito alla pubblicazione dell'articolo precedente sullo stesso argomento, ho ricevuto molte richieste di chiarimento, anche relativamente ad alcune complicazioni in cui ci si imbatteva nell'applicare quanto indicato.
Ho finalmente trovato il tempo di scrivere questo seguito, in cui espongo anche qualcosa di nuovo.
Prenderò spunto da alcune questioni postemi, usando per questo articolo la forma di una lista di FAQ.1) Perché devo compilare il progetto per vedere il mio programma in stile Windows XP?
Questo non è vero! Forse qualcuno se n'era già accorto (magari ci è arrivato per intuito), ma se considerate che il VB.EXE non è altro che un 'normale' file eseguibile, che quindi può essere trattato alla stessa stregua di un normale EXE..., scommetto che avete già capito ;-)))Certamente! Create un file VB.EXE.MANIFEST e lo mettete nella stessa cartella in cui risiede il VB.EXE. Avviate il Visual Basic 6.0 ed avrete tutto l'IDE con lo stile Windows XP! Be', non proprio tutto, ma per un buon 90-95% lo vedrete nello stile Windows XP.
Poter lavorare a design time sapendo già come apparirà il nostro form 'senza dover compilare il progetto' è già un bel passo avanti, non trovate?
Purtroppo però questo non è sufficiente! Aggiungete qualche controllo per vedere il risultato: tutti i controlli sono visualizzati nel nuovo stile... un momento... non proprio tutti... come mai il CommandButton fa le bizze? E l'OptionButton è tutto nero, perchè? Purtroppo (non sto qui a dilungarmi sul come e perché, non ci interessa in questa sede) è proprio così: alcuni controlli non vengono disegnati correttamente ed alcuni di questi appaiono con delle zone nere (l'OptionButton è completamente nero) e non c'è verso di risolvere la cosa.
Fortunatamente esiste una scappatoia, anche se non proprio elegante, ma esiste: mettere questi controlli all'interno di un controllo contenitore PictureBox.
Dopo questa operazione magicamente tutti i controlli saranno visualizzati correttamente.Grazie all'aggiunta del file VB.EXE.MANIFEST ora potete osservare il risultato estetico 'senza' dover prima compilare il programma.
(Ragionandoci su, a qualcuno verrebbe da pensare: "Allora 'qualsiasi altro' programma potrebbe essere visualizzato nello stile di Windows XP?"
In teoria: sì. In pratica: non sempre. A dire il vero la verità sta nel mezzo, cioè la risposta è: "Dipende da come è fatto il programma."
Ho provato tempo fa con PaintShop Pro 7.01 italiano ad aggiungere il file .manifest, ma purtroppo alcuni form risultavano illeggibili. Provare non costa niente, comunque).2) Perché i controlli standard non sono visualizzati con lo stile XP?
Questa è una questione piuttosto strana a cui sembra difficile dare una risposta perché il fenomeno pare, a prima vista, incomprensibile: in effetti inserendo un controllo ToolBar nel form, uno si aspetterebbe di trovarsi la nuova toolbar in stile Windows XP (tanto per intenderci quella visualizzata in Explorer con i bordi di selezione arrotondati) mentre questo non avviene. Perché?Tale comportamento è dovuto al fatto che il controllo Windows Common Controls 6.0-SP4 (MSCOMCTL.OCX) distribuito con il Visual Basic 6.0 non si 'appoggia' più alla Common Controls Library (Comctl32.dll) e questo non permette ai controlli standard (non parlo di quelli intrinseci di VB) di essere disegnati conformemente.
Ricordo che in Windows XP la Common Controls Library è stata aggiornata alla versione 6.0 ed è da questa che dipende la visualizzazione nel nuovo stile di XP.Ed allora cosa si deve fare? Sembra un paradosso, ma se volete visualizzare tutti i controlli standard come ToolBar, StatusBar, ecc. dovete utilizzare (udite udite) la vecchia Windows Common Controls 5.0-SP2!
Il risultato di quanto appena descritto lo si puņ osservare nelle due immagini sottostanti: viene illustrato lo stesso progetto eseguito prima in Windows 2000 (a sinistra) e poi in Windows XP (a destra) senza aggiungere alcuna riga di codice. Il progetto lo trovate in area download, a corredo di questo articolo. In questo progetto sono stati utilizzati due componenti standard:
- Microsoft Windows Common Controls 5.0 (SP2)
per i controlli Toolbar, StatusBar, TreeView, ListView, Slider, ProgressBar, TabStrip.- Microsoft Windows Common Controls-3 6.0 (SP5)
per il controllo Coolbar.
(cliccando su ciascuna immagine aprirete due nuove pagine con le immagini ingrandite, da affiancare per il confronto) Nella figura a destra noterete che il controllo Coolbar presenta la caratteristica sfumatura che sicuramente avete già apprezzato nell'Explorer. Peccato che la Toolbar non sia trasparente, sarebbe stato perfetto! Comunque chi volesse aggiungere anche questa caratteristica potrà consultare il libro di Balena "Programmare in Visual basic 6.0" in cui c'è il progetto di uno UserControl Toolbar trasparente. Sarà sufficiente estrapolare il codice necessario per modificare lo stile trasparente. Questo ve lo lascio come 'esercizio per casa'...
Inoltre noterete che automaticamente tutti i controlli di CommonControls 5.0-SP2 sono visualizzati perfettamente, e noterete come le linguette della TabStrip e le intestazioni della ListView siano sensibili al passaggio del mouse.
3) Nonostante tutto, gli OptionButton ed i CommandButton vengono disegnati male, perché?
Osservando attentamente la figura a destra troverete però un'anomalia: se inserite i controlli OptionButton e CommandButton all'interno del form tutto bene, mentre se li mettete dentro un Frame presentano lo stesso problema cui si accennava precedentemente.L'unico modo per ovviare a questo inconveniente è quello di inserire il Frame all'interno di un controllo PictureBox, ricordando comunque che in questo caso occorrerà chiamare la InitCommonControls nell'evento Initialize del form (di questo abbiamo discusso nell'articolo precedente).
Conclusione
Ancora una volta abbiamo potuto constatare quando sia estremamente facile fornire i propri programmi del 'nuovo' look di Windows XP. Magari, vedremo prossimamente di illustrare altri aspetti legati a questo stile, ad esempio i famosi Themes di Windows XP, perchè no?
Per il momento spero che questo articolo possa essere di aiuto a tutti coloro che progettano i loro programmi per Windows XP.
(segue)In merito a questo articolo, potete scrivere all'autore, (vedi note).