В процессе разработки интерфейсов на управляемых формах 1С программисты часто сталкиваются с ситуацией, когда стандартные свойства элементов, такие как Высота, не оказывают никакого влияния на визуальное отображение. Особенно остро эта проблема встает при адаптации программ под сенсорные экраны (тач-панели), где пользователям с "толстыми пальцами" неудобно попадать по мелким стандартным кнопкам и пунктам меню. Рассмотрим подробно, почему так происходит и какие существуют методы решения этой задачи.
Для начала проанализируем поведение платформы. Когда мы размещаем кнопки внутри элемента КоманднаяПанель, 1С берет на себя полное управление геометрией этих объектов. Это сделано для обеспечения единообразия интерфейса системы: все системные кнопки должны выглядеть одинаково. В этом случае свойство Высота (как и Ширина) в палитре свойств игнорируется платформой. Разберем основные причины такого поведения:
Первый и самый эффективный способ изменить высоту кнопок — отказаться от использования стандартной КоманднойПанели. Выясним, как это реализовать на практике:
Вместо командной панели создадим обычную группу. В свойствах группы установим Вид — Группа кнопок или просто Обычная группа. В такую группу перенесем наши команды. В отличие от командной панели, элементы внутри обычной группы гораздо лучше поддаются настройке. Здесь свойство Высота начнет работать, если не заданы противоречащие настройки растягивания.
Однако у этого метода есть существенный минус: внутри обычной группы нельзя стандартным способом создать подменю (выпадающий список), которое бы выглядело так же органично, как в командной панели. Если вам нужны именно крупные кнопки без вложенности, этот вариант идеален.
Рассмотрим еще один интересный механизм платформы: автоматическая подстройка размера элемента под размер содержимого. Высота кнопки в 1С напрямую зависит от используемого в ней текста. Проанализируем, как это можно использовать:
Если мы установим для кнопки шрифт увеличенного кегля (например, 14 или 16 пунктов), платформа будет вынуждена увеличить высоту самой кнопки, чтобы текст поместился в ее границы. Это работает даже в некоторых контейнерах, которые ограничивают размеры. Чтобы изменить шрифт, выполним следующие действия:
Шрифт.Дополнительно можно использовать свойство Картинка. Если назначить кнопке изображение с большой высотой (даже прозрачную "заглушку"), высота кнопки увеличится пропорционально картинке. В свойстве Отображение при этом можно выбрать Картинка и текст.
Когда стандартное подменю не подходит из-за мелкого шрифта или фиксированной высоты строк, мы можем воспользоваться программным методом вызова выпадающего списка. Разберем ситуацию: пользователю нужно нажать на крупную кнопку, после чего должен появиться список действий.
Вместо использования стандартного элемента Подменю, создадим обычную кнопку и назначим ей действие. В коде обработчика воспользуемся методом ПоказатьВыборИзМеню. Посмотрим на пример кода:
&НаКлиенте
Процедура КнопкаВыборДействияНажатие(Элемент)
СписокМеню = Новый СписокЗначений;
СписокМеню.Добавить("Действие1", "Выполнить первое действие");
СписокМеню.Добавить("Действие2", "Выполнить второе действие");
СписокМеню.Добавить("Действие3", "Закрыть меню");
Оповещение = Новый ОписаниеОповещения("ПослеВыбораИзМеню", ЭтотОбъект);
ПоказатьВыборИзМеню(Оповещение, СписокМеню, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораИзМеню(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Если ВыбранныйЭлемент.Значение = "Действие1" Тогда
// Логика выполнения
КонецЕсли;
КонецПроцедуры
Важно помнить, что высота строк в самом выпадающем списке, который открывается методом ПоказатьВыборИзМеню, также жестко задана платформой. Если шрифт списка по умолчанию слишком мал для тач-интерфейса, этот метод может не полностью решить проблему "толстых пальцев".
Для максимально комфортной работы на сенсорных экранах профессиональным решением считается создание отдельной вспомогательной формы. Рассмотрим этот алгоритм подробнее:
Вместо использования выпадающих списков, при нажатии на кнопку мы открываем небольшую форму в режиме блокировки всего интерфейса или в виде всплывающего окна. На этой форме мы вольны разместить кнопки любого размера, цвета и с любыми шрифтами. Это позволяет создать интерфейс типа "плитки", по которой невозможно промахнуться.
Высота, например, равное 3 или 4.ОткрытьФорму("ИмяФормы").Начиная с версии платформы 8.3.10, в 1С появился параметр "Вариант интерфейса". Выясним, как он влияет на нашу проблему. Существует два основных режима: "Стандартный" и "Компактный". В компактном режиме все отступы, высоты строк и кнопок уменьшаются, чтобы на экран помещалось больше информации. Если ваши пользователи жалуются на мелкие элементы, первым делом стоит проверить, не включен ли компактный режим.
Проанализируем, как принудительно установить нужный режим для пользователя программно. Мы можем использовать метод УстановитьИнтерфейсКлиентскогоПриложения. Для тач-интерфейсов рекомендуется использовать "Стандартный" режим, в котором элементы управления имеют большие области для нажатия.
В самых крайних случаях, когда стандартные средства 1С не позволяют добиться нужного визуального эффекта, мы можем прибегнуть к использованию ПоляHTMLДокумента. Разберем этот сложный, но гибкий путь:
Мы можем сформировать HTML-разметку с использованием CSS, где пропишем любые размеры, градиенты и анимации для наших кнопок. Передача команды из HTML обратно в 1С осуществляется через событие ПриНажатии или через схему v8action:. Это позволяет реализовать абсолютно любой дизайн, но требует знаний веб-технологий и увеличивает сложность поддержки кода.
Подводя итог, можно сказать, что хотя прямое свойство Высота в командных панелях не работает, у разработчика есть широкий арсенал средств: от простых манипуляций со шрифтами до создания специализированных экранных форм. Выбор конкретного метода зависит от требований к интерфейсу и конечного устройства пользователя.