|
|
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.
|