Comment puis-je utiliser « texte d'espace réservé » dans un contrôle d'édition win32?
Question
Jetez un oeil en haut à droite du site débordement de pile. La zone de recherche a un texte en lui disant « recherche ». Lorsque vous cliquez à l'intérieur, le texte disparaît.
Je veux faire quelque chose de semblable à cela - si un contrôle d'édition win32 est vide (ce texte n'a pas), je veux peindre un texte à l'intérieur, dans une couleur plus modérée que le texte normal. Si le contrôle a le focus, ou s'il y a du texte à l'intérieur, je ne veux pas peindre cela.
Est-il possible que je peux le faire sans mettre le texte actuel dans le contrôle et changer la couleur du texte? Peut-être en interceptant la peinture de contrôle ou de quelque chose?
Merci.
La solution
Il est possible de XP. Vérifiez la EM_SETCUEBANNER message. Cependant, il y a certains problèmes qui le font fonctionner pas tout à fait comme devrait sur XP, il est donc préférable si vous avez affaire à Vista.
Si vous avez besoin pour Win2K ou les anciennes versions, vous devrez le faire vous-même, au moins sur ces plates-formes.
Autres conseils
Merci pour cette question, je vais pouvoir l'utiliser dans l'avenir. FWIW (pas grand-chose, sans doute), voici une implémentation 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;
Une possibilité:. Faites dessiné par le propriétaire, et la peinture manuellement le texte sur celui-ci si la propriété .Text est vide
Jetez un oeil à EM_SETCUEBANNER
Peut-être, mais pourquoi ne pas simplement mettre le texte par défaut et la couleur au besoin, et clair avec un événement « onClick »?
Vous n'avez pas besoin propriétaire tiré, il est natif avec apis utilisateur (bannière) Voir Winapi grp pour les échantillons (en C)