При разработке интерфейсов на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с ограничениями штатных средств визуализации. Внешняя компонента Formex значительно расширяет возможности платформы. Одной из популярных функций является метод ВыбратьЗначение объекта Сервис, который позволяет выводить список выбора в виде удобного контекстного меню, привязанного к элементу формы. Однако стандартный шрифт такого меню не всегда подходит под задачи дизайна или удобства пользователя (например, на сенсорных экранах). Рассмотрим, как программно управлять оформлением этого окна.
Традиционно метод ВыбратьЗначение использует стандартные системные шрифты. Однако в компоненте Formex существует недокументированная или малоизвестная особенность: шестой параметр метода, который по описанию предназначен для передачи объекта Картинка, может принимать числовое значение — дескриптор шрифта (HFONT). Если передать туда указатель на созданный шрифт, всё меню будет отрисовано именно им.
Разберем по шагам, как это реализовать. Сначала нам необходимо создать объект шрифта с нужными характеристиками (название, размер, жирность) и получить его дескриптор, а затем передать его в метод выбора.
// Создаем объект Сервис, если он еще не создан
глСервис = СоздатьОбъект("Сервис");
// Создаем нужный шрифт
// Параметры: ИмяШрифта, Размер, Жирность, Курсив, Подчеркнутый, Зачеркнутый
КодШрифта = глСервис.СоздатьШрифт("Verdana", 24, 700, 0, 0, 0);
// Подготавливаем список значений
СписокПринтеров = СоздатьОбъект("СписокЗначений");
СписокПринтеров.ДобавитьЗначение("HP LaserJet 1020");
СписокПринтеров.ДобавитьЗначение("Canon LBP6030");
ВыбЗнач = "";
// Вызываем метод выбора значения
// 6-й параметр — наш КодШрифта
Если глСервис.ВыбратьЗначение(СписокПринтеров, ВыбЗнач, "Выберите принтер", 0, 0, КодШрифта) = 1 Тогда
Предупреждение("Выбран: " + ВыбЗнач);
КонецЕсли;
Использование этого метода позволяет сделать элементы меню крупными и читабельными, что крайне полезно для автоматизации рабочих мест кладовщиков или операторов торговых залов.
Помимо шрифта, мы можем управлять цветами элементов списка. Для этого используется седьмой параметр метода ВыбратьЗначение. В него передается специальный объект СписокЗначений, где в качестве значений выступают числовые коды цветов, а в качестве представлений — системные имена параметров оформления.
Проанализируем доступные параметры цвета:
Пример настройки цветовой гаммы:
ПараметрыЦвета = СоздатьОбъект("СписокЗначений");
ПараметрыЦвета.ДобавитьЗначение(255, "ЦветШрифта"); // Красный текст
ПараметрыЦвета.ДобавитьЗначение(16777215, "ЦветФона"); // Белый фон
ПараметрыЦвета.ДобавитьЗначение(0, "ЦветФонаВыделения"); // Черный фон выделения
глСервис.ВыбратьЗначение(сзСписок, ВыбЗнач, , 0, 0, КодШрифта, ПараметрыЦвета);
Если ваша задача требует не просто текста, а визуальных индикаторов (например, пиктограмм статусов или типов объектов), шестой параметр можно использовать по его прямому назначению — для передачи объекта Картинка. Выясним, как правильно подготовить такой объект.
Для корректной работы нам понадобится BMP-файл, содержащий набор иконок одинакового размера (например, 16x16 пикселей), выстроенных в ряд. Программа определит индекс иконки на основании данных в СписокЗначений.
// Создаем объект Картинка
ОбъектКартинка = СоздатьОбъект("Картинка");
// Загружаем файл из каталога базы данных
ОбъектКартинка.Загрузить(КаталогИБ() + "Icons\MyIcons.bmp");
// В списке значений можно указать индекс картинки для каждой строки
сзМеню = СоздатьОбъект("СписокЗначений");
сзМеню.ДобавитьЗначение("Пункт 1"); // Будет использована первая иконка (индекс 1)
сзМеню.ДобавитьЗначение("Пункт 2");
// Вызываем меню с картинками
знВыбор = "";
глСервис.ВыбратьЗначение(сзМеню, знВыбор, , 0, 2, ОбъектКартинка);
Рассмотрим ситуацию, когда выбор вызывается не нажатием на кнопку, а горячей клавишей. В этом случае меню может появиться в произвольном месте экрана (у курсора), и пользователю может быть непонятно, к какому контексту оно относится. В обновленных версиях Formex реализована поддержка непустого третьего параметра (Заголовок) даже в режиме выпадающего меню.
Если передать в параметр Заголовок строку текста, она отобразится в верхней части списка как неактивный элемент. Это служит отличным визуальным ориентиром, при этом пользователь не может случайно "выбрать" этот заголовок или позиционироваться на нем.
В процессе кастомизации форм иногда возникает необходимость сделать текстовый реквизит прозрачным или изменить его границы. В Formex это достигается через атрибуты Стиль и РасширенныйСтиль. Эти параметры принимают числовые значения, соответствующие флагам WinAPI.
Например, для реализации прозрачности текста (чтобы сквозь него был виден фон формы или картинка под ним) используется расширенный стиль WS_EX_TRANSPARENT, имеющий шестнадцатеричное значение 0x00000020 (в десятичной системе — 32).
Проанализируем, как применить такой стиль:
РасшФормы = СоздатьОбъект("РасширениеФормы");
Атр = РасшФормы.ПолучитьАтрибут("ТекстСтатус");
// Устанавливаем стиль прозрачности
Атр.РасширенныйСтиль = Атр.РасширенныйСтиль + 32;
Важный момент: значения стилей являются битовыми масками. Чтобы добавить стиль, не затирая существующие настройки, рекомендуется использовать операцию сложения или побитового "ИЛИ" с текущим значением атрибута. Информацию о значениях других флагов (например, для создания "плоских" контролов или изменения рамок) можно найти в документации по стилям окон Windows (Window Styles).
Таким образом, комбинируя методы работы со шрифтами, цветами и стилями, мы можем создавать в 1С 7.7 современные и интуитивно понятные интерфейсы, не уступающие по функциональности более поздним версиям платформы.