Depuis C++Builder 2009, le contrôle TEdit possède une nouvelle propriété qui se nomme TextHint. Étant curieux de nature, je décide de l’essayer. Première constatation: il s’agit d’une zone de texte. Donc, je me dis que si je tape quelque chose à l’intérieur et que je compile le code, mon message devrait apparaître quelque part. C’est ce que je m’empresse de faire. Malheureusement, j’ai beau essayer de faire plusieurs actions sur mon contrôle, je ne vois pas mon texte. Alors, je me dis que j’ai sans doute mal compris à quoi peut bien servir cette propriété. Ainsi, je décide d’aller faire un tour dans l’aide. Sur la page de la propriété du TEdit, il n’y a aucune information. Alors, je vais donc sur la page de son parent: le classe TCustomEdit. Voici la description que j’y trouve:
Un conseil ou un message à afficher quand la propriété Text est vide.
Utilisez TextHint pour informer l’utilisateur du type d’entrée attendu dans le champ texte. Les thèmes d’exécution doivent être activés.
Donc, si je me fie à cette information, il devrait y avoir un texte dans mon contrôle car il est vide et les thèmes sont activés sur mon PC. Je décide d’employer les grands moyens: j’ouvre le fichier StdCtrls.pas et je regarde le code de la méthode SetTextHint. La fonction DoSetTextHint est appelée alors je me dirige vers ce code pour me rendre compte que le message EM_SETCUEBANNER est envoyé à Windows. Sur la page MSDN du message, je trouve un texte qui explique que ça ne fonctionne pas si sous Windows XP les langues d’Extrême-Orient sont installées. Bien sûr, sur mon ordinateur, j’ai coché la petite case car j’ai besoin de ces caractères pour tester mes applications multi-langues. Pour ceux qui se demandent où est cette configuration, elle est dans les Options régionales et linguistiques du Panneau de configuration sous l’onglet Langues.
Voici le résultat lorsque je teste sur un système qui remplit toutes les exigences, même celles non documentées dans l’aide officielle:
Le problème semble être résolu depuis Windows Vista.
J’espère que vous lirez cet article avant de perdre du temps à essayer de comprendre pourquoi cela ne fonctionne pas sur votre ordinateur, ou encore pire sur celui d’un client :).