Está en la página 1de 4

Cmo usar los temas de Windows XP en Visual Basic clsico

para que todos los controles se vean correctamente


Publicado: 30/Oct/2002 Actualizado: 21/Ago/2003

He creado esta nueva pgina sobre cmo usar los temas de Windows XP desde Visual Basic clsico, porque creo que vale la pena que conozcas los "problemillas" con los que te puedes encontrar y, lo mejor, cmo solventarlos. No quiero con esto quitar mritos a la colaboracin de Vctor Snchez, pero creo que es conveniente "ahondar" un poco ms.

Sigue este link si quieres saber cmo usar los temas de Windows XP desde los lenguajes de .NET Framework (Visual Basic .NET, C#, etc.). 21/Ago/2003: Si quieres "automatizar" tus formularios de VB para usar los temas de Windows XP, sigue este link.

A continuacin te relato algunos puntos que debes tener en cuenta, para evitar problemas: 1. Como sabrs, (si has ledo la colaboracin de Vctor Snchez o lo que coment sobre este tema en la pgina de .NET Framework), para poder usar desde Visual Basic los temas de Windows XP, hay que hacer una llamada a InitCommonControls. 2. Esa llamada al API de Windows hay que hacerla antes de que se haya mostrado ningn formulario de la aplicacin, por tanto, si utilizas como punto de inicio de la aplicacin el procedimiento Main, (el cual debe estar declarado en un mdulo de tipo BAS), puedes hacerla dentro de ese procedimiento, pero antes de mostrar ningn formulario. 3. Si no tienes un procedimiento Main y quieres usarla desde un formulario, slo es necesario hacer esa llamada desde el formulario principal (el que se inicia con la aplicacin), pero, (esto es muy importante), se debe hacer desde el evento Form_Initialize, es decir antes de que el formulario se muestre, si no lo hicieras as, la aplicacin no se cargara y con toda seguridad te dara un error. 4. Slo es necesario hacer la llamada a la funcin del API en un formulario, el resto de formularios no deberan llamar a esa funcin, adems de que tampoco es necesario, por la sencilla razn de que los temas se aplicarn a todos los formularios de la aplicacin. 5. Los OptionButtons (Options o RadioButtons) que se incluyan dentro de un Frame, se vern negros... por lo tanto no podr leerse el texto, sin embargo si esos Options estn fuera del Frame se vern bien.

Para solventar este inconveniente, los Options deberan estar contenidos en un PictureBox. 6. Los botones (CommandButton) contenidos en un Frame se vern con un borde negro... por tanto, al igual que con los OptionButtons, lo recomendable es que estn contenidos dentro de un PictureBox, el cual a su vez estar contenido en el Frame. 7. Los Frames que estn dentro de otro Frame, tendrn un problema si muestran un texto en el caption: ese texto se ver en un tamao ms grande del que hayamos usado en el diseo, adems de que no ocupar todo el frame, sino que seguir usando el mismo espacio, con lo cual el texto se ver cortado. Al igual que en los dos puntos anteriores, la forma de solucionarlo es "metiendo" esos frames dentro de un PictureBox. 8. Los botones que contengan imgenes, no se mostrarn con el estilo que est usando Windows XP. Da igual que esas imgenes sean iconos o bitmaps. 9. El fichero .manifest que se use para que Windows XP sepa que tiene que usar los temas en la aplicacin no debe contener caracteres acentuados ni ees... si no tienes esto en cuenta, la aplicacin no se cargar, adems de que dar error. 10. La declaracin de la funcin del API es: Private Declare Sub InitCommonControls Lib "comctl32.dll" () 11. En Visual Basic podemos usar dos libreras de controles comunes de Windows: Windows Common Controls 6.0 basados en mscomctl.ocx y Windows Common Controls 5.0 basados en Comctl32.ocx, pues bien, los basados en mscomctl.ocx no "adoptarn" el look de los temas de XP, para que as sea, habr que usar los basados en Comctl32.ocx.

Aqu tienes un par de capturas para que veas lo que ocurre al usar los Options, Commands y Frames dentro de un Frame: (y cmo quedara si esos controles estuviesen contenidos en un picture)

Usando los controles directamente en Metiendo los controles en un picture el Frame

Si te fijas en la imagen de la izquierda, comprobars que los dos Options estn negros y que el Command2 tiene un borde, adems de que el texto del Frame2

tiene un tamao ms grande y no se muestra completo. Por otro lado, en la imagen de la derecha, esos controles se ven bien, gracias a que estn contenidos en un control picture, para que veas que no es un "cuento", te muestro ese segundo formulario en tiempo de diseo.

El segundo formulario en tiempo de diseo

No sabes qu es eso del fichero .manifest?


En el mismo path que el ejecutable debe existir un fichero que tendr el mismo nombre que el ejecutable, incluyendo la extensin .exe y que acabar con la extensin .manifest. Por ejemplo, si el ejecutable se llama PruebaXP.exe, el fichero .manifest debe llamarse: PruebaXP.exe.manifest El contenido de ese fichero .manifest ser el siguiente: (en negrita te resalto los datos que puedes rellenar, pero recuerda, sin usar acentos ni ees!)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="TemasXP2.exe" processorArchitecture="x86" version="1.0.0.1000" type="win32" /> <description>Descripcion del programa, sin usar acentos, etc. Guillermo 'guille' Som, 2002</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly>

</dependency> </assembly>

Como detalle, si creas un fichero .manifest para Visual Basic 6.0 (vb6.exe.manifest), y lo copias en el directorio del VB6, podrs ver cmo quedaran los controles en tiempo de diseo, as te resultar ms fcil saber cuando debes incluir esos controles problemticos dentro de un picture. Las siguientes imgenes est capturadas en tiempo de diseo:

Usando los controles directamente en Metiendo los controles en un picture (en tiempo de diseo) el Frame (en tiempo de diseo)

Recuerda que si esas aplicaciones se usan en otro sistema operativo distinto de Windows XP, no les afectar en nada y se vern de la forma clsica, por tanto no est de ms que dejes tus ejecutables "preparados" para quin prefiera usar los temas, ya que slo tendrn que aadir el fichero .manifest al path del ejecutable. Espero que con todos estos consejillos, no tengas problemas para aadir los temas de Windows XP a tus aplicaciones. Nos vemos. Guillermo

Aqu tienes el zip con el cdigo del ejecutable con los dos formularios de ejemplo, as como el .manifest correspondiente, tanto al del ejecutable como al del Visual Basic 6.0: temasXPvb.zip 12.3 KB

También podría gustarte