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.

Ayuda cambiar comportamiento TEDIT

Foro de Xailer profesional en español
Responder
buzonjmartial
Mensajes: 87
Registrado: Vie Abr 10, 2009 11:02 pm

Ayuda cambiar comportamiento TEDIT

Mensaje por buzonjmartial »

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?
Un Saludo,
Joaquín Martínez
Avatar de Usuario
ignacio
Site Admin
Mensajes: 8865
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por ignacio »

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':

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 
Para TMaskEdit debería sobrecargar el método SetValue (respetando absolutamente el paso de parámetros a ::super) o el método SetPicture().

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
buzonjmartial
Mensajes: 87
Registrado: Vie Abr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por buzonjmartial »

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
Un Saludo,
Joaquín Martínez
Avatar de Usuario
ignacio
Site Admin
Mensajes: 8865
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por ignacio »

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:

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
Saludos

Nota: El código fuente que se muestra pretende ser simplemente orientativo de como conseguir la funcionalidad que desea.
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5653
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por jfgimenez »

Joaquín,

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 )
Para que funcione, el contenido del control tiene que ser numérico, o bien el cPicture contener @K
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
buzonjmartial
Mensajes: 87
Registrado: Vie Abr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por buzonjmartial »

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,
Un Saludo,
Joaquín Martínez
Avatar de Usuario
ignacio
Site Admin
Mensajes: 8865
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por ignacio »

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
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
buzonjmartial
Mensajes: 87
Registrado: Vie Abr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Mensaje por buzonjmartial »

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,
Un Saludo,
Joaquín Martínez
Responder