Si quieres ver las versiones posteriores:
La del 28/Sep/1997 y la del 26/Dic/2001
Baja los listados y el ejemplo (VB4 para 16 ó 32 bits) (gsinput.zip 7.09 KB)
Esta utilidad es una revisión/mejora de gsConfirm.
Te permite además de hacer cuadros de diálogos al estilo de los de confirmación de Windows 95, crear unos inputbox personalizados con los iconos y botones de confirmación.Para usarlo hay dos funciones que devuelven el botón pulsado, pero según sea una u otra hará la función de un MsgBox o un InputBox.
Boton = InputConfirm (Mensaje, Texto [ [, Botones_Icono] [, Caption] [, Icono_Programa] [, Icono_Numero] ] )
Boton = MsgConfirm (Mensaje [ [, Botones_Icono] [, Caption] [, Icono_Programa] [, Icono_Numero] ] )
Los parámetros son: Mensaje: Mensaje a mostrar en la caja de diálogo Texto: El texto a mostrar en la caja de texto Botones_Icono: Botones y tipo de icono a mostrar: vbOk, vbYesNo, vbYesNoCancel, vbOkCancel, cSiATodo a estos valores sumarle el icono a mostrar, igual que en MsgBox Caption: El caption de la caja de diálogo Icono_Programa: Si se quiere mostrar el icono de un programa, este será el path del programa Icono_Numero: El número del icono a mostrar del programa indicado, el primero es 0 (cero)
Este es el aspecto del form gsInput.frm: (frmConfirm)
|
Este es el form de prueba:
|
Y ahora vamos a ver el código de gsInput.frm
'-------------------------------------------------- ' gsInput.frm (22/Mar/97) ' '© Guillermo Som Cerezo, 1996-97 ' 'Basado en gsConfirm (26/Jul/96) 'Revisado: ( 5/Mar/97) 'Nueva versión: Simulación de InputBox (22/Mar/97) ' 'Adaptado para 16 bits y puesto como utilidad separada. ' 'Función para "simular" una caja de diálogo... más o menos 'Necesita el módulo gsConfir.bas ' '-------------------------------------------------- 'Este código es de libre uso: 'No pido nada a cambio, ' sólo que se "referencie" de dónde se ha "tomado" '-------------------------------------------------- Option Explicit 'Declaraciones del API #If Win32 Then Private Declare Function GetClassWord Lib "user32" _ (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" _ (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long Private Declare Function DrawIcon Lib "user32" _ (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal hIcon As Long) As Long #Else Private Declare Function GetClassWord Lib "User" _ (ByVal hWnd As Integer, ByVal nIndex As Integer) As Integer Private Declare Function ExtractIcon Lib "shell.dll" _ (ByVal hInst As Integer, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As Integer Private Declare Function DrawIcon Lib "User" _ (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal hIcon As Integer) As Integer #End If 'Propiedad pública del form Public BotonPulsado As Integer Public Sub ExtraerIcono(sPrograma As String, queIcon As Long) 'Cargar el icono del programa Dim myhInst As Long Dim hIcon As Long Dim i As Long Const GCW_HMODULE = (-16&) myhInst = GetClassWord(hWnd, GCW_HMODULE) hIcon = ExtractIcon(myhInst, sPrograma, queIcon) If hIcon Then Picture1.Picture = LoadPicture("") Picture1.AutoRedraw = -1 i = DrawIcon(Picture1.hDC, 0, 0, hIcon) Picture1.Refresh Else Picture1.Visible = False End If End Sub Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 BotonPulsado = vbYes Case 1 BotonPulsado = cSiATodo '8 Case 2 BotonPulsado = vbNo Case Else BotonPulsado = vbCancel End Select Hide End Sub Private Sub Form_Load() ' BotonPulsado = 0 End Sub Private Sub Form_Unload(Cancel As Integer) 'Si se cierra sin pulsar botón, es como si se cancelara If BotonPulsado = 0 Then BotonPulsado = vbCancel End If Set frmConfirm = Nothing End Sub
El siguiente código se debe introducir en el módulo gsInput.bas y es el que tiene las funciones que se usarán.
'-------------------------------------------------- 'Módulo para función de confirmación (22/Mar/97) ' '© Guillermo Som Cerezo, 1996-97 ' 'Basado en gsConfirm (26/Jul/96) 'Revisado: ( 5/Mar/97) 'Nueva versión: Simulación de InputBox (22/Mar/97) ' 'Adaptado para 16 bits y puesto como utilidad separada. ' 'Función para "simular" una caja de diálogo... más o menos 'Necesita el form gsInput.frm ' '-------------------------------------------------- 'Este código es de libre uso: 'No pido nada a cambio, ' sólo que se "referencie" de dónde se ha "tomado" '-------------------------------------------------- Option Explicit 'Constantes para el tipo Global Const cSi = vbOK Global Const cSiNo = vbYesNo Global Const cSiNoCancelar = vbYesNoCancel Global Const cSiCancelar = vbOKCancel Global Const cSiATodo = 8 'Constantes para el botón pulsado Global Const cBotonSi = vbYes '6 Global Const cBotonNo = vbNo '7 Global Const cBotonCancelar = vbCancel '2 Global Const cBotonSiATodo = 8 '8 Private Sub PosicionarControles(sEntrada As String, iTipo As Integer, sCaption As String, Optional vMostrarText) '---------------------------------------------- ' Ajusta los controles a mostrar '---------------------------------------------- Dim i As Integer Dim j As Integer Dim iQueBoton As Integer Dim fHeight As Integer Dim mIzq As Integer 'La posición más a la izquierda Dim bMostrarText As Boolean If IsMissing(vMostrarText) Then bMostrarText = False Else bMostrarText = CBool(vMostrarText) End If iQueBoton = 0 If iTipo >= 512 Then iQueBoton = 3 iTipo = iTipo Mod 512 ElseIf iTipo >= 256 Then iQueBoton = 2 iTipo = iTipo Mod 256 End If With frmConfirm If bMostrarText Then .Text1.Enabled = True .Text1.Visible = True Else .Text1.Enabled = False .Text1.Visible = False End If If iTipo And vbCritical Then .Image1(0).Picture = .Image1(1).Picture iTipo = iTipo - vbCritical ElseIf iTipo And vbQuestion Then .Image1(0).Picture = .Image1(2).Picture iTipo = iTipo - vbQuestion ElseIf iTipo And vbExclamation Then .Image1(0).Picture = .Image1(3).Picture iTipo = iTipo - vbExclamation ElseIf iTipo And vbInformation Then .Image1(0).Picture = .Image1(4).Picture iTipo = iTipo - vbInformation Else 'Exclamación por defecto .Image1(0).Picture = .Image1(3).Picture End If .Label1(0).Visible = True .Label1(0) = sEntrada fHeight = .Label1(0).Top + .Label1(0).Height + 1040 If .Text1.Enabled Then fHeight = fHeight + 420 End If If fHeight < 2500 Then fHeight = 2500 End If .Height = fHeight If .Text1.Enabled Then .Text1.Top = fHeight - 1220 End If .Command1(0).Top = fHeight - 800 'Usar enabled en lugar de visible, ya que hasta que se haga el show 'no serán realmente visibles For i = 1 To 3 .Command1(i).Enabled = False Next .Command1(0).Visible = True 'Seleccionar los botones a mostrar If iTipo = vbYesNo Then .Command1(2).Enabled = True ElseIf iTipo = vbYesNoCancel Then .Command1(2).Enabled = True .Command1(3).Enabled = True ElseIf iTipo = 8 Then .Command1(1).Enabled = True .Command1(2).Enabled = True .Command1(3).Enabled = True ElseIf iTipo = vbOKCancel Then .Command1(3).Enabled = True .Command1(0).Caption = "Aceptar" Else 'Si sólo se muestra un botón... .Command1(0).Caption = "Aceptar" End If 'Ajustar la localización, según los botones mostrados mIzq = 0 For i = 3 To 0 Step -1 .Command1(i).Top = .Command1(0).Top If .Command1(i).Enabled Then If mIzq = 0 Then mIzq = .ScaleWidth - 1215 Else mIzq = mIzq - 1170 End If .Command1(i).Left = mIzq .Command1(i).Visible = True Else .Command1(i).Visible = False End If Next 'Centrar el form .Move (Screen.Width - .Width) \ 2, (Screen.Height - .Height) \ 2 .Caption = sCaption End With End Sub Public Function InputConfirm(sEntrada As String, sTexto As String, Optional vTipo, Optional vCaption, Optional vPrograma, Optional vIcono) As Integer '---------------------------------------------- ' Muestra la ventana de confirmación '---------------------------------------------- 'Según el valor de iTipo, se mostrará: ' Si es > de 256, seleccionar No ' Si es => de 512, seleccionar Cancelar ' Aceptar vbOk ' Si, No vbYesNo ' Si, No, Cancelar vbYesNoCancel ' Si, SiATodo, No, Cancelar 8 'Tipo de icono a mostrar: ' Stop vbCritical 16 ' Interrogación vbQuestion 32 ' Exclamación vbExclamation 48 ' Información vbInformation 64 '---------------------------------------------- 'El valor devuelto será: ' Si vbYes ' SiATodo 8 ' No vbNo ' Cancelar vbCancel '---------------------------------------------- Dim i As Integer Dim j As Integer Dim iTipo As Integer Dim sCaption As String Dim sPrograma As String Dim lIcono As Long If IsMissing(vTipo) Then iTipo = vbOK Else iTipo = vTipo End If If IsMissing(vCaption) Then sCaption = "" Else sCaption = vCaption End If If IsMissing(vPrograma) Then sPrograma = "" Else sPrograma = vPrograma End If If IsMissing(vIcono) Then lIcono = 0& Else lIcono = vIcono End If If Len(sPrograma) = 0 Then frmConfirm!Picture1.Visible = False Else frmConfirm.ExtraerIcono sPrograma, lIcono End If frmConfirm!Text1 = sTexto PosicionarControles sEntrada, iTipo, sCaption, True '========================================================================== 'Nota si falla el .Show vbModal usa éste código ' 'Do ' frmConfirm.Show ' DoEvents 'Loop Until .BotonPulsado ' frmConfirm.Show vbModal '========================================================================== sTexto = frmConfirm.Text1 InputConfirm = frmConfirm.BotonPulsado Unload frmConfirm DoEvents End Function Public Function MsgConfirm(sEntrada As String, Optional vTipo, Optional vCaption, Optional vPrograma, Optional vIcono) As Integer '---------------------------------------------- ' Muestra la ventana de confirmación '---------------------------------------------- 'Según el valor de iTipo, se mostrará: ' Si es > de 256, seleccionar No ' Si es => de 512, seleccionar Cancelar ' Aceptar vbOk ' Si, No vbYesNo ' Si, No, Cancelar vbYesNoCancel ' Si, SiATodo, No, Cancelar 8 'Tipo de icono a mostrar: ' Stop vbCritical 16 ' Interrogación vbQuestion 32 ' Exclamación vbExclamation 48 ' Información vbInformation 64 '---------------------------------------------- 'El valor devuelto será: ' Si vbYes ' SiATodo 8 ' No vbNo ' Cancelar vbCancel '---------------------------------------------- Dim i As Integer Dim j As Integer Dim iTipo As Integer Dim sCaption As String Dim sPrograma As String Dim lIcono As Long If IsMissing(vTipo) Then iTipo = vbOK Else iTipo = vTipo End If If IsMissing(vCaption) Then sCaption = "" Else sCaption = vCaption End If If IsMissing(vPrograma) Then sPrograma = "" Else sPrograma = vPrograma End If If IsMissing(vIcono) Then lIcono = 0& Else lIcono = vIcono End If If Len(sPrograma) = 0 Then frmConfirm!Picture1.Visible = False Else frmConfirm.ExtraerIcono sPrograma, lIcono End If PosicionarControles sEntrada, iTipo, sCaption '========================================================================== 'Nota si falla el .Show vbModal usa éste código ' 'Do ' frmConfirm.Show ' DoEvents 'Loop Until .BotonPulsado ' frmConfirm.Show vbModal '========================================================================== MsgConfirm = frmConfirm.BotonPulsado Unload frmConfirm DoEvents End Function
Y para terminar el código del form de prueba, no es muy sofisticado, pero vale para que sepas cómo usar esta utilidad.
'---------------------------------------------------------- 'Para probar gsInput (22/Mar/97) ' '© Guillermo Som Cerezo, 1997 '---------------------------------------------------------- Option Explicit Private Sub cmdPrueba_Click(Index As Integer) Dim sMsg As String Dim iValor As Integer Dim sTexto As String Select Case Index Case 0 'Si sMsg = "Pulsa SI para aceptar lo que sea..." iValor = MsgConfirm(sMsg) Case 1 sMsg = "Pulsa Si, para aceptar" & vbCrLf & "No, para no aceptar..." iValor = MsgConfirm(sMsg, vbYesNo + vbQuestion) Case 6 sMsg = "Pulsa Aceptar o Cancelar" iValor = MsgConfirm(sMsg, vbOKCancel + vbInformation) Case 2 sMsg = "Pulsa Si, para aceptar" & vbCrLf & "No, para no aceptar" _ & vbCrLf & "Cancelar, para cancelar..." & vbCrLf & " ¡Que original!" iValor = MsgConfirm(sMsg, vbYesNoCancel + vbCritical, "Prueba de gsConfirm") Case 3 sMsg = "Esta es la Refinitiva..." & vbCrLf & vbCrLf & "Para que serán estos botones?" iValor = MsgConfirm(sMsg, cSiATodo + vbInformation, "Prueba de gsConfirm") Case 4 sMsg = "¿Quieres borrar este programa?" & vbCrLf & vbCrLf & "Sólo es una prueba, así que no te preocupes," & vbCrLf & "que no se borrará..." & vbCrLf & "Además este es un comentario grande, para que veas de lo que es capaz" & vbCrLf & "esta 'rutinilla'" iValor = MsgConfirm(sMsg, vbYesNoCancel + vbQuestion, "Prueba de gsConfirm", "c:\Windows\Notepad.exe") Case 5 'Prueba al estilo InputBox sTexto = "Texto de entrada" sMsg = "Escribe el nombre de lo que quieras..." & vbCrLf & "Ya que esto es para probar el estilo InputBox" iValor = InputConfirm(sMsg, sTexto, vbYesNo + vbInformation, "Prueba de InputConfirm") If iValor = vbYes Then sMsg = "que SI!" ElseIf iValor = vbNo Then sMsg = "que NO!" End If MsgBox "Has escrito " & sTexto & vbCrLf & "y has pulsado: " & sMsg Exit Sub End Select 'Mostrar el mensaje según el botón pulsado If iValor = vbYes Then sMsg = "SI o ACEPTAR" ElseIf iValor = vbNo Then sMsg = "NO" ElseIf iValor = vbCancel Then sMsg = "CANCELAR" ElseIf iValor = cSiATodo Then sMsg = "SI A TODO" End If MsgBox "Has pulsado en el botón: " & sMsg End Sub Private Sub cmdSalir_Click() Unload Me End End Sub Private Sub Form_Unload(Cancel As Integer) Set Form1 = Nothing End Sub
Y eso es todo amigos, que lo disfrutes.