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
buzonjmartial
Posts: 81
Joined: Fri Apr 10, 2009 11:02 pm

Ayuda cambiar comportamiento TEDIT

Postby buzonjmartial » Wed May 27, 2020 12:13 pm

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
User avatar
ignacio
Site Admin
Posts: 8680
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: Ayuda cambiar comportamiento TEDIT

Postby ignacio » Wed May 27, 2020 2:17 pm

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

Code: Select all

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]
http://www.xailer.com
buzonjmartial
Posts: 81
Joined: Fri Apr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Postby buzonjmartial » Thu May 28, 2020 9:39 am

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
User avatar
ignacio
Site Admin
Posts: 8680
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: Ayuda cambiar comportamiento TEDIT

Postby ignacio » Thu May 28, 2020 6:17 pm

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:

Code: Select all

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]
http://www.xailer.com
User avatar
jfgimenez
Site Admin
Posts: 5625
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Re: Ayuda cambiar comportamiento TEDIT

Postby jfgimenez » Sat May 30, 2020 12:35 pm

Joaquín,

mira a ver si te sirve sobrecargando este método:

Code: Select all

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
Posts: 81
Joined: Fri Apr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Postby buzonjmartial » Sun May 31, 2020 12:25 pm

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
User avatar
ignacio
Site Admin
Posts: 8680
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: Ayuda cambiar comportamiento TEDIT

Postby ignacio » Sun May 31, 2020 12:48 pm

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]
http://www.xailer.com
buzonjmartial
Posts: 81
Joined: Fri Apr 10, 2009 11:02 pm

Re: Ayuda cambiar comportamiento TEDIT

Postby buzonjmartial » Sun May 31, 2020 7:05 pm

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

Return to “Spanish”