Разработчики, работающие с платформой 1С:Предприятие 7.7, часто сталкиваются с жесткими ограничениями стандартного интерфейса. Обычная кнопка в «семерке» всегда выглядит стандартно: серый фон, системный шрифт, отсутствие возможности программно сменить цвет текста или размер заголовка. Однако, когда требуется создать интерфейс для сенсорных киосков (POS-терминалов) или просто сделать форму более дружелюбной, приходится прибегать к расширенным средствам. Рассмотрим подробнее, какими способами можно реализовать «большую и красивую» кнопку.
Самый профессиональный и надежный способ — использование внешней компоненты FormEx (автор АЛьФ). Она позволяет получить доступ к свойствам объектов формы, которые недоступны в штатном языке 1С 7.7. Проанализируем, как с ее помощью изменить шрифт на кнопке.
Для начала разберем алгоритм настройки. Поскольку прямое создание объекта шрифта в 1С 7.7 может быть ограничено, часто используют метод «шаблона». Мы создаем на форме скрытый элемент (например, поле Текст), настраиваем ему нужный шрифт (размер, начертание) в конфигураторе, а затем программно копируем этот шрифт на наши кнопки.
Рассмотрим пример кода, который необходимо разместить в модуле формы:
Процедура ПослеОткрытия()
// Создаем объект расширения формы из компоненты FormEx
Сервис = СоздатьОбъект("Сервис");
РФ = СоздатьОбъект("РасширениеФормы");
// Предположим, у нас есть поле "ШаблонШрифта" (тип Текст) за границами видимости формы
// Получаем объект шрифта из этого шаблона
НужныйШрифт = РФ.ШаблонШрифта.Шрифт;
// Проходим циклом по кнопкам (если их много, например, Кноп1, Кноп2...)
Для ц = 1 По КоличествоКнопок Цикл
АтрибутКнопки = РФ.ПолучитьАтрибут("Кноп" + ц);
АтрибутКнопки.Шрифт = НужныйШрифт;
// Можно также попробовать установить цвет, если версия FormEx поддерживает отрисовку контролов
КонецЦикла;
КонецПроцедуры
Важный нюанс: использование компоненты FormEx позволяет менять заголовки динамически через стандартный атрибут Заголовок, при этом новый шрифт будет применяться автоматически. Это идеальное решение для динамических меню.
Если по каким-то причинам использование внешних компонент нежелательно, можно применить метод «бутерброда» или наслоения элементов. Разберем по шагам, как собрать одну кнопку из четырех составляющих:
При нажатии на такую «кнопку» срабатывает формула, прописанная в прозрачном верхнем слое. Чтобы имитировать нажатие (визуальный отклик), можно программно менять цвет фона или смещать текстовое поле на 1-2 пикселя в процедуре обработки клика, создавая эффект вдавливания.
Для создания сложных интерфейсов (например, плиточное меню в ресторане) выясним преимущества использования объекта Таблица (Mox-файл). Это, пожалуй, самый гибкий графический инструмент в 1С 7.7.
Проанализируем ситуацию: нам нужно 20 кнопок разного цвета с многострочным текстом. Разместим на форме таблицу и переведем ее в режим «Только просмотр» с включенной опцией «Выделять ячейку». Каждая ячейка таблицы может выступать в роли кнопки.
Преимущества табличного метода:
Переносить).Для обработки нажатия используется предопределенная процедура ПриВыбореЯчейкиТаблицы(). В коде это выглядит так:
Процедура ПриВыбореЯчейкиТаблицы(Адрес, Значение, Табл)
// Адрес содержит координаты ячейки, например "R1C1"
Если Адрес = "R2C2" Тогда
Предупреждение("Нажата кнопка Оплата!");
ИначеЕсли Адрес = "R2C4" Тогда
Предупреждение("Нажата кнопка Отмена!");
КонецЕсли;
КонецПроцедуры
Посмотрим на пример использования картинок. В свойствах кнопки в 1С 7.7 можно указать картинку. Если нам нужно менять текст динамически, мы можем заранее заготовить набор .bmp файлов с нужными надписями, созданными в графическом редакторе.
Программная смена картинки на кнопке выполняется методом ЗагрузитьРисунок(). Рассмотрим код:
// Предположим, у нас есть объект на форме с идентификатором "КнОк"
Форма.КнОк.ЗагрузитьРисунок("C:\Icons\button_green.bmp");
Если текст на кнопке заранее неизвестен (например, наименование товара), опытные разработчики используют генерацию картинок «на лету» через библиотеки GDI+ или сохраняют временные файлы, но это требует серьезных навыков программирования системных API.
Выбор метода зависит от ваших задач. Если вам нужно быстро и профессионально изменить шрифты во всей базе — выбирайте FormEx. Если вы создаете интерфейс для сенсорного монитора и вам нужна максимальная красота без внешних библиотек — используйте Таблицу. Для разовых задач по выделению одной кнопки цветом отлично подойдет метод наслоения элементов.
Помните, что 1С 7.7 — система почтенного возраста, и создание современного интерфейса в ней — это всегда баланс между эстетикой и производительностью формы. Старайтесь не перегружать форму слишком большим количеством слоев, чтобы избежать мерцания при обновлении данных.