Autor Tema: TextBox acepta solo numeros usando SetWindowLong  (Leído 4784 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
TextBox acepta solo numeros usando SetWindowLong
« en: Octubre 14, 2014, 04:18:04 pm »
Les dejo esta rutinita que sirve para que un TextBox acepte solo numeros (no acepta coma, ni punto) pero lo bueno es que deja pasar los tab, delete, backspace, etc. Y me parece mas sencilla que andar viendo el valor del ASCII ingresado.

Código: (VB) [Seleccionar]
'// TextBox solo numeros //
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&


Public Sub TextBoxSoloNumeros(ByRef oTextBox As TextBox, Flag As Boolean)

    Dim curstyle As Long, newstyle As Long

    'retrieve the window style
    curstyle = GetWindowLong(oTextBox.hWnd, GWL_STYLE)

    If Flag Then
       curstyle = curstyle Or ES_NUMBER
    Else
       curstyle = curstyle And (Not ES_NUMBER)
    End If

    'Set the new style
    newstyle = SetWindowLong(oTextBox.hWnd, GWL_STYLE, curstyle)
    'refresh
    oTextBox.Refresh

End Sub


'Uso:

TextBoxSoloNumeros Text1, True


E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #1 en: Octubre 14, 2014, 07:46:35 pm »
Gracias por el aporte amigo.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #2 en: Octubre 15, 2014, 07:22:53 pm »
Les dejo esta rutinita que sirve para que un TextBox acepte solo numeros (no acepta coma, ni punto) pero lo bueno es que deja pasar los tab, delete, backspace, etc. Y me parece mas sencilla que andar viendo el valor del ASCII ingresado.

Código: (VB) [Seleccionar]
'// TextBox solo numeros //
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&


Public Sub TextBoxSoloNumeros(ByRef oTextBox As TextBox, Flag As Boolean)

    Dim curstyle As Long, newstyle As Long

    'retrieve the window style
    curstyle = GetWindowLong(oTextBox.hWnd, GWL_STYLE)

    If Flag Then
       curstyle = curstyle Or ES_NUMBER
    Else
       curstyle = curstyle And (Not ES_NUMBER)
    End If

    'Set the new style
    newstyle = SetWindowLong(oTextBox.hWnd, GWL_STYLE, curstyle)
    'refresh
    oTextBox.Refresh

End Sub


'Uso:

TextBoxSoloNumeros Text1, True

No entiendo el uso , como se deberia implementar ?

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #3 en: Octubre 15, 2014, 07:55:14 pm »
Despues de llamar a

TextBoxSoloNumeros Text1, True

El textbox solo aceptará numeros! (Ojo, compruebalo igual, pueden pegar texto o alguna cosa así depende del windows.)

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #4 en: Octubre 15, 2014, 10:10:25 pm »
Yo uso un UC, original del master Yacosta creo, al que agregué unas cosillas, como la de validar el texto pegado, así deja solo números, solo texto, solo texto en mayusculas, solo texto en minusculas y solo numeros con formato millares... he tratado, infructuosamente ,que me permita ingresar fecha preformateada, como el maskedit, pero no lo he conseguido ni le he puesto mucho empeño a ello tampoco, (jeje), si alguno quiere y puede hacerlo se le agradecerá si lo comparte...

los Fuentes:
https://mega.co.nz/#!nEQBVLKS!iaYgNcdGGcrWb2EjPkj1y7FxzY67RKfx6IAbtGR_p-U

Saludos cordiales

_____________________________
Sé un poco de todo y mucho de nada... ;)

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #5 en: Octubre 15, 2014, 10:49:52 pm »
Despues de llamar a

TextBoxSoloNumeros Text1, True

El textbox solo aceptará numeros! (Ojo, compruebalo igual, pueden pegar texto o alguna cosa así depende del windows.)

Pero donde ubicacamos la funcion ? el CHANGE del textbox ?

gracias

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #6 en: Octubre 15, 2014, 11:08:05 pm »
Si permite los BackSpace, los Tab, Enter, etc, ha de ubicarse en el Evento Keypress de preferencia....

Saludos Cordiales

_____________________________
Sé un poco de todo y mucho de nada... ;)

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:TextBox acepta solo numeros usando SetWindowLong
« Respuesta #7 en: Octubre 17, 2014, 10:33:08 am »

Pero donde ubicacamos la funcion ? el CHANGE del textbox ?
gracias

Sub Form Load
 
       TextBoxSoloNumeros Text1, True

End Sub

Con solo llamar a esa linea en el load, te olvidas de controlar el change y los keypress, la api se encarga de hacer todo solita.