Ejemplos usando el Api de windows para Visual basic

167 - Cambiar el texto a un botón de un MsgBox

<Volver> - Anterior - Siguiente



 

 

Contenido:

 

 

 


Código fuente de la función

Ejemplo que utiliza el Api para crear un Hook y poder cambiar el texto o caption de un MsgBox

El siguiente ejemplo muestra como usar las funciones del Api SetWindowsHookEx ( Instala el hook) UnhookWindowsHookEx ( remueve el Hook) y el Api SetDlgItemText que es el que cambia el texto del botón de la caja de mensajes.

 

 

El funcionamiento es mas o menos el siguiente :

Antes de llamar al MsgBox clásico, hay que instalar el Hook. Lo que hace el hook es interceptar el momento en que se activa el MsgBox para poder cambiarle el texto. El texto del botón como se mencionó , se cambia con el Api SetDlgItemText.

Esta última función tiene tres parámetros. Los que interesan son los últimos dos (nIDDlgItem as Long y lpString As String)

En el primer parámetro ( nIDDlgItem ) , debemos indicar el botón que se va a cambiar. Acá podemos pasar los valores de constantes de vb para indicar los botones (vbAbort, vbCancel, vbIgnore, vbNo , vbOK , vbRetry y vbYes)

El otro parámetro ( lpString ) es un String con el texto para el botón.

 

En base a esto, hice la siguiente función de ajuste llamada MsgBoxExText.

Esa función es exactamente igual a un MsgBox común y corriente, la único diferencia es que tiene dos parámetros mas al final de todo. Uno que indica el botón que se cambiará ( El_Boton As Ebuttons ) y el otro el texto: ( TextButton As String )

 

    Function MsgBoxExText(Prompt As String, _
                          Buttons As VbMsgBoxStyle, _
                          Title As String, _
                          El_Boton As Ebuttons, _
                          TextButton As String) As VbMsgBoxResult 

 

Notar que la función devuelve un tipo de dato vbMsgBoxResult, exactamente igual que un MsgBox de vb

A continuación se lista el código para agregar en un módulo bas ( Importante: debe estar en un módulo bas si o si ya que los Hook NO se pueden implementar en un formulario o módulo de clase, al menos no de esta forma.)

 

Código en el módulo BAS

 


Ejemplo 1

 

Lo siguiente llama a un MsgBox con el botón VbYesNo, y le cambia el texto al botón " Si " por el texto " Continuar "

 

vista del ejemplo

 

     ret = MsgBoxExText(" Ejemplo ", vbYesNo + vbExclamation, _
                        "Titulo", YES, " .. Continuar ")

 


Ejemplo 2

Lo siguiente llama a un MsgBox con el botón VbYesNo, y le cambia el texto al botón " NO " por el texto " No Continuar "

vista del msgbox del ejemplo 2

 

Dim ret As VbMsgBoxResult

    ret = MsgBoxExText(" Desea continuar ? ", vbYesNo + vbQuestion, _
                       "Titulo", NO, " No Continuar ")

        
    If ret = vbYes Then
       ' ....
    Else
       ' .....
    End If 

 


Ejemplo 3

Esto otro despliega un MsgBox con los botones Si , No y Cancelar ( vbYesNoCancel ), y le cambia el texto al botón Cancelar por el texto " Salir "

 

Vista del msgbos del ejemplo

 

Dim ret As VbMsgBoxResult

    ret = MsgBoxExText(" Continuar ? ", vbYesNoCancel + vbQuestion, _
                       "Titulo", Cancel, " Salir ") 

 

Importante: Cualquier error que se produzca mientras se ejecuta el Hook, se cerrará el Ide de visual basic por completo y por lo tanto si no hubiésemos guardado los cambios ..perderemos todo lo realizado.

 


Relacionados



Buscar en Recursos vb