Как убрать рамку активности при нажатии на кнопку в 1С:Предприятие 8.3

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Метод 1. Программный перенос фокуса на нейтральный элемент

Самый простой и распространенный способ убрать выделение с кнопки — сразу после выполнения основного кода команды принудительно передать фокус другому элементу формы, который визуально не отображает состояние активности. Проанализируем, как это работает. В 1С фокус ввода всегда принадлежит объекту, указанному в свойстве формы ТекущийЭлемент.

Для реализации этого метода нам понадобится элемент, который не имеет видимых границ при получении фокуса. Хорошо подходит обычная Декорация с типом Надпись. Разберем по шагам:

  1. Добавим на форму элемент Декорация (например, с именем НадписьЗаголовок).
  2. В обработчике команды кнопки в самом конце добавим строку кода, переносящую фокус.

Посмотрим на пример кода:


&НаКлиенте
Процедура МояКоманда(Команда)
    
    // Основная логика вашей команды
    Сообщить("Команда выполнена!");
    
    // Переносим фокус на декорацию, чтобы убрать рамку с кнопки
    ЭтаФорма.ТекущийЭлемент = Элементы.НадписьЗаголовок;
    
КонецПроцедуры

В данном случае, как только пользователь нажмет на кнопку, программный код выполнит полезное действие и мгновенно "уведет" фокус на текстовое поле. Поскольку у простой декорации-надписи нет свойства "Рамка фокуса" (если она не является гиперссылкой), визуально выделение просто исчезнет.

Метод 2. Использование декораций вместо стандартных кнопок

Если мы хотим полностью исключить появление рамки, стоит рассмотреть вариант отказа от элемента Кнопка в пользу элемента Декорация с типом Картинка или Надпись. Выясним причину, почему это эффективно: декорации в 1С по умолчанию не являются элементами, участвующими в обходе фокуса (Tab Order) в классическом понимании кнопок. Они могут реагировать на нажатие, но не удерживают на себе системный фокус ввода.

Чтобы имитировать кнопку через декорацию, выполним следующие действия:

  1. Создадим элемент формы Декорация.
  2. В свойствах установим вид Картинка или Надпись.
  3. Включим свойство Гиперссылка (это позволит декорации реагировать на клик).
  4. Создадим обработчик события Нажатие.

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

Метод 3. Группировка в "Командную панель"

Платформа 1С по-разному отрисовывает кнопки в зависимости от того, в какой группе они находятся. Проанализируем ситуацию: если кнопка располагается непосредственно на форме, она отрисовывается как стандартный объект Windows. Если же поместить кнопку в группу с типом Командная панель, стиль ее отображения меняется.

Разберем этот вариант:

  1. Создадим на форме новую группу и установим ей вид Командная панель.
  2. Отключим у группы флаг Автозаполнение, если нам нужны только конкретные кнопки.
  3. Перетащим нашу кнопку (команду) внутрь этой группы.

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

Метод 4. Использование прозрачных элементов и "ловушек" фокуса

Существует более сложный, но эффективный хак для интерфейсов с высокими требованиями к дизайну. Мы можем создать невидимый (прозрачный) элемент, который будет принимать фокус на себя. Выясним, как это реализовать:

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

Метод 5. Использование поля HTML-документа

Если стандартные средства платформы не позволяют добиться идеального результата, можно использовать Поле HTML-документа. Рассмотрим этот метод как радикальное решение проблемы дизайна. В HTML-поле мы можем полностью управлять стилями элементов через CSS.

В CSS существует специальное свойство outline, которое отвечает за рамку фокуса. Установив его в значение none, мы навсегда избавимся от рамки при нажатии:


button:focus {
    outline: none !important;
}

Однако этот метод требует написания логики взаимодействия между JavaScript в HTML-поле и программным кодом 1С через событие ПриНажатии или внешние события. Это значительно усложняет разработку, но дает 100% контроль над визуальной составляющей.

Почему рамка появляется снова?

Проанализируем системную причину появления рамки. В ОС Windows это часть функционала Accessibility (доступность для людей с ограниченными возможностями). Фокусная рамка необходима пользователям, которые управляют программой с клавиатуры, чтобы понимать, на каком элементе они сейчас находятся. Поэтому полное отключение фокуса может затруднить работу пользователям, привыкшим использовать клавишу Tab.

Рекомендация: Если вы решили убрать рамку программно, убедитесь, что ваш интерфейс остается интуитивно понятным. Лучшим решением будет не простое удаление фокуса, а его перемещение на логически следующий или нейтральный элемент формы.

← На главную