In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Ayuda cambiar comportamiento TEDIT
-
- Mensajes: 100
- Registrado: Vie Abr 10, 2009 11:02 pm
Ayuda cambiar comportamiento TEDIT
Buenos días,
Necesitaría cambiar el comportamiento estándar de TEDIT, al hacer click si es numérico que lo seleccione entero.
¿Me pueden decir como hacerlo o qué metodo tendría que sobrecargar?
Necesitaría cambiar el comportamiento estándar de TEDIT, al hacer click si es numérico que lo seleccione entero.
¿Me pueden decir como hacerlo o qué metodo tendría que sobrecargar?
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Ayuda cambiar comportamiento TEDIT
Buenos días,
Existe la propiedad lAutoSelect que si le asigna un valor asSELECTALL conseguirá el efecto que desea.
Si desea que se asigne de forma automática en base al tipo de campo deberá sobrecargar la clase T. Por ejemplo:
- Para TEdit utilizando su property 'lNumeric':
Para TMaskEdit debería sobrecargar el método SetValue (respetando absolutamente el paso de parámetros a ::super) o el método SetPicture().
Saludos
Existe la propiedad lAutoSelect que si le asigna un valor asSELECTALL conseguirá el efecto que desea.
Si desea que se asigne de forma automática en base al tipo de campo deberá sobrecargar la clase T. Por ejemplo:
- Para TEdit utilizando su property 'lNumeric':
Código: Seleccionar todo
CLASS TEdit FROM XEdit
METHOD SetNumeric( Value )
END CLASS
METHOD SetNumeric( Value )
LOCAL lValue
lValue := ::Super:SetNumeric( Value )
IF lValue
::lAutoSelect := asSELECTALL
ENDIF
RETURN lValue
Saludos
-
- Mensajes: 100
- Registrado: Vie Abr 10, 2009 11:02 pm
Re: Ayuda cambiar comportamiento TEDIT
Buenos días Ignacio,
No es asignar el autoselect automáticamente lo que necesito, es cambiar su comportamiento.
Me explico:
Si la propiedad lAutoSelect es asSELECTALL en un Tedit numérico, al entrar en el control con la tecla ENTER, lo selecciona completo, pero si estando en otro control
hago click no, habría que hacer doble click para que lo seleccione completo.
Lo que quiero es que SOLO con hacer click en el TEDIT, ya lo seleccione todo.
Espero haberme explicado,
Gracias
No es asignar el autoselect automáticamente lo que necesito, es cambiar su comportamiento.
Me explico:
Si la propiedad lAutoSelect es asSELECTALL en un Tedit numérico, al entrar en el control con la tecla ENTER, lo selecciona completo, pero si estando en otro control
hago click no, habría que hacer doble click para que lo seleccione completo.
Lo que quiero es que SOLO con hacer click en el TEDIT, ya lo seleccione todo.
Espero haberme explicado,
Gracias
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Ayuda cambiar comportamiento TEDIT
Buenas tardes,
Ese comportamiento, entiendo que no sería el correcto, ya que impediría al usuario posicionar el cursor en medio del control (entre varios caracteres) con el ratón. Lo lógico es que si se marca todo el texto como seleccionado el cursor debería estar al principio del todo y en ningún otro sitio, de forma que si se empieza a escribir, se borra la selección actual. Espero haberme explicado.
No obstante le dejo un código que hace lo que comenta, pero que no permite la sobrecarga y tendrá que hacerlo manualmente en cada caso:
Saludos
Nota: El código fuente que se muestra pretende ser simplemente orientativo de como conseguir la funcionalidad que desea.
Ese comportamiento, entiendo que no sería el correcto, ya que impediría al usuario posicionar el cursor en medio del control (entre varios caracteres) con el ratón. Lo lógico es que si se marca todo el texto como seleccionado el cursor debería estar al principio del todo y en ningún otro sitio, de forma que si se empieza a escribir, se borra la selección actual. Espero haberme explicado.
No obstante le dejo un código que hace lo que comenta, pero que no permite la sobrecarga y tendrá que hacerlo manualmente en cada caso:
Código: Seleccionar todo
CLASS TForm1 FROM TForm
COMPONENT oEdit1
.....
METHOD Edit1Enter( oSender, oPrevCtl )
METHOD WMXailer() INLINE ::oEdit1:SetSel(0,-1)
ENDCLASS
METHOD Edit1Enter( oSender, oPrevCtl ) CLASS TForm1
::PostMsg(WM_XAILER, 0, 0 )
RETURN Nil
Nota: El código fuente que se muestra pretende ser simplemente orientativo de como conseguir la funcionalidad que desea.
Re: Ayuda cambiar comportamiento TEDIT
Joaquín,
mira a ver si te sirve sobrecargando este método:
Para que funcione, el contenido del control tiene que ser numérico, o bien el cPicture contener @K
mira a ver si te sirve sobrecargando este método:
Código: Seleccionar todo
METHOD WMLButtonDown( nWParam, nLParam ) CLASS TMaskEdit
IF GetFocus() != ::Handle
IF ValType( ::Value ) == "N" .OR. ( !Empty( ::cPicture ) .AND. ( "K" $ ::cPicture ) )
::SetFocus()
RETURN 0
ENDIF
ENDIF
RETURN ::Super:WMLButtonDown( nWParam, nLParam )
-
- Mensajes: 100
- Registrado: Vie Abr 10, 2009 11:02 pm
Re: Ayuda cambiar comportamiento TEDIT
Muchas gracias Ignacio y Jose,
El código de JF, ha funcionado perfecto. Lo he sobrecargado en TEDIT y hace exactamente lo que necesitaba.
Lo probaré más a fondo a ver si provoca algún efecto colateral, pero a simple vista no.
Gracias,
El código de JF, ha funcionado perfecto. Lo he sobrecargado en TEDIT y hace exactamente lo que necesitaba.
Lo probaré más a fondo a ver si provoca algún efecto colateral, pero a simple vista no.
Gracias,
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Ayuda cambiar comportamiento TEDIT
Hola,
Me alegro de que la solución de JF le resulte suficiente. Sea consciente de que pierde los eventos de click de ratón cuando se produzcan las condiciones de SetFocus().
Un saludo
Me alegro de que la solución de JF le resulte suficiente. Sea consciente de que pierde los eventos de click de ratón cuando se produzcan las condiciones de SetFocus().
Un saludo
-
- Mensajes: 100
- Registrado: Vie Abr 10, 2009 11:02 pm
Re: Ayuda cambiar comportamiento TEDIT
Hola Ignacio,
Comprobaré donde puede repercutir en la aplicación, pero es que necesito ese comportamiento en toda la aplicación y la primera solución no la veía viable por ese motivo.
Quizás en una actualización de Xailer, pudierais poner una propiedad igual que lUseReturn, que fuera lSelectAllEditNumerics, o algo parecido, o por lo menos, en vez de una
global, una propiedad que cambie ese comportamiento en la TEdit a voluntad.
Gracias,
Comprobaré donde puede repercutir en la aplicación, pero es que necesito ese comportamiento en toda la aplicación y la primera solución no la veía viable por ese motivo.
Quizás en una actualización de Xailer, pudierais poner una propiedad igual que lUseReturn, que fuera lSelectAllEditNumerics, o algo parecido, o por lo menos, en vez de una
global, una propiedad que cambie ese comportamiento en la TEdit a voluntad.
Gracias,
Un Saludo,
Joaquín Martínez
Joaquín Martínez