SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => VBA => Mensaje iniciado por: sndr82 en Martes 6 de Septiembre de 2005, 11:23

Título: Txt En Euros!
Publicado por: sndr82 en Martes 6 de Septiembre de 2005, 11:23
Hola foro!!!

Tengo un txt donde me ponen una cantidad de dinero en euros,
1. en el campo tengo el siguiente codigo para q me ponga puntos cada 3 digitos:
      X = Len(txtimporte.Text)
      txtimporte.Text = Format(txtimporte, "#,###")   'en ejecución es un "." no ","
      txtimporte.SelStart = X + 1
2. Tambien tengo el siguiente codigo para que solo me puedan ingressar numeros y comas:
   If (KeyAscii <> 48 And KeyAscii <> 49 And KeyAscii <> 50 And KeyAscii <>      51 And KeyAscii <> 52 And KeyAscii <> 53 And KeyAscii <> 54 And KeyAscii <> 55 And KeyAscii <> 56 And KeyAscii <> 57 And KeyAscii <> 8 And KeyAscii <> 44 Or KeyAscii = 13) Then
        KeyAscii = 0
    End If

El problema es q si pongo el codigo 1 no me deja escribir "," -comas- como lo puedo solucionar????
MUCHAS GRACIASSSSS!!!!!!!!!!!!!!!!
Título: Re: Txt En Euros!
Publicado por: nelson_z en Martes 6 de Septiembre de 2005, 18:45
Porque no usas el control de Microsoft que se llama "masked Edit "
saber agregar componentes??

a este control ... solo le pegas el formato que quieres  te vas a las propiedades... y en formato... ahi le das el formato deseado....


sale...
Título: Re: Txt En Euros!
Publicado por: sndr82 en Martes 6 de Septiembre de 2005, 19:14
Holaa!!

Esto del "masked Edit" ... es un componente que hay q agregarle? pq no lo encuentro, y en la web de microsoft el ejemplo que da es como si le tuvieras que dar las propiedades mediante codigo...... en mi txt ya le doy las propiedades mediante codigo... cuál es la diferencia entonces????

Muchas grácias Nelson!!!!
Título: Re: Txt En Euros!
Publicado por: nelson_z en Martes 6 de Septiembre de 2005, 21:04
para agregar el componente te ubicas en  toolbox... y presionas el boton derecho del raton y seleccionas Components... o en Projects >> Componets .... o con CTRL + T

ya que te abrio la ventana... seleccionas el check ,,, qu edice...

Microsoft Masked Edit Control 6.0
y le das aplicar y veras que aparece el control en la ventana del ToolBox

en las propiedades  del objeto ... trae un formarto,... ahi le pones tu formato...


sale...
Título: Re: Txt En Euros!
Publicado por: sndr82 en Jueves 8 de Septiembre de 2005, 13:58
Buenas,

No conocia este control en VB!
Esta muy bien pero queda un poco feo en mi caso ya que no se la cantidad de dinero que me van a ingressar (desde 100€ hasta 100.000.000.000€ o más) asi que si pongo todos los espacios para una cantidad grande y me ponen una peke aparece asi mientras lo editas:  100______,15  
Y así cuando pierde el enfoque: 100           ,15

He estado mirando si se le puede "engañar" con los espacios pero no.... verdad?

Gracias de nuevo
Título: Re: Txt En Euros!
Publicado por: Shiquilla en Viernes 9 de Septiembre de 2005, 09:28
Hola sndr82, podrías limitar la introducción de ciertos caracteres desde el evento KeyPress del txt y después formatear ese número en el LostFocus.

Ejemplo:

Código: Text
  1. 'Función que devuelve si ya ha metido una coma en el text
  2. Private Function mfbYaHayUnaComa() As Boolean
  3.     mfbYaHayUnaComa = IIf(InStr(1, Text1.Text, &#34;,&#34;) = 0, False, True)
  4. End Function
  5.  
  6. 'Evento que controla todo lo que se mete en el texto
  7. Private Sub Text1_KeyPress(KeyAscii As Integer)
  8.     If Chr(KeyAscii) = &#34;.&#34; Then KeyAscii = Asc(&#34;,&#34;)
  9.     
  10.     If KeyAscii &#60;&#62; vbKeyBack Then
  11.         If Len(Text1.Text) &#62; 0 Then
  12.             If KeyAscii &#60;&#62; Asc(&#34;,&#34;) Then
  13.                 If Not IsNumeric(Chr(KeyAscii)) Then
  14.                     KeyAscii = 0
  15.                     Beep
  16.                 End If
  17.             ElseIf mfbYaHayUnaComa Then
  18.                 KeyAscii = 0
  19.                 Beep
  20.             End If
  21.         Else
  22.             If Not IsNumeric(Chr(KeyAscii)) Then
  23.                 KeyAscii = 0
  24.                 Beep
  25.             End If
  26.         End If
  27.     End If
  28. End Sub
  29.  
  30. 'Cuando pierdo el foco formateo el número introducido
  31. Private Sub Text1_LostFocus()
  32.     Text1.Text = Format(Text1.Text, &#34;#,###,###,###,###,##0.00&#34;)
  33. End Sub
  34.  

Y ya si quieres que al pulsar el INTRO se pierda el foco del control, o bien lo controlas en el objeto txt o bien en las propiedades del formulario le pones la propiedad KeyPreview a TRUE y pones esto:

Código: Text
  1. Private Sub Form_KeyPress(KeyAscii As Integer)
  2.     If KeyAscii = vbKeyReturn Then
  3.         KeyAscii = 0
  4.         SendKeys &#34;{tab}&#34;
  5.     End If
  6. End Sub
  7.  

Espero que te sirva.

PD: He posteado porque veo que el control Masked Edit no te gusta  :P

Saludos,