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.

Remarcar otro control

Foro de Xailer profesional en español
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 585
Registrado: Sab Mar 12, 2011 8:16 pm

Remarcar otro control

Mensaje por XeviCOMAS »

Cuando se tiene el foco en un control y con el mouse se pasa por "encima" de otro control de un formulario, éste se "remarca" pero sin obtener el foco.

Dado un Form con un Label y un Edit... ¿como hago para que cuando se pasea el mouse por el Label, se "remarque" el Edit ???

He probado con OnMouseMove, pero ese no es el evento que dispara TControl al no recibir el foco pero pasear el mouse por encima...

Una ayuda???

Gracias.
Un Saludo,
Xevi.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Remarcar otro control

Mensaje por ignacio »

Buenos tardes,

Supongo que lo que te refieres con 'remarcar' es el efecto HotTrack que tienen ALGUNOS controles. Precisamente uno de los controles que no remarca en absoluto es el control TEdit y heredados que lo único que hace es cambiar el cursor del ratón. Por lo tanto, no sé muy bien como pretendes remarcar un control TEdit. En cualquier caso el proceso se ha de realizar en el evento OnMouseMove del objeto TLabel. Pero lo más complicado es recibir el evento de cuando se abandona el control TLabel por parte del ratón. Para ello se utiliza la función TrackMouseEvent(). Te adjunto ejemplo realizado en THyperlink:

Código: Seleccionar todo

METHOD WMMouseMove( nWParam, nLParam ) CLASS XHyperLink

   IF !::lTracked
      ::lTracked := .t.
      ::nClrTextInit := ::nClrText
   ENDIF

   ::nClrText := ::nClrOver
   TrackMouseEvent( ::Handle, TME_LEAVE )

RETURN ::Super:WMMouseMove( nWParam, nLParam )

METHOD WMMouseLeave( nWParam, nLParam ) CLASS XHyperLink

   ::nClrText := ::nClrTextInit
   ::lTracked := .f.

RETURN Nil
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 585
Registrado: Sab Mar 12, 2011 8:16 pm

Re: Remarcar otro control

Mensaje por XeviCOMAS »

Gracias Ignacio por responder.

El efecto que comentas y que no tiene TEdit (HotTrack) es el que remarca en azul más brillante el contorno.
Ese efecto no es el que quiero decir.

Cuando se pasa el raton por encima de un Edit, que no tenga el foco, es como si recibiera el foco y el contorno pasa de gria a negro... no es ese contorno azul que comentas... es el normal de cuando se recibe el foco, pero claro, sin recibir el foco.


Es que estoy intentando mostrar un label como un cHint en un Edit, y es por eso que lo necesitaria.

Gracias.
Un Saludo,
Xevi.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Remarcar otro control

Mensaje por jfgimenez »

Xevi,

el mensaje que te ha indicado Ignacio (WM_MOUSEMOVE) es el correcto para tratar esos efectos. Otra cosa es que es un poco lioso utilizarlo si no lo has hecho nunca. Y el efecto "hottrack" que muestran los controles edit es algo que ha puesto MS ahí en las últimas versiones de windows. Hace muchas más versiones ya había algunos controles que tenían ese efecto al pasar el ratón por encima, p.ej. los botones.

Respecto a los "hints" de los edit, ese es otro efecto completamente distinto. En este caso, el "hint" se muestra cuando el control NO tiene el foco y además está vacio. Conseguir este efecto, y que funcione bien, no es sencillo porque hay que pelearse con el API de windows, que no soporta esto a priori. Podrías utilizar el control TEditMod que ya lo hace. O si prefieres hacerlo por tu cuenta, puedes echarle un vistazo al control TEditBanner de samples. No es lo mismo, pero quizás te pueda servir de guía.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
XeviCOMAS
Mensajes: 585
Registrado: Sab Mar 12, 2011 8:16 pm

Re: Remarcar otro control

Mensaje por XeviCOMAS »

Adjunto un ejemplo sencillo de lo que pretenderia tener en una clase TEdit.

Lo que hago es sobreponer un Label a un Edit y cambiar el color, foco, visibilidad de uno u otro en función de si el Edit está o no vacío.

Si eso pudiera tenerlo en una clase xcmEdit, por ejemplo, ya me bastaria.

Luego, paseando el raton por encima del labet, se deberia de "remarcar" el borde del Edit en 'negrito' como lo hace un Edit cuando éste no tiene el foco.

Si se lograra ese efecto, ya seria un Edit con un Hint casi perfecto... jejeje


Gracias.
Adjuntos
xcmEdit.zip
(2.37 KiB) Descargado 166 veces
Un Saludo,
Xevi.
Responder