Autor Tema: Creando ucTextbox  (Leído 3542 veces)

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Creando ucTextbox
« en: Junio 13, 2011, 05:34:21 am »
Hola, ya voy algunas horas tratando de aprender a hacer User Controls y estoy empezando con extender el textbox, siguiendo este cursito:
http://vexpert.mvps.org/articles/axProp1.htm
y estudiando la clase MiTextBoxes.

Ya he logrado comprender como va esto, y ya hice las propiedades de SoloNumeros, SoloLetras, TodoRestringido, pintar al ganar el foco, seleccionar todo al ganar el foco. Aun no he probado la contradicción, mañana lo haré a ver como explota, o sea, que marque la propiedad SoloNumeros y SoloLetras a la vez, como no pienso hacer eso en mi proyecto no me urge resolver eso pero agradecería cualquier comentario.
Pues bien, grabe, probe y use, chevere.

El detalle esta que me olvide de un detalle, no se como crear la propiedad PasswordChar del Textbox. O sea, que pinte el * pero que trabaje con el verdadero carácter ingresado.

Tendría que capturar la propiedad PasswordChar del TextBox del UC y "heredarla". ¿Seria asi?, ya van las 3:30 am y ya no jalo  ;) , mañana continuare, agradecería cualquier comentario para aclarar ese punto principalmente. Gracias.

P.D.: Estoy como bebe de pecho con este tema

P.D.2.: También logre modificar el ucImage de Cobein, le agregué que por defecto esté con Alpha al 80% y cuando llegue el mouse se ponga en 100% y al retirarse nuevamente en 80%, asi ya no lo tengo que hacerlo en el proyecto a cada rato en el MouseEnter y MouseExit. Ademas de eso le hice cambiar el mouseicon cuando pase por encima del ucImage  con una pequeña trafa que el mismo Cobein me recomendó hace tiempo: Cambiarle al formulario en vez de al control.

Saludos
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Creando ucTextbox
« Respuesta #1 en: Junio 13, 2011, 09:49:32 am »
Hola, ya voy algunas horas tratando de aprender a hacer User Controls y estoy empezando con extender el textbox, siguiendo este cursito:
http://vexpert.mvps.org/articles/axProp1.htm
y estudiando la clase MiTextBoxes.
Bienvenido al mundo  :) ;)

Aun no he probado la contradicción, mañana lo haré a ver como explota, o sea, que marque la propiedad SoloNumeros y SoloLetras a la vez, como no pienso hacer eso en mi proyecto no me urge resolver eso pero agradecería cualquier comentario.
Pues bien, grabe, probe y use, chevere.
No entendí eso de la contradicción, pero tenes 2 propiedades que "chocan" entre si (en algun momento haras algo como If SoloNumeros ... ElseIf SoloLetras ... Else ... End If) lo mejor es usar Enumeraciones en lugar de letras. Algo asi

Código: (vb) [Seleccionar]
Public Enum MiTextBox_Opciones ' Si, el nombre te convendria cambiarlo jeje
   Normal
   SoloLetras
   SoloNumeros
   Documento  ' Lo puedes seguir extendiendo normalmente!
End Enum
Private m_modo as MiTextBox_Opciones ' Para guardarlo y trabajar con el luego


Public Property Get Modo as MiTextBox_Opciones
   Modo = m_modo
End Property

Public Property Let Modo(value As MiTextBox_Opciones)
  m_modo = value
End Property


' En donde uses esas variables, a mi se me ocurrio el KeyPress del Textbox jeje
Private Sub txtControl_KeyPress(keyascii As Integer)
     Select Case m_modo ' Filtramos
           Case SoloLetras
                 '...
           Case SoloNumeros
                 ' iria algun If .. Then keyascii = 0 para cancelarlo :P
           Case Documento
                 ' Todo depende de lo que quieras hacer :P
           Case Normal ' o Else :P
                 ' Creo que no hariamos nada en este caso xD
      End Select
End Sub

Tendría que capturar la propiedad PasswordChar del TextBox del UC y "heredarla". ¿Seria asi?, ya van las 3:30 am y ya no jalo  ;) , mañana continuare, agradecería cualquier comentario para aclarar ese punto principalmente. Gracias.
Si por "heredarla" te refieres a crear una propiedad con el mismo nombre y ponerlo "Propiedad = TextBox.Propiedad" no se si funcione, pero en todo caso, siempre podras hacer como para simular
PasswordChar = String$("*", Len(miTextBox.PasswordChar)) ' Asi solo devuelve solo asteriscos ;)

Ademas de eso le hice cambiar el mouseicon cuando pase por encima del ucImage  con una pequeña trafa que el mismo Cobein me recomendó hace tiempo: Cambiarle al formulario en vez de al control.
Todo depende del proyecto, si siempre lo vas a usar de la misma forma, puedes ponerlo directo en el control :P cada uno es libre de modificar los controles a su gusto  ;D

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #2 en: Junio 13, 2011, 12:55:43 pm »
Citar
Bienvenido al mundo   

jeje, estuve metido siempre en la Matrix.

Excelente explicación doc. Muchísimas gracias, voy a ponerme a desarrollador.

Saludos
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Pregunta...
« Respuesta #3 en: Junio 21, 2011, 01:04:50 am »
Que tal Yvan !!! ;D

Por fin, como vas con lo de los UserControl??? Has avanzado??? espero que sí !!!
Pero de todas maneras en lo que puedas dímelo !!! :)

Saludos !!!
Manuel F. Borrego S. 8)
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #4 en: Junio 21, 2011, 02:08:41 am »
Si, después de la ultima modificación ya quedo bien, aun no entiendo lo de "delegar" me parece que es, lo intente hacer para poner un combo en las propiedades y escoger una alternativa pero lo enrede mas y lo deje como ya estaba porque tenia que seguir avanzando el proyecto. Luego volvere a ello para comprenderlo, gracias
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Creando ucTextbox
« Respuesta #5 en: Junio 21, 2011, 10:53:21 am »
Si, después de la ultima modificación ya quedo bien, aun no entiendo lo de "delegar" me parece que es, lo intente hacer para poner un combo en las propiedades y escoger una alternativa pero lo enrede mas y lo deje como ya estaba

Tienes que poner una propiedad con una enumeracion. Ej

Código: (vb) [Seleccionar]
Public Enum EstilosDeBorde
    Solido
    Punteado
    Rayado
    Ninguno
End Enum

Public Property Get EstiloBorde() As EstiloDeBorde
     EstiloBorde = ....
End Property
Public Property Let EstiloBorde(value as EstiloDeBorde)
    ...
End Property

Y con eso ya te aparece el combo! :)

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #6 en: Junio 21, 2011, 01:51:15 pm »
Hola Raul, gracias, si recuerdo que lo hice asi pero me entraba en conflicto con las opciones que ya tiene, voy a probar ahora en la noche con mas calma. Gracias
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #7 en: Julio 29, 2011, 12:27:55 am »
Tengo un problemilla que se me habia pasado por alto. Cuando selecciono una de las propiedades, por ejemplo SoloNumeros ya no me funciona el backspace y no se como meterlo.
En esta parte del codigo del control de usuario:

Código: [Seleccionar]
Private Sub txtRaiz_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
   
   Case vbKeyDown:   SendKeys "{TAB}"
   Case vbKeyUp:     SendKeys "+{TAB}"
   Case vbKeyReturn: KeyCode = 0:  SendKeys "{TAB}"
   '---->>>> Creo que aqui tengo que meterlo, pero: Case vbKeyBack:  (que le pongo aqui) <<<----
End Select
End Sub

Private Sub txtRaiz_KeyPress(KeyAscii As Integer)
If m_OnlyNumbers Then
   If InStr("0123456789", Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End If
If m_NumbersPoint Then
   If InStr(".0123456789", Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End If
If m_SoloLetras Then
   If KeyAscii >= 97 And KeyAscii <= 122 Or KeyAscii = 241 Then KeyAscii = Asc(UCase(Chr(KeyAscii))) 'CONVIRTIENDO DE MINUSCULA A MAYUSCULA
   If InStr(" ABCDEFGHIJKLMNÑOPQRSTUVWXYZ", Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End If
If m_TodoLimit Then
   If KeyAscii >= 97 And KeyAscii <= 122 Or KeyAscii = 241 Then KeyAscii = Asc(UCase(Chr(KeyAscii)))  'CONVIRTIENDO DE MINUSCULA A MAYUSCULA
   If InStr(" -0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ()/.,&$:<>", Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End If
RaiseEvent KeyPress(KeyAscii)
End Sub

Se que debo capturarlo en el keycode pero ¿con que lo igualo?
Gracias
« última modificación: Julio 29, 2011, 12:56:08 am por YAcosta »
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #8 en: Julio 29, 2011, 01:35:27 am »
Ya esta resuelto, a la merde tire al tacho el inStr. Con este code va de 100.

Código: [Seleccionar]
If m_OnlyNumbers Then
   Select Case KeyAscii
   Case 8, 48 To 57
   Case Else: KeyAscii = 0
   End Select
End If
If m_NumbersPoint Then
   Select Case KeyAscii
   Case 8, 46, 48 To 57
   Case Else: KeyAscii = 0
   End Select
End If
If m_SoloLetras Then
   Select Case KeyAscii
   Case 8, 32, 65 To 90, 209
   Case 97 To 122, 241: KeyAscii = Asc(UCase(Chr(KeyAscii)))
   Case Else: KeyAscii = 0
   End Select
End If
If m_TodoLimit Then
   Select Case KeyAscii
   Case 8, 32, 36, 38, 40 To 90, 209
   Case 97 To 122, 241: KeyAscii = Asc(UCase(Chr(KeyAscii)))
   Case Else: KeyAscii = 0
   End Select
End If
RaiseEvent KeyPress(KeyAscii)

De esa forma ya pude meter el 8 que es el backspace.
Listo
Me encuentras en YAcosta.com

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Creando ucTextbox
« Respuesta #9 en: Julio 30, 2011, 05:00:18 pm »
YAcosta, yo usaria la api IsCharAlpha para filtrar los caracteres puesto que esta api utiliza el idioma designado al teclado y soporta caracteres como eñie y cedilla por nombrar los mas comunes.

Edit: no lo testie pero hasta es posible que tome acentos tambien.
« última modificación: Julio 30, 2011, 05:02:26 pm por cobein »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #10 en: Julio 30, 2011, 08:10:24 pm »
Gracias hermano, voy a estudiar esa API (toy bajeton con el tema de las APIs) a ver como funca.
Muchas gracias ahora lo veo.
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Creando ucTextbox
« Respuesta #11 en: Julio 30, 2011, 10:21:16 pm »
Saludos a todos !!! ;D

Yvan, siguiendo la sugerencia de Cobein, aquí tienes un ejemplo de la API IsCharAlpha:

Código: [Seleccionar]
Private Declare Function IsCharAlpha Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharAlphaNumeric Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharLower Lib "user32" Alias "IsCharLowerA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharUpper Lib "user32" Alias "IsCharUpperA" (ByVal cChar As Byte) As Long
Private Sub Form_KeyPress(KeyAscii As Integer)
    Dim strSave As String
    'Clear the form
    Me.Cls
    'Set the current Y-position to 0
    Me.CurrentY = 0
    'Get the character information
    If IsCharAlphaNumeric(KeyAscii) Then strSave = " AlphaNumeric"
    If IsCharAlpha(KeyAscii) Then strSave = "Alpha"
    If IsCharLower(KeyAscii) Then strSave = strSave + " Lower"
    If IsCharUpper(KeyAscii) Then strSave = strSave + " Upper"
    'Print the information to the form
    Me.Print "You pressed: " + Chr$(KeyAscii)
    Me.Print "This is:" + strSave
End Sub

Este ejemplo lo tomé de la API-Guide (tengo la versión 3.7, te la recomiendo), esta tiene algo más de 900 API's registradas :o, con explicación de los parámetros que manejan y con ejemplos tanto para VB 6.0 como para VB .Net


Saludos !!!
Manuel F. Borrego S. 8)
Barcelona, Edo. Anzoátegui. Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Creando ucTextbox
« Respuesta #12 en: Julio 30, 2011, 10:29:50 pm »
ohh, ok, voy a darle una revisada, muchas gracias  :-[
Me encuentras en YAcosta.com