2009-07-28 12 views
6

Eche un vistazo a la parte superior derecha del sitio de desbordamiento de pila. El cuadro de búsqueda tiene texto que dice "buscar". Cuando haces clic dentro, el texto desaparece.¿Cómo uso 'texto de marcador de posición' en un control de edición win32?

Quiero hacer algo similar a esto: si un control de edición win32 está vacío (es decir, no tiene texto), quiero pintar un texto dentro de él, en un color más tenue que el texto normal. Si el control tiene el foco, o si hay texto dentro, no quiero pintar eso.

¿Hay alguna forma en que pueda hacerlo sin configurar el texto real en el control y cambiar el color del texto? Tal vez al interceptar la pintura de control o algo así?

Gracias.

Respuesta

7

Es posible partir de XP. Compruebe el mensaje EM_SETCUEBANNER. Sin embargo, hay certain issues que hacen que no funcione del todo como debería en XP, por lo que es mejor si se trata de Vista.

Si lo necesita para versiones Win2k o anteriores, deberá hacerlo usted mismo, al menos en esas plataformas.

0

Tal vez, pero ¿por qué no simplemente establecer el texto y el color predeterminados según sea necesario y borrarlo con un evento 'onClick'?

+0

Porque hasta que alguien escriba, no quiero recuperar el texto y obtener el texto predeterminado. Eso significaría que tendría que agregar todo tipo de comprobación para el texto predeterminado, etc., lo cual sería un problema. – Colen

1

Una posibilidad: hacer que el propietario dibujar, y manualmente pintar el texto si la propiedad .Text está vacía.

3

Gracias por esta pregunta, podré usar esto en el futuro. Fwiw (no mucho, probablemente), aquí es una aplicación en Delphi:

procedure TForm1.FormShow(Sender: TObject); 
const 
    ECM_FIRST = $1500; 
    EM_SETCUEBANNER = ECM_FIRST + 1; 
begin 
    SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here')))); 
end; 
+1

Tenga en cuenta que se ha incorporado a la VCL como una propiedad llamada TextHint: creo que se agregó en D2009, aunque no estoy del todo seguro en este momento. –

0

No es necesario dibujado por el propietario, que es nativa con las API de usuario (banner) Ver Winapi grp para muestras (en C)

Cuestiones relacionadas