Blog. Just Blog

Как добавить замещающий текст в поле EDIT

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Продолжаем ставить эксперименты с полем EDIT. Сегодня будем добавлять в поле ввода так называемый "cue banner", что с некоторой натяжкой можно перевести на русский язык как "замещающий текст". Очень полезная штуковина, помогающая пользователю при заполнении форм с неочевидным форматом вводимых данных, а также снимающая с разработчика различные костыльно-велосипедные задачи по кастомной обработке полей ввода. Смотрите сами. По умолчанию в пустом поле ввода располагается замещающий текст. Это может быть пример данных или информация о необходимости заполнения, да вообще что угодно. Когда пользователь переходит на это поле, текст заполнителя исчезает и позволяет вводить свой собственный текст. А если поле ввода теряет фокус, но текст при этом все еще отсутствует, тогда замещающий текст возвращается обратно на свое место. При этом замещающий текст фактически не является содержимым поля, его нельзя получить через WM_GETTEXT или GetWindowText, он никуда не попадет при отправке незаполненной формы.

Для добавления замещающего текста в однострочное поле EDIT используется сообщение EM_SETCUEBANNER. В параметре lParam передается указатель на юникодную строку, которая будет отображаться в качестве замещающего текста. При этом не имеет значения, какую кодировку имеет само приложение, строка должна быть только в юникоде. В параметре wParam передается режим отображения замещающего текста. В старых мануалах вы можете встретить информацию, что этот параметр зарезервирован и там обязательно должен быть ноль. В последней редакции официальной документации написано, если значение нулевое, то подсказка будет пропадать сразу же при установке фокуса на EDIT, а если указано значение 1, то подсказка пропадет только при начале ввода пользовательского текста. И похоже, что из-за этого дополнения на сайте MSDN заявлена поддержка операционной системы как минимум Windows Vista, хотя на деле EM_SETCUEBANNER прекрасно работает, начиная с Windows XP.

Замещающий текст не появляется для многострочного поля EDIT, заблокированного поля ввода или если оно имеет атрибут "только для чтения". В остальных случаях все делается очень просто:
  1. ; Замещающие тексты
  2. szCue1  du 'required',0
  3. szCue2  du 'permanent cue',0
  4. szCue3  du 'enter text',0
  5.  
  6.         ...
  7.         ...
  8.         EM_SETCUEBANNER = 0x1501
  9.  
  10.         ; Установить исчезающую подсказку
  11.         invoke  SendDlgItemMessage,[hwnddlg],ID_EDIT1,EM_SETCUEBANNER,0,szCue1
  12.         invoke  SendDlgItemMessage,[hwnddlg],ID_EDIT4,EM_SETCUEBANNER,0,szCue3
  13.         ; Установить постоянную подсказку
  14.         invoke  SendDlgItemMessage,[hwnddlg],ID_EDIT2,EM_SETCUEBANNER,1,szCue2
Чтобы программа могла использовать сообщение EM_SETCUEBANNER, она должна быть скомпилирована с манифестом, в котором заявлена поддержка динамической библиотеки comctl32.dll версии 6.

В приложении пример программы с исходным текстом, которая создает форму с несколькими полями ввода и помещает в некоторые из них замещающие тексты.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Cue.EDIT.Demo.zip (2,966 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 182 | Комментариев: 0

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0033 сек.) / Память: 5 Mb
Наверх