Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Waldo en Octubre 14, 2014, 04:18:04 pm

Título: TextBox acepta solo numeros usando SetWindowLong
Publicado por: Waldo 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

Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: E N T E R en Octubre 14, 2014, 07:46:35 pm
Gracias por el aporte amigo.
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: gasafonso 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 ?
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: raul338 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.)
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: AxioUK 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 (https://mega.co.nz/#!nEQBVLKS!iaYgNcdGGcrWb2EjPkj1y7FxzY67RKfx6IAbtGR_p-U)

Saludos cordiales
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: gasafonso 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
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: AxioUK 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
Título: Re:TextBox acepta solo numeros usando SetWindowLong
Publicado por: Waldo 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.