Sei sulla pagina 1di 4

Access & VBA FAQ

Inicio | Novedades | Buscar | Enlaces | Contactar


Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Mdulos
Base de datos
Miscelnea
API
Utilidades
Problemas
Cadenas
Fecas
Todos los temas
Utilidades : InputBoxEx (nuevo - compatible con VB)
Autor/es:
Juan M Afn de Ribera
Pregunta : !Es "osible acer #ue un In"utBo$ muestre asteriscos al estilo de las mscaras
ti"o contrase%a&
Respuesta : En "rinci"io un In"utBo$ no tiene esa funcionalidad' Una solucin a lo #ue
"retendes acer es #ue constru(as un formulario #ue simule un In"utBo$) con una
eti#ueta) un cuadro de te$to ( un botn Ace"tar ( otro Cancelar' En ese cuadro de te$to
"ondr*as una mscara ti"o contrase%a ( en los botones Ace"tar ( Cancelar el cdi+o
adecuado "ara la ocasin'
A,n as*) utili-ando el API de .indo/s se "uede acer'
El resultado es una funcin llamada In"utBo$E$) #ue es ca"a- de mostrar asteriscos al
estilo de una mscara ti"o contrase%a' Esta funcin es mu( similar en su uso al In"utBo$
ori+inal) "ero tiene unos ar+umentos e$tra #ue "aso a detallar a continuacin
Argumentos
Argumento Descripcin
0eis
"rimeros
ar+umentos
E$actamente i+ual #ue los #ue a"arecen en la a(uda de 1BA "ara Access sobre
la funcin In"utBo$
0t(le 2"cional' Este ar+umento es el #ue afecta al estilo #ue ado"tar el In"utBo$'
1es a la seccin 1alores "ara consultar los valores "osibles ( una descri"cin
de cada uno de los estilos
Ma$Car 2"cional' 0i este ar+umento tiene valor) indicar el l*mite m$imo de caracteres
#ue el In"utBo$E$ admitir'
Valores
Valor Descripcin
0None Muestra un In"utBo$ normal
0"ass/ord Muestra un In"utBo$ con caracteres ti"o asterisco
0number Muestra un In"utBo$ #ue slo ace"tar n,mero 3sin decimales4
05o/erCase El In"utBo$ mostrar todos los caracteres introducidos en ma(,sculas
0U""erCase El In"utBo$ mostrar todos los caracteres introducidos en min,sculas
E6em"lo de uso7
Esta l*nea de cdi+o mostrar un In"utBo$ ti"o contrase%a
Contrasea = InputBoxEx("Introduzca su contrasea", _
"Control de usuarios", , , , , , SPassword)
El si+uiente cdi+o funcionar "ara Access 8999 o su"erior' Para Access :; ir a la seccin
E6em"los ( descar+ar el corres"ondiente a esta versin de Access'
A rai- de al+unas "eticiones ( su+erencias) e cambiado al+unos detalles del cdi+o "ara
#ue tambi<n "ueda ser utili-ado en el entorno de 1B
Pe+a este cdi+o en un mdulo estandar
'
'
' InputBoxEx
'
' C!di"o escrito ori"inal#ente por $uan % &'(n de )i*era+
' Est(s autorizado a utilizarlo dentro de una aplicaci!n
' sie#pre ,ue esta nota de autor per#anezca inalterada+
' En el caso de ,uerer pu*licarlo en una p("ina -e*,
' por 'a.or, contactar con el autor en
'
' access.*a'a,/0a+co#
'
' Este c!di"o se *rinda por cortes1a de
' $uan %+ &'(n de )i*era
'
'
' estilos del InputBoxEx
Pu*lic Enu# St0leInputBox
S2one ' InputBox nor#al
SPassword ' #(scara oculta
S2u#*er ' s!lo n3#eros
S4owerCase ' s!lo #in3sculas
S5pperCase ' s!lo #a03sculas
End Enu#
Pri.ate 6eclare 7unction 7ind-indowEx 4i* "user89" _
&lias "7ind-indowEx&" _
(B0:al ;-nd< &s 4on", _
B0:al ;-nd9 &s 4on", _
B0:al lpsz< &s Strin", _
B0:al lpsz9 &s Strin") &s 4on"

Pri.ate 6eclare 7unction Send%essa"e 4i* "user89" _
&lias "Send%essa"e&" _
(B0:al ;wnd &s 4on", _
B0:al w%s" &s 4on", _
B0:al wPara# &s 4on", _
lPara# &s &n0) &s 4on"
Pri.ate 6eclare 7unction =et7ore"round-indow 4i* "user89" () &s 4on"
Pri.ate 6eclare 7unction =et-indow4on" 4i* "user89" _
&lias "=et-indow4on"&" _
(B0:al ;wnd &s 4on", _
B0:al nIndex &s 4on") &s 4on"

Pri.ate 6eclare 7unction Set-indow4on" 4i* "user89" _
&lias "Set-indow4on"&" _
(B0:al ;wnd &s 4on", _
B0:al nIndex &s 4on", _
B0:al dw2ew4on" &s 4on") &s 4on"

Pri.ate 6eclare 7unction Set>i#er 4i* "user89" _
(B0:al ;wnd &s 4on", _
B0:al nI6E.ent &s 4on", _
B0:al uElapse &s 4on", _
B0:al lp>i#er7unc &s 4on") &s 4on"

Pri.ate 6eclare 7unction ?ill>i#er 4i* "user89" _
Pri.ate 6eclare 7unction ?ill>i#er 4i* "user89" _
(B0:al ;wnd &s 4on", _
B0:al nI6E.ent &s 4on") &s 4on"
Pri.ate Const =-4_S>@4E = (<A)
' constantes con los estilos de
' controles 'E6I>'
Pri.ate Const ES_5PPE)C&SE = BCD
Pri.ate Const ES_4E-E)C&SE = BC<F
Pri.ate Const ES_P&SS-E)6 = BC9F
Pri.ate Const ES_25%BE) = BC9FFF
' #ensaGe para esta*lecer el caracter ,ue se #ostrar(
' co#o #(scara para el InputBoxEx tipo contrasea
Pri.ate Const E%_SE>P&SS-E)6CC&) = BCCC
' constante ,ue contiene el car(cter ,ue se #ostrar(
' (este .alor puede ser cual,uier otro, en este caso
' ;e esco"ido el t1pico asterisco)
Pri.ate Const ?E@_%&S? = H9B ' "I"
' #ensaGe para esta*lecer el n3#ero #(xi#o de
' caracteres per#itidos
Pri.ate Const E%_4I%I>>EJ> = BCCK
Pri.ate SInputBox &s St0leInputBox
Pri.ate ;InputBox &s 4on"
Pri.ate cC;ar &s 4on"
Pri.ate ># &s 4on"
Pu*lic 7unction InputBoxEx( _
Pro#pt, _
Eptional >itle, _
Eptional 6e'ault, _
Eptional JPos, _
Eptional @Pos, _
Eptional Celp7ile, _
Eptional Context, _
Eptional St0le &s St0leInputBox = S2one, _
Eptional %axC;ar &s 4on") &s Strin"

' si no ;a0 nin"3n otro InputBoxEx a*ierto+++
I' ;InputBox = F >;en
' Crea#os un ti#er ,ue se eGecutar( a la dLci#a de se"undo
># = Set>i#er(FB, FB, <FF, &ddressE' >i#erProc)

SInputBox = St0le
cC;ar = %axC;ar
' lla#a#os al InputBox de #anera nor#al
En Error =o>o &nular>i#er
InputBoxEx = InputBox(Pro#pt, >itle, 6e'ault, JPos, @Pos, Celp7ile, Context)
End I'

Exit 7unction

&nular>i#erM
' si ;a ;a*ido al"3n error, se cancela la operaci!n
Call ?ill>i#er(FB, >#)
%s"Box "ErrorM " B Err+2u#*er B .*Cr4' B Err+6escription

End 7unction
Pri.ate Su* >i#erProc( _
B0:al ;wnd &s 4on", _
B0:al u%s" &s 4on", _
B0:al idE.ent &s 4on", _
B0:al dw>i#e &s 4on")
6i# ;Edit &s 4on"
6i# CurSt0le &s 4on"

' localiza#os el #anipulador de la .entana acti.a
' (se supone ,ue es la .entana del InputBox)
;InputBox = =et7ore"round-indow
' localiza#os el #anipulador de la caGa de texto
' del InputBox
;Edit = 7ind-indowEx(;InputBox, FB, "E6I>", .*2ullStrin")
;Edit = 7ind-indowEx(;InputBox, FB, "E6I>", .*2ullStrin")

' o*tene#os los estilos de la caGa de texto +++
CurSt0le = =et-indow4on"(;Edit, =-4_S>@4E)

Select Case SInputBox
Case SPassword ' tipo password
' le deci#os a la caGa de texto cu(l ser( el car(cter
' ,ue aparecer( en .ez de lo ,ue teclee el usuario
Call Send%essa"e(;Edit, E%_SE>P&SS-E)6CC&), ?E@_%&S?, FB)
' 0 le aadi#os el estilo de introducci!n de contraseas
CurSt0le = CurSt0le Er ES_P&SS-E)6
Case S2u#*er ' tipo n3#ero
CurSt0le = CurSt0le Er ES_25%BE)
Case S4owerCase ' tipo #in3sculas
CurSt0le = CurSt0le Er ES_4E-E)C&SE
Case S5pperCase ' tipo #a03sculas
CurSt0le = CurSt0le Er ES_5PPE)C&SE
End Select

I' cC;ar N F >;en
Call Send%essa"e(;Edit, E%_4I%I>>EJ>, cC;ar, FB)
End I'
' ca#*ia#os el estilo
Call Set-indow4on"(;Edit, =-4_S>@4E, CurSt0le)
' desacti.a#os el ti#er para ,ue s!lo se eGecute esta .ez
Call ?ill>i#er(FB, >#)
;InputBox = F

End Su*
'
Ejemplos:
In"utBo$E$' Access 8999 o su"erior
In"utBo$E$:; Access :;

Temas relacionados:
Ms+Bo$E$ 3nuevo = com"atible con 1B4

Juan M! Afn de Ribera "#$% &ltima actuali'acin: "(/%/"##)

Potrebbero piacerti anche