2011-01-27 16 views
5

Estoy tratando de encontrar una manera de usar mi segundo formulario como una ventana de sugerencia para un componente (por ejemplo, un TLabel) en mi primer formulario.Creando una ventana de sugerencia personalizada

Por el momento, estoy explorando el uso de THintWindow y HintWindowClass, pero no es posible asignar directamente un TForm a HintWindowClass. Algunos ejemplos que he visto hasta ahora usan un TBitmap que luego se dibuja en el THintWindow.Canvas, lo cual no está nada mal, pero aún me gustaría usar algún tipo de mecanismo automático integrado.

Otra solución que me pasó por la mente es implementar manualmente esta funcionalidad utilizando los eventos OnMouseEnter, OnMouseMove y OnMouseLeave de dicho Tlabel.

Si realmente hay una manera de "asignar" un TForm al , me gustaría preguntar si alguien puede proporcionar un fragmento de código que ilustre esto. Gracias.

+0

http://meta.stackoverflow.com/questions/295049/criteria-for-flagging-an-off-topic-question – Will

Respuesta

12

THintWindow es un descendiente de TCustomControl. TForm no es un descendiente de ninguna de esas clases, por lo que no puede asignar ninguna clase TForm al HintWindowClass. Las ventanas de sugerencia deben descender desde THintWindow. Cualquier cosa que pueda poner en un formulario también puede ponerlo en THintWindow. Simplemente deberá instanciarlo manualmente y asignarle su propiedad Parent para que aparezca.

Lo más cerca que probablemente pueda llegar a diseñar "visualmente" una ventana de sugerencia es diseñar un marco . Haga que su descendiente THintWindow cree una instancia del marco, y luego anule ActivateHint (y ActivateHintData, si necesita los datos) para reenviar el texto de sugerencia y el tamaño deseado a su marco.

+3

Es un poco hacky, pero podría colocar el formulario que desea utilizar como pista dentro de un contenedor derivado de 'THintWindow'. Debería configurar 'Form.Parent: = HintWindowContainer; Form.Align: = alClient; ' –

+0

No estoy seguro de la política de" revivir "aquí las preguntas de hace un año, pero esta es la pregunta exacta que tengo ahora. Entiendo lo que hay que hacer, pero no sé exactamente cómo hacerlo. He hecho el descendiente 'TMyHintWindow' y miré' ActivateHint' y de ahí estoy perdido, ¿elimino por completo el código original, dónde debería poner la creación de una instancia de un marco? Intenté hacerlo en 'ActivateHint', se creó pero nunca aparece ... y luego, no reutilicé ningún código original, por lo que probablemente sea completamente incorrecto. Agradecería algo de ayuda con esto. – Raith

Cuestiones relacionadas