2009-07-28 8 views
6

Dai uno sguardo all'angolo in alto a destra del sito Stack Overflow. La casella di ricerca contiene del testo che dice "cerca". Quando fai clic all'interno di esso, il testo scompare.Come si usa il "testo segnaposto" in un controllo di modifica Win32?

Voglio fare qualcosa di simile a questo - se un controllo di modifica win32 è vuoto (cioè non ha testo), voglio dipingere del testo al suo interno, in un colore più sommesso rispetto al testo normale. Se il controllo ha lo stato attivo, o se c'è del testo al suo interno, non voglio dipingerlo.

Esiste un modo per farlo senza impostare il testo effettivo nel controllo e modificare il colore del testo? Forse intercettando la vernice di controllo o qualcosa del genere?

Grazie.

risposta

7

E 'possibile, come di XP. Controlla il messaggio EM_SETCUEBANNER. Tuttavia, ci sono certain issues che non funzionano come dovrebbe su XP, quindi è meglio se hai a che fare con Vista.

Se ne avete bisogno per Win2k o versioni precedenti, dovrete farlo da soli, almeno su quelle piattaforme.

0

Forse, ma perché non basta impostare il testo e il colore predefiniti in base alle necessità e cancellarlo con un evento "onClick"?

+0

Perché fino a quando qualcuno non ci inserisce, non voglio recuperare il testo e ottenere il testo predefinito. Ciò significherebbe che dovrei aggiungere tutti i tipi di controllo per il testo predefinito, ecc., Il che sarebbe un problema. – Colen

1

Una possibilità: impostarlo come proprietario e disegnare manualmente il testo su di esso se la proprietà .Text è vuota.

3

Grazie per questa domanda, potrò usarlo in futuro. FWIW (non molto, probabilmente), qui è un'implementazione in 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

Si noti che è stato integrato nella VCL come proprietà denominata TextHint - Penso che sia stata aggiunta in D2009, anche se non ne sono completamente sicuro al momento. –

0

Non è necessario proprietario-disegnato, è nativa con le API utente (banner) Vedi Winapi grp per i campioni (in C)