Ver Mensaje Individual
  #5  
Antiguo 21-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por yusnerqui
y si alguien tiene otra idea será bienvenida
Una forma relativamente sencilla es usando esta idea de Peter Below de los foros de Borland.

Básicamente usas el evento OnIdle de una componente TApplicationEvents que se genera cada vez que la aplicación no se encuentra procesando un mensaje, o sea, virtualmente casi siempre, de manera que evitas el uso de un Timer.

En este evento usas funciones de la API de Windows para:

1. Determinar la ventana que esté bajo el cursor.
2. Determinar si esta ventana es de tipo ComboLBox- el tipo de ventana de la lista desplegable del combo.
3. En tal caso, obtener el ítem de la lista bajo el cursor.

Con esto ya tienes el texto que debes mostrar en el hint y mandando el mensaje LB_GETITEMRECT a la lista obtienes la posición del ítem y por tanto el lugar donde debes desplegar el hint.

Tiene el problema de que si tienes varios combos, será un poco difícil determinar a cuál de ellos pertenece la lista aunque supongo que podrías examinar la propiedad DroppedDown de cada uno de ellos para ver cuál tiene desplegada la lista.

-----

Otra opción es crearte un derivado de TComboBox que haga lo siguiente:

1. Determine el identificador de su lista desplegable
2. Reemplace el manejador de ventana de esta lista para poder detectar el mensaje WM_MOUSEMOVE y saber así cuándo mostrar el hint.
3. Determine ahí mismo si realmente es necesario mostrar el hint comparando la longitud del ítem con el ancho de la lista.
4. Si es necesario mostrar el hint, crear una ventana THintWindow para mostrarlo.

Si te interesa, puedes ver la componente TComboHintsBox que hace todo esto en mi página.

Apenas la he programado así que muy posiblemente tenga detalles que haya que revisar pero es un comienzo...

// Saudos
Responder Con Cita