• Lunes 29 de Abril de 2024, 04:59

Autor Tema:  Cdialog  (Leído 1482 veces)

Amorevieta

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Cdialog
« en: Viernes 2 de Septiembre de 2005, 11:22 »
0
Hola, tengo que utilizar una ventana CDialog para varias funciones. En la mayor parte de los casos el usuariofinal puede introducir lo que le apetezca (números, palabras, ..) pero en algunos casos debo restringir las entradas a números.

He consultado bibliografía, he buscado en internet, ... y he visto que la opción modifyStyle permite restringir la entrada a sólo números pero no sé cómo utilizarla.

Si intento ponerlo directamente donde invoco al CDialog da un Assert error, porque la ventana no está creada aun, sabe alguien cómo sobrecargar la función OnInitDialog para poder restringir a sólo números cuando lo necesite?

Muchas gracias por adelantado,
Amorevieta  :comp:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Cdialog
« Respuesta #1 en: Viernes 2 de Septiembre de 2005, 12:35 »
0
Hola

Este mensaje deberia ir en el foro de Visual C++

¿Cuando dices restringir a solo numeros a que te refieres?¿Que si introduce una letra no aparezca en el edit box?

Si estas usando visual c++.net existe una propiedad de los editbox que se llama number si la activas solo dejara meter numeros en la caja

En Visual Studio 6.0 creo que no hay esa propiedad.Pero puedes hacerla facilmente implementado el metodo OnChange del editbox que salta cada vez que se introduce un caracter.Asi puedes poner un codigo de verificacion del caracter en el metodo (si es un numero que lo ponga si es una letra u otro caracter que no lo ponga).

salu2 :hola:

Amorevieta

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Cdialog
« Respuesta #2 en: Viernes 2 de Septiembre de 2005, 14:53 »
0
Muchas gracias por responderme, intentaré concretar un poco más. He creado una ventana con un CDialog, dentro de ella he puesto un EditControl. Utilizo esta clase para que el usuario introduzca datos. En algunos casos el usuario puede introducir cadenas de caracteres o lo que quiera, pero en otros casos debe introducir obligatoriamente un numero, porque luego voy a utilizar esos datos para realizar calculos. Al crear el EditBox he visto que hay una opcion (en el modo grafico) que me permite selecccionar solo numeros, cuando la activo si el usuario intenta escribir un caracter no numerico no le deja y creo que pita, pero yo no puedo seleccionar esa opcion porque sino nunca permitiria la introduccion de cadenas de caracteres.

Tiene que haber una orden sencilla o algo que pueda introducir en el código para cambiar esta propiedad del EditBox cuando lo necesite en el código, pero sólo he encontrado la función ModifyStyle y no sé cómo utilizarla.

Gracias de nuevo,
Amorevieta :unsure:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Cdialog
« Respuesta #3 en: Sábado 3 de Septiembre de 2005, 21:00 »
0
Hola

Esta es la sintaxis de ModifyStyle

cajadetexto.ModifyStyle(IDC_EDIT,ES_NUMBER,1);

Con esto se activa la propiedad ES_NUMBER en la caja de texto (lo que no he conseguido es desactivarla

Si miras en la pagina de msdn sobre el tema veras que dice que hay algunos controles que una vez creados no permiten que sean modificadas sus propiedades

Para el caso de ES_NUMBER pone

Citar
ES_NUMBER
Allows only digits to be entered into the edit control. Note that, even with this set, it is still possible to paste non-digits into the edit control.
To change this style after the control has been created, use SetWindowLong.

Asi que se supone que tambien puedes usar SetWindowLong

Espero que te sirva

salu2  :hola:

Amorevieta

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Cdialog
« Respuesta #4 en: Lunes 5 de Septiembre de 2005, 09:37 »
0
Muchas gracias, ya lo he solucionado, el problema era que al sobrecargar la función OnInitDialog el valor devuelto es BOOL y yo ponía bool. Dentro de esta función ya funciona ModifyStyle.

Gracias de nuevo y un saludo,
Adilia