Как в 1С 7.7 программно изменить шрифт, цвет и заголовок кнопки

Программист 1С v7.7
← На главную

Разработчики, работающие с платформой 1С:Предприятие 7.7, часто сталкиваются с жесткими ограничениями стандартного интерфейса. Обычная кнопка в «семерке» всегда выглядит стандартно: серый фон, системный шрифт, отсутствие возможности программно сменить цвет текста или размер заголовка. Однако, когда требуется создать интерфейс для сенсорных киосков (POS-терминалов) или просто сделать форму более дружелюбной, приходится прибегать к расширенным средствам. Рассмотрим подробнее, какими способами можно реализовать «большую и красивую» кнопку.

Решение 1: Использование внешней компоненты FormEx

Самый профессиональный и надежный способ — использование внешней компоненты FormEx (автор АЛьФ). Она позволяет получить доступ к свойствам объектов формы, которые недоступны в штатном языке 1С 7.7. Проанализируем, как с ее помощью изменить шрифт на кнопке.

Для начала разберем алгоритм настройки. Поскольку прямое создание объекта шрифта в 1С 7.7 может быть ограничено, часто используют метод «шаблона». Мы создаем на форме скрытый элемент (например, поле Текст), настраиваем ему нужный шрифт (размер, начертание) в конфигураторе, а затем программно копируем этот шрифт на наши кнопки.

Рассмотрим пример кода, который необходимо разместить в модуле формы:


Процедура ПослеОткрытия()
    // Создаем объект расширения формы из компоненты FormEx
    Сервис = СоздатьОбъект("Сервис");
    РФ = СоздатьОбъект("РасширениеФормы"); 
    
    // Предположим, у нас есть поле "ШаблонШрифта" (тип Текст) за границами видимости формы
    // Получаем объект шрифта из этого шаблона
    НужныйШрифт = РФ.ШаблонШрифта.Шрифт; 
    
    // Проходим циклом по кнопкам (если их много, например, Кноп1, Кноп2...)
    Для ц = 1 По КоличествоКнопок Цикл 
        АтрибутКнопки = РФ.ПолучитьАтрибут("Кноп" + ц);
        АтрибутКнопки.Шрифт = НужныйШрифт;
        // Можно также попробовать установить цвет, если версия FormEx поддерживает отрисовку контролов
    КонецЦикла;
КонецПроцедуры

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

Решение 2: Комбинированная кнопка из нескольких элементов

Если по каким-то причинам использование внешних компонент нежелательно, можно применить метод «бутерброда» или наслоения элементов. Разберем по шагам, как собрать одну кнопку из четырех составляющих:

  1. Рамка (Ободок): Используется элемент типа «Рамка» для создания визуального контура.
  2. Фон: Прямоугольник или текст с заливкой нужного цвета. В 1С 7.7 цвет фона текста меняется штатно.
  3. Заголовок: Текстовое поле, расположенное поверх фона. Здесь мы можем выбрать любой шрифт, размер и цвет текста.
  4. Активная зона (Кнопка): Поверх всего этого «пирога» кладется стандартная кнопка. Главный секрет — сделать ее прозрачной или пустой. В свойствах кнопки убирается заголовок, и она служит только для перехвата клика мышью.

При нажатии на такую «кнопку» срабатывает формула, прописанная в прозрачном верхнем слое. Чтобы имитировать нажатие (визуальный отклик), можно программно менять цвет фона или смещать текстовое поле на 1-2 пикселя в процедуре обработки клика, создавая эффект вдавливания.

Решение 3: Таблица в режиме ввода данных

Для создания сложных интерфейсов (например, плиточное меню в ресторане) выясним преимущества использования объекта Таблица (Mox-файл). Это, пожалуй, самый гибкий графический инструмент в 1С 7.7.

Проанализируем ситуацию: нам нужно 20 кнопок разного цвета с многострочным текстом. Разместим на форме таблицу и переведем ее в режим «Только просмотр» с включенной опцией «Выделять ячейку». Каждая ячейка таблицы может выступать в роли кнопки.

Преимущества табличного метода:

Для обработки нажатия используется предопределенная процедура ПриВыбореЯчейкиТаблицы(). В коде это выглядит так:


Процедура ПриВыбореЯчейкиТаблицы(Адрес, Значение, Табл)
    // Адрес содержит координаты ячейки, например "R1C1"
    Если Адрес = "R2C2" Тогда
        Предупреждение("Нажата кнопка Оплата!");
    ИначеЕсли Адрес = "R2C4" Тогда
        Предупреждение("Нажата кнопка Отмена!");
    КонецЕсли;
КонецПроцедуры

Решение 4: Динамические картинки

Посмотрим на пример использования картинок. В свойствах кнопки в 1С 7.7 можно указать картинку. Если нам нужно менять текст динамически, мы можем заранее заготовить набор .bmp файлов с нужными надписями, созданными в графическом редакторе.

Программная смена картинки на кнопке выполняется методом ЗагрузитьРисунок(). Рассмотрим код:


// Предположим, у нас есть объект на форме с идентификатором "КнОк"
Форма.КнОк.ЗагрузитьРисунок("C:\Icons\button_green.bmp");

Если текст на кнопке заранее неизвестен (например, наименование товара), опытные разработчики используют генерацию картинок «на лету» через библиотеки GDI+ или сохраняют временные файлы, но это требует серьезных навыков программирования системных API.

Подведение итогов

Выбор метода зависит от ваших задач. Если вам нужно быстро и профессионально изменить шрифты во всей базе — выбирайте FormEx. Если вы создаете интерфейс для сенсорного монитора и вам нужна максимальная красота без внешних библиотек — используйте Таблицу. Для разовых задач по выделению одной кнопки цветом отлично подойдет метод наслоения элементов.

Помните, что 1С 7.7 — система почтенного возраста, и создание современного интерфейса в ней — это всегда баланс между эстетикой и производительностью формы. Старайтесь не перегружать форму слишком большим количеством слоев, чтобы избежать мерцания при обновлении данных.

← На главную