Sección de códigos , trucos y ejemplos para visual basic
<Volver> - Anterior - Siguiente
Artículo publicado por : Olimpo Bonilla Ramirez
El presente articulo presenta la manera de simplificar el proceso de generación de una aplicación hecha en Visual Basic 6.0 que tome la apariencia de los estilos visuales de Windows XP sin consumir recursos de la memoria, ni mucho menos creando los famosos archivos MANIFEST. En algunos otros sitios todavía se maneja este truco pero pocos desconocen este nuevo procedimiento por lo que se recomienda seguir cuidadosamente los pasos que a continuación se van a exponer.
Contenido
Para empezar, debemos de tener las siguientes herramientas para iniciar
nuestro trabajo:
Una vez teniendo a la mano estos componentes, entonces vamos a empezar con este trabajo
Ya sabemos sobre la estructura de un archivo MANIFEST, que muy comunmente se ha expuesto en otros sitios Web dedicados a Visual Basic, por lo que no vamos a exponer su estructura, ya que por lo general no lo vamos a usar, asi que vamos a crear un archivo de recursos llamado ResXpStylesTester.rc (puede ser cualquier nombre de archivo distinto). Ahora bien, la estructura del archivo de recursos se muestra a continuación:
// Archivo de recursos: ResXpStylesTester.rc // Autor: Olimpo Bonilla Ramirez // Llamado de las librerías de cabecera y definición de macros. #include "resrc1.h" #define APSTUDIO_READONLY_SYMBOLS #include "resource.h" #include "afxres.h" #undef APSTUDIO_READONLY_SYMBOLS // Definición de los recursos en el idioma English (U.S.) #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 // Icono de la aplicación que al momento de compilarse en Visual Basic // se toma como icono del archivo ejecutable IDR_MAINFRAME ICON DISCARDABLE "Exe.ico" // 24 - Contenido del archivo MANIFEST para la apariencia de Windows XP. 1 24 MOVEABLE PURE BEGIN 0x2020, 0x3c20, 0x783f, 0x6c6d, 0x7620, 0x7265, 0x6973, 0x6e6f, 0x223d, 0x2e31, 0x2230, 0x6520, 0x636e, 0x646f, 0x6e69, 0x3d67, 0x5522, 0x4654, 0x382d, 0x2022, 0x7473, 0x6e61, 0x6164, 0x6f6c, 0x656e, 0x223d, 0x6579, 0x2273, 0x3e3f, 0x613c, 0x7373, 0x6d65, 0x6c62, 0x2079, 0x6d78, 0x6e6c, 0x3d73, 0x7522, 0x6e72, 0x733a, 0x6863, 0x6d65, 0x7361, 0x6d2d, 0x6369, 0x6f72, 0x6f73, 0x7466, 0x632d, 0x6d6f, 0x613a, 0x6d73, 0x762e, 0x2231, 0x6d20, 0x6e61, 0x6669, 0x7365, 0x5674, 0x7265, 0x6973, 0x6e6f, 0x223d, 0x2e31, 0x2230, 0x3c3e, 0x7361, 0x6573, 0x626d, 0x796c, 0x6449, 0x6e65, 0x6974, 0x7974, 0x7620, 0x7265, 0x6973, 0x6e6f, 0x223d, 0x2e31, 0x2e30, 0x2e30, 0x2230, 0x7020, 0x6f72, 0x6563, 0x7373, 0x726f, 0x7241, 0x6863, 0x7469, 0x6365, 0x7574, 0x6572, 0x223d, 0x3858, 0x2236, 0x6e20, 0x6d61, 0x3d65, 0x5422, 0x7365, 0x4474, 0x4c4c, 0x652e, 0x6578, 0x2022, 0x7974, 0x6570, 0x223d, 0x6977, 0x336e, 0x2232, 0x3e2f, 0x643c, 0x7365, 0x7263, 0x7069, 0x6974, 0x6e6f, 0x413e, 0x6c70, 0x6369, 0x6361, 0x6f69, 0x206e, 0x6564, 0x6520, 0x656a, 0x706d, 0x6f6c, 0x2e2e, 0x3c2e, 0x642f, 0x7365, 0x7263, 0x7069, 0x6974, 0x6e6f, 0x3c3e, 0x6564, 0x6570, 0x646e, 0x6e65, 0x7963, 0x3c3e, 0x6564, 0x6570, 0x646e, 0x6e65, 0x4174, 0x7373, 0x6d65, 0x6c62, 0x3e79, 0x613c, 0x7373, 0x6d65, 0x6c62, 0x4979, 0x6564, 0x746e, 0x7469, 0x2079, 0x7974, 0x6570, 0x223d, 0x6977, 0x336e, 0x2232, 0x6e20, 0x6d61, 0x3d65, 0x4d22, 0x6369, 0x6f72, 0x6f73, 0x7466, 0x572e, 0x6e69, 0x6f64, 0x7377, 0x432e, 0x6d6f, 0x6f6d, 0x2d6e, 0x6f43, 0x746e, 0x6f72, 0x736c, 0x2022, 0x6576, 0x7372, 0x6f69, 0x3d6e, 0x3622, 0x302e, 0x302e, 0x302e, 0x2022, 0x7270, 0x636f, 0x7365, 0x6f73, 0x4172, 0x6372, 0x6968, 0x6574, 0x7463, 0x7275, 0x3d65, 0x5822, 0x3638, 0x2022, 0x7570, 0x6c62, 0x6369, 0x654b, 0x5479, 0x6b6f, 0x6e65, 0x223d, 0x3536, 0x3539, 0x3662, 0x3134, 0x3434, 0x6363, 0x3166, 0x6664, 0x2022, 0x616c, 0x676e, 0x6175, 0x6567, 0x223d, 0x222a, 0x3e2f, 0x2f3c, 0x6564, 0x6570, 0x646e, 0x6e65, 0x4174, 0x7373, 0x6d65, 0x6c62, 0x3e79, 0x2f3c, 0x6564, 0x6570, 0x646e, 0x6e65, 0x7963, 0x3c3e, 0x612f, 0x7373, 0x6d65, 0x6c62, 0x3e79 END #endif // Fin de los recursos del idioma English (U.S.) // Llamada de macros de seguridad #ifndef APSTUDIO_INVOKED #endif STRINGTABLE DISCARDABLE BEGIN // A partir de aqui se pueden escribir cadenas de recursos... 1 "Mensaje de recurso" End // Fin de la libreria de recursos...
A continuación vamos a crear otro archivo de recursos. Nos referemos a dos librerias de cabecera de C++. La librería resource.h debe contener las siguientes lineas de código:
// Archivo de cabecera: resource.h // Archivo de cabecera generado por Microsoft Developer Studio // Usado por el archivo de recursos ResXpStylesTester.rc // Autor: Olimpo Bonilla Ramirez // Valores predeterminados para las macros #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif // Fin de la libreria de recursos...
Por último vamos a crear otra librería de cabecera llamada resrc1.h . La estructura de esta librería debe contener las siguientes lineas de código:
// Archivo de cabecera: resrc1.h // Archivo de cabecera generado por Microsoft Developer Studio // Usado por el archivo de recursos ResXpStylesTester.rc // Autor: Olimpo Bonilla Ramirez // Valores predeterminados para las macros #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif // Fin de la libreria de recursos...
A continuación vamos a crear un archivo de proceso de lotes llamado AppRegistro.bat . La estructura de este archivo es la siguiente:
@Echo off if exist ResXpStylesTester.res Del ResXpStylesTester.res Rc.exe ResXpStylesTester.rc
Finalmente solo falta de disponer el compilador de recursos de Microsoft. Los archivos que conforman este compilador son RC.EXE y RCDLL.DLL . Estos archivos deben de estar en la misma carpeta en donde hemos creado los archivos de cabecera y el archivo de recursos. En fin es todo lo que necesitamos. Si se va a incluir un icono para el archivo ejecutable, entonces es necesario que el archivo de icono deba estar en la misma ubicación en donde se encuentren los demas archivos antes mencionados, ya que sin el archivo, RC.EXE mandaría un mensaje de error de compilación. Entonces nuestra carpeta donde se encuentran los archivos es la siguiente:

Lo último que nos queda es simplemente ejecutar AppRegistro.bat. Hacemos clic sobre el archivo antes mencionado y si no hay errores de compilación se genera el archivo RESXPSTYLESTESTER.RES. En este momento, ya tenemos lo necesario para crear una aplicación en Visual Basic 6.0 que tome la apariencia visual de Windows XP.
Una vez ya definido nuestro, abramos entonces Visual Basic 6.0 y creamos un proyecto EXE Estandar. Por lo general vamos a crear una aplicación de prueba con algunos controles. Es necesario que en nuestro proyecto incluyamos el archivo RESXPSTYLESTESTER.RES. La estructura de nuestro proyecto de ejemplo seria la siguiente:

A continuación expongo el código fuente del módulo ModPrincipal.bas:
' Modulo: ModPrincipal.bas ' Modulo principal de la aplicación en general ' Fecha: ??????? Option Explicit Global i&, j&, k& Global Msg$, MsgErr$, NumErr& Global Cont%, Opc% ' Función principal de la aplicación Public Sub Main() If (App.PrevInstance) Then MsgBox LoadResString(19), vbCritical, LoadResString(1) End End If Call InitCommonControlsVB frmMain.Show Exit Sub Falla: MsgBox LastError$, vbCritical, LoadResString(1) End End Sub Public Function LastError$() LastError$ = "Se ha generado el Código de Error No. " & NumErr& & vbCrLf & vbCrLf & _ "Motivo: " & MsgErr$ End Function ' Fin de ModPrincipal.bas
Luego expongo el código fuente del módulo ModWinXP.bas:
' Modulo: ModWinXP.bas ' Modulo que controla la apariencia grafica de Windows XP, en caso de ' que la aplicación sea instalada en Windows XP o superior ' Fecha: ??????? Option Explicit ' Declaración del tipo de dato para el manejo de la apariencia de Windows XP Private Type tagInitCommonControlsEx lngSize As Long lngICC As Long End Type ' Declaración de las API's de Windows para el manejo y control de la apariencia de Windows XP Public Declare Function InitCommonControlsEx Lib "comctl32.dll" _ (iccex As tagInitCommonControlsEx) As Boolean Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _ ByVal lpLibFileName As String) As Long Public Declare Function FreeLibrary Lib "kernel32" ( _ ByVal hLibModule As Long) As Long Public Declare Function SetErrorMode Lib "kernel32" ( _ ByVal wMode As Long) As Long Public Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long ' Variables globales Global Const ICC_USEREX_CLASSES = &H200 Global Const SEM_NOGPFAULTERRORBOX = &H2& Global m_bInIDE As Boolean ' Funciones principales... Public Sub UnloadApp() If Not InIDE() Then SetErrorMode SEM_NOGPFAULTERRORBOX End Sub Public Function InIDE() As Boolean Debug.Assert (IsInIDE()) InIDE = m_bInIDE End Function Private Function IsInIDE() As Boolean m_bInIDE = True IsInIDE = m_bInIDE End Function Public Function InitCommonControlsVB() As Boolean On Error Resume Next Dim iccex As tagInitCommonControlsEx With iccex .lngSize = LenB(iccex) .lngICC = ICC_USEREX_CLASSES End With InitCommonControlsEx iccex InitCommonControlsVB = (Err.Number = 0) On Error GoTo 0 End Function ' Fin de ModWinXP.bas
A continuación escribimos solamente el codigo fuente del formulario de inicio frmMain.frm:
' Formulario: frmMain.bas ' Formulario de inicio de aplicación ' Fecha: ??????? Option Explicit ' Declaración de las API's de Windows para el manejo y control de la apariencia de Windows XP Private Declare Function LoadLibrary Lib "kernel32" Alias _ "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function FreeLibrary Lib "kernel32" ( _ ByVal hLibModule As Long) As Long Private Declare Function SetErrorMode Lib "kernel32" ( _ ByVal wMode As Long) As Long Private Declare Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Const SEM_FAILCRITICALERRORS = &H1 Private Const SEM_NOGPFAULTERRORBOX = &H2 Private Const SEM_NOOPENFILEERRORBOX = &H8000& Private m_hMod As Long Private Sub Form_Load() ' Inicializamos la aplicacion del estilo visual a la ventana actual InitCommonControlsVB m_hMod = LoadLibrary("shell32.dll") End Sub Private Sub Form_Unload(Cancel As Integer) If (MsgBox("¿Desea salir de esta aplicación?", vbQuestion + vbYesNo + vbDefaultButton1, _ "Aviso") = vbYes) Then Cancel = 0: FreeLibrary m_hMod: UnloadApp: End Else Cancel = 1: Exit Sub End If End Sub Private Sub Opc1_Click() frmSub.Show 1 End Sub Private Sub OpcSalir_Click() Unload Me End Sub ' Fin de frmMain.frm
Y por último el formulario frmSub.frm. En este formulario incluimos algunos controles de Windows por ejemplo algunos botones de comando, y los controles de Microsoft Windows Common Controls 5.0 y 6.0
' Formulario: frmSub.bas ' Formulario secundario de la aplicación de prueba. ' NOTA. Contiene una barra de progreso, un control Timer y un Datapicker. ' Fecha: ??????? Option Explicit Private T&, U& Private Sub Form_Load() Tmr2.Enabled = False End Sub Private Sub Tmr1_Timer() T& = T& + 1 If (Tmr2.Enabled = False) Then Tmr2.Enabled = True End Sub Private Sub Tmr2_Timer() If (U& > 10) Then Tmr2.Enabled = False U& = 0 PrgBar.Value = 0 Exit Sub Else PrgBar.Value = U& U& = U& + 1 End If End Sub ' Fin de frmSub.frm
Ya tenemos todo lo que necesitamos. Solo falta compilar el proyecto para generar el archivo ejecutable y listo. Si todo ha funcionado correctamente, entonces tendremos algo parecido como esto:

Debemos de tomar en cuenta las siguientes observaciones:
Espero que sirva este truco de antemano.
Olimpo Bonilla Ramirez
Lic. Matematicas Aplicadas y Computaciín Universidad Nacional Autonoma
de México
Ciudad de México, México.
Comentarios y sugerencias al correo electronico: o_bonilla1980[arroba]hotmail.com
Contenido del Zip :
Dos archivos ZIP: uno que contiene el Microsoft Compiler Code 4.0 y otro en donde se tiene el codigo fuente de ejemplo
También se incluye un archivo Html con el mismo contenido de esta página.
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar