2008-11-18 26 views
8

En la validación de entrada, uso consejos de globo en lugar de cuadros de mensaje. Mi problema es que en Vista, tienen el viejo estilo XP con las esquinas redondeadas, no el aspecto más nuevo y más rectangular.¿Cómo mostrar toques de globos de estilo Vista en Delphi?

He intentado crearlos usando CreateWindowEx y tooltips_class32 o mostrando el balloontip asociado de Edit usando SendMessageW y EM_SHOWBALLOONTIP, el resultado es el mismo. Hacer lo mismo en Visual Studio y C# da como resultado una sugerencia de globo de Vista.

Puede ver un ejemplo de la sugerencia de globo que necesito, al alternar Bloq Mayús en una edición de contraseña, como la del inicio de sesión de Windows.

Respuesta

3

Como se puede leer en Delphi 2009 reviewers guide cada componente VCL ahora tiene una propiedad CustomHint. Se puede establecer en cualquier descendiente de TCustomHint.

Asegúrese de habilitar las pistas del globo en Vista, de lo contrario no se mostrarán.

+0

Los uso en lugar de mensajes de error, no como pistas. –

+0

¿Cómo haces eso? Intenté aquí pero no fui capaz de descubrir cómo mostrar la pista a voluntad. –

+0

http://www.swissdelphicenter.ch/en/printcode.php?id=2279 –

16

Si está utilizando Delphi 2009, entonces agregar consejos de globo es razonablemente sencillo, aunque la documentación es deficiente. (Sorpresa, sorpresa)

  • caer una TBalloonHint en su forma
  • gota una TImageList para contener iconos si es necesario.
  • Enlace del TImageList a la TBalloonHint
  • Establecer propiedad CustomHint de la forma a la TBalloonHint
  • Asegúrese de que ShowHint y ParentCustomHint se establecen cierto para sus controles.

Este bit siguiente es very non-obvious:

  • Formato de la propiedad "Pista" de su control como "Título | Indirecta | ImageIndex"

ya está. Esto no parece 100% parecido a una vista, tal vez debido a la elección de la fuente. Pero está bastante cerca.

Delphi 2009 http://dn.codegear.com/article/images/38757/0300000D.png,

2

El TCustomHint en Delphi 2009 tiene cuatro sobrecargas protegidas de ShowHint que cuando se le llama le permite colocar la TCustomHint en la demanda y en lugares específicos:

procedure ShowHint; overload; 
procedure ShowHint(Point: TPoint); overload; 
procedure ShowHint(Rect: TRect); overload; 
procedure ShowHint(Control: TControl); overload; 

Todo lo que necesita hacer es implemente una sugerencia del estilo que desee (o simplemente descienda de TBalloonHint si está lo suficientemente cerca) y haga que esos métodos sean públicos para poder ubicar una pista donde quiera y cuando quiera.

Nota: Cambie la propiedad del título de TCustomHint para cambiar el texto que se muestra, a menos que use el ShowHint que toma un TControl como argumento. En ese caso, lo obtiene de la propiedad Hint del control (y lo coloca en la propiedad Title de TCustomHint).

Cuestiones relacionadas