gifts2017

Подпись к полю ввода в самом поле

Опубликовал Антон Степанов (Stepa86) в раздел Программирование - Внешние компоненты

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

Навеяно этой веткой: http://www.forum.mista.ru/topic.php?id=405659

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

Весь пример занимает 20 строк кода и 5 элементов формы (2 элемента для наглядности)

У меня все работает под вистой с платформой 8.1.12.101, на других операционках/платформах не пробовал.

Конструктивные замечания и дополнения приветствуются, способы реализации через стандартные элементы тоже.

 

07.05.2009 Закрепил пример обработки с помощью типовых механизмов из (17), все спасибки за нее ставить автору  Anything, например, в (17) комментарий.

Скачать файлы

Наименование Файл Версия Размер
Обработка-пример 168
.1241087411 6,45Kb
25.09.09
168
.1241087411 6,45Kb Бесплатно
Подсказка в поле из (17) 63
.1241685084 9,63Kb
25.09.09
63
.1241685084 9,63Kb Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Дудаков (Anything) 30.04.09 15:23
Пример реализации "чего-то похожего" штатными средствами:

Код
Процедура ПодсветкаПолей()
   Для каждого Элемент Из ЭлементыФормы Цикл
      Попытка
         Если Элемент = ЭтаФорма.ТекущийЭлемент Тогда
            Если Элемент.Значение = "Введите что-нибудь..." Тогда
               Элемент.Значение = "";
               Элемент.ЦветТекстаПоля = Новый Цвет;
            КонецЕсли;
         Иначе
            Если Элемент.Значение = "" Тогда
               Элемент.Значение = "Введите что-нибудь...";
               Элемент.ЦветТекстаПоля = Новый Цвет(150, 150, 150);
            КонецЕсли;
         КонецЕсли;
      Исключение
      КонецПопытки;
   КонецЦикла; 
   
   ПодключитьОбработчикОжидания("ПодсветкаПолей", 0.1, Истина);
КонецПроцедуры


Процедура ПриОткрытии()
   ПодключитьОбработчикОжидания("ПодсветкаПолей", 0.1, Истина);
КонецПроцедуры
Показать полностью
2. Сергей Дудаков (Anything) 30.04.09 15:39
(1)+

На форму добавляем пару-тройку полей ввода строкового типа.
И в модуль формы добавляем приведенный текст.
3. Антон Степанов (Stepa86) 30.04.09 15:40
(1) и как систему грузит? чет мне кажется что 10 раз в секунду прогонять процедуру - накладно
4. Сергей Дудаков (Anything) 30.04.09 15:49
(3) Не знаю. Я это не пробовал использовать. Просто набросал на скорую руку возможный вариант реализации.

В заголовке написано, что такие вариант приветствуются. :)
5. Сергей Дудаков (Anything) 30.04.09 15:55
(3) При активном использовании формы с 15 такими полями процессор грузится на 5-10%.

В режиме ожидания - 1%.
6. Никита Уколов (zzerro) 30.04.09 17:16
7. Lomok (lomok) 04.05.09 08:15
(6)Работать то работает...только некошерно так делать.
8. Антон Степанов (Stepa86) 04.05.09 09:04
Под xp нормально работает? и вообще от операционки зависит работоспособность? кто знает?
9. vek (vek) 04.05.09 11:12
Как вариант, код подобный (1) можно навесить на обработчик формы "ОбновлениеОтображения".
10. Антон Степанов (Stepa86) 04.05.09 11:21
(9) Обновление отображения не срабатывает при активации элемента...
12. Сергей Старых (tormozit) 06.05.09 08:32
(1) не будет работать для нетекстового поля ввода, а вот (0) как я понимаю будет
13. Сергей Дудаков (Anything) 06.05.09 10:54
(12) Тогда делаем так:

1. Для каждого поля ввода вставляем поверх него надпись и текстом "Введите что-нибудь...".

2. Уменьшаем в размерах надпись, чтобы она не перекрывала рамку поля ввода, и назначаем ей белый фон.

3. Снимаем у надписи флажок Доступность.

4. Даем имя надписи такое же, как у поля ввода, но с суффиксом "Подсказка". Например, если поле ввода называется "Реквизит1", то надпись будет иметь имя "Реквизит1Подсказка".

5. И добавляем код:
Код
Процедура ПодсветкаПолей()
   Для каждого Элемент Из ЭлементыФормы Цикл
      Попытка
         Если Элемент = ЭтаФорма.ТекущийЭлемент Тогда
            ЭлементыФормы[Элемент.Имя + "Подсказка"].Видимость = Ложь;
         Иначе
            ЭлементыФормы[Элемент.Имя + "Подсказка"].Видимость = НЕ ЗначениеЗаполнено(Элемент.Значение);
         КонецЕсли;
      Исключение
      КонецПопытки;
   КонецЦикла; 
   
   ПодключитьОбработчикОжидания("ПодсветкаПолей", 0.1, Истина);
КонецПроцедуры


Процедура ПриОткрытии()
   ПодключитьОбработчикОжидания("ПодсветкаПолей", 0.1, Истина);
КонецПроцедуры
Показать полностью
smilemanrus; +1 Ответить 1
14. Антон Степанов (Stepa86) 06.05.09 11:36
(13) и что произойдет при попытке клика по подсказке? Должно быть, чтоб активным стал элемент под подсказкой
15. Сергей Дудаков (Anything) 06.05.09 11:50
(14) Именно так и будет. Для этого сбрасывается флажок Доступность у надписи.

Могу выложить обработку-пример, но не знаю куда...
16. Антон Степанов (Stepa86) 06.05.09 11:54
17. Сергей Дудаков (Anything) 06.05.09 12:01
(16) Выложил.

Обработка "ПодсказкаВПоле2.epf".
http://slil.ru/27512505

Пояснения к обработке.
1. Ссылки на справочники использованы из самописной конфигурации, так что надо будет заменить на свои.
2. Подсказки сделаны только для первых 10 реквизитов.
3. Код всего-лишь отражает концепцию и требует адаптации под конкретные условия применения.
18. Антон Степанов (Stepa86) 06.05.09 12:10
(17) прикольно, если б не постоянная нагрузка на систему... я и не знал, что если убрать доступность, то можно "проваливаться" сквозь надпись
19. Сергей Дудаков (Anything) 06.05.09 12:17
(18) Я тоже не знал... Методом тыка обнаружил. :)
20. Виталий Гуляев (vital1c) 07.02.11 15:19
что то я нагрузки на систему таким методом совсем не замечаю
21. Модератор раздела Артур Аюханов (artbear) 16.06.12 09:27
(17) Переложи файл, пожалуйста.
Тема интересная, как я ее раньше пропустил :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа