Aggiungere lo stile XP alla vostra applicazione Visual Basic

Quando fate funzionare un’applicazione Visual Basic su una macchina di XP, noterete che anche se il form ha la barra del titolo in stile XP, i controlli sul form sono ancora nel vecchio stile Windows. Tuttavia, non è cmplesso adattare un’applicazione ad usare i nuovi stili. In alcuni casi, potete applicare tale stile alle applicazioni senza codice supplementare!

Il nuovo stile XP
Gli stili visivi di Windows XP sono forniti dalle versioni 6 della ComCtl32.dll o successiva. (già nel vecchio Windows 95 quella libreria creava l’effetto 3D dei controlli). La differenza sostanziale dalle versioni precedenti di questa DLL, è che la versione 6 non è redistribuibile, per cui possono utilizzare tale stile solo i sistemi operativi che hanno questa versione installata. Attualmente solo Windows XP.ComCtl32 non applica lo stile XP ai controlli delle applicazioni per default. Per abilitarlo, occorre accertarsi che la vostra applicazione richiami la ComCtl32.dll (richiamando la api InitCommonControls della libreria ComCtl32 ed inoltre dovete inserire un file detto “manifest” come specifica che viene richiamato dalla nuova versione degli stili.

Manifest
I manifest fanno parte delle tecnologie introdotte da Microsoft per tentare di risolvere i conflitti di versioni delle DLL (citati normalmente come “hell” delle DLL) così comuni nello sviluppo di Windows. Potete avere maggiori informazioni su queste tecnologie e sui manifest negli articolo tecnico di Windows XP “How To Build and Service Isolated Applications and Side-by-Side Assemblies for Windows XP” sulla MSDN. Tuttavia, ai fini di questo articolo ciò che dovete sapere è come usare la versione 6 dei common control per realizzare un documento di XML riconosciuto come manifest da ComCtl32.Il manifest è un documento XML richiesto per utilizzare gli stili visivi di XP, ed strutturato come segue:

 

<?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=”Nome del prodotto”
type=”win32″ />
<description>Descrizione della tua applicazione</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type=”win32″
name=”Microsoft.Windows.Common-Controls”
version=”6.0.0.0″
processorArchitecture=”X86″
publicKeyToken=”6595b64144ccf1df”
language=”*” />
</dependentAssembly>
</dependency>
</assembly>

Si noti che l’attributo nome e la descrizione dell’elemento sono essenzialmente testo libero.

 

Accertare il collegamento dell’ applicazione alla ComCtl32
Se create un manifest, ma la vostra applicazione non richiama la ComCtl32.dll, la stessa non riuscirà a caricare lo stile voluto ( a volte senza il messaggio di errore). Dovete richiamare almeno la funzione InitCommonControls prima caricare tutti gli elementi grafici e controlli presenti nella vostra applicazione. Può accadere a volte che non dobbiate fare alcunché perché la vostra applicazione richiami la ComCtl32.dll (per esempio, se tra le librerie incluse nel progetto ci sono già le Common Control), tuttavia, per essere sicuri che tutto funzioni è meglio dichiarare InitCommonControls prima della visualizzazione delle qualsiasi form.

 

Questo è il codice che dovrete implementare all’inizio della vostra applicazione assicurandovi così di richiamare la ComCtl32.dll:

Private Type tagInitCommonControlsEx
lngSize As Long
lngICC As Long
End Type
Private Declare Function InitCommonControlsEx Lib “comctl32.dll” (iccex As tagInitCommonControlsEx) As Boolean
Private Const ICC_USEREX_CLASSES = &H200

Public Function InitCommonControlsVB() As Boolean
On Error Resume Next
Dim iccex As tagInitCommonControlsEx
‘ Ensure CC available:
With iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
End With
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
On Error Goto 0
End Function

Public Sub Main()
InitCommonControlsVB


‘ Avvia qui la tua applicazione:

End Sub

 

 Realizzare il Manifest
Ci sono due modi per creare e richiamare il manifest: il modo più semplice (ma meno elegante) deve includere il manifesto sul disco per un eseguibile. Diciamo che la vostra applicazione è denominata TimeSlot.exe . Allora denominerete il file XML manifest come
TimeSlot.exe.manifest

 

nella stessa cartella dell’eseguibile. TimeSlot.exe caricherà automaticamente lo stile di XP. Se cambiate nome al file manifest prima del funzionamento dell’applicazione, gli stessi stili non verranno caricati.

 

Un metodo più completo è quello di compilare il manifest come risorsa nella vostra applicazione. Per fare questo, il manifest deve comparire come tipo RT_manifest delle risorse (24) con identificatore CREATEPROCESS_MANIFEST_RESOURCE_ID. Per un motivo bizzarro, dovete anche accertarvi che il file XML risultante sia di lunghezza multipla uniforme di 4 byte. Per esempio, se il vostro file è 597 byte dovete aggiungere gli spazi del riempimento per comporre un file di 600 byte prima della compilazione. Tale risorsa verrà inglobata utilizzando uno script del compilatore delle risorse e RC.exe

Alcune note

  • Gli stili di XP non si applicano durante lo sviluppo, a design time, ma solo esecuzione. Controllate quindi il vostro eseguibile.
  • I pulsanti di opzione non applicano correttamente lo stile una volta disposti su una struttura, specialmente con VB6. Dovete disporre i vostri pulsanti di opzione su un controllo picture.
  • I bordi 3D su PictureBoxes, immagini ed e così via non vengono disegnati nel nuovo stile di XP, perché si tratta di una singola linea fatta di combinazioni di colore.
Both comments and pings are currently closed.

Comments are closed.