meta dati per questa pagina
  •  

Utilizzare gli stili di XP

Con l'avvento di Windows XP la grafica del sistema e' notevolmente migliorata e spesso le applicazioniseguono lo stile di visualizzazione impostato sul sistema.

Se avete provato a sviluppare ed eseguire programmi Visual Basic in XP avrete notato che la nuova grafica si rispecchia in molti oggetti dell'area non client ma non per i controlli standard (CommandButto, CheckBox, ecc.) dell'area client.

Questo succede perche' in XP e' stata aggiornata la Common Controls Library (Comctl32.dll) ora alla versione 6.0 mentre i programmi scritti in Visual Basic utilizzano i controlli presenti nella User32.dll ed i controlli comuni definiti nella Comctl32.dll versione 5.0.

Con XP vengono fornite entrambe le versioni (5.0 e 6.0) viene pero' utilizzata come default la versione 5.0 quindi, se vogliamo utilizzare la nuva grafica, dobbiamo dire a XP che vogliamo utilizzare la Comctl32.dll Versione 6.0.

Per farlo dobbiamo fare due cose:

* Dobbiamo fare un file 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.TuaApplicazione"
      type="win32"
  />
  <description>Descrizione dell'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>

Come si puo' vedere e' un semplice file di testo.

Il nome del file deve essere TuaApplicazione.exe.manifest e deve essere nella stessa cartella del programma.

Come prima cosa il programma deve manifestare (vedi appunto il nome del file appena fatto) l'intenzione di utilizzare la Comctl32.dll 6.0 mediante la InitCommonControls.

Dichiarandola:

Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long

ed utilizzandola nell'initialize del form o comunque prima dell'evento Load del form stesso (magari nella Sub Main):

Dim x As Long
x = InitCommonControls

E' importante che sia la prima istruzione eseguita per evitare che venga eseguito codice che inizializzi la vecchia libreria.

Potresti lasciare un commento se ti fossi autenticato.