1с программно свернуть окно
В интерфейсе Такси мы реализовали несколько новых режимов основного окна клиентских приложений. Они позволят вам использовать максимальное пространство экрана и скрыть стандартные элементы интерфейса, которые не нужны для задачи, выполняемой приложением.
Эти режимы будут удобны в тех случаях, когда приложение запускается на специализированных устройствах, таких как кассовые аппараты, терминалы сбора данных и тому подобных. Также эти режимы будут полезны для работы в простых приложениях, состоящих из нескольких форм, и не требующих отображения стандартных панелей интерфейса и области системных команд.
Нужно сказать, что в платформе существуют некоторые возможности максимизации рабочего пространства: открытие формы в отдельном окне, скрытие активных панелей сочетанием клавиш Ctrl + Shift +
. Но они не позволяют целиком решить задачи, возникающие в упомянутых сценариях работы. Поэтому мы решили, что нужно какое-то комплексное решение. Так и появились новые режимы основного окна.
Управление режимом
Задать режим основного окна вы можете в конфигураторе, или из встроенного языка. Но тут есть особенность. Мы предполагаем, что режим основного окна определяется самой сутью прикладного решения. Поэтому возможность изменить его программно существует только при старте прикладного решения. В дальнейшем клиентское приложение будет функционировать в том режиме, который ему установлен.
В конфигураторе для этого мы добавили новое свойство конфигурации Режим основного окна клиентского приложения, а во встроенном языке реализовали два метода: УстановитьРежимОсновногоОкна() и ПолучитьРежимОсновногоОкна(). Метод УстановитьРежимОсновногоОкна() вы можете вызывать только в обработчике события ПередНачаломРаботыСистемы.
Возможные режимы
Возможных режимов работы получилось четыре. Обычный – для работы как раньше, и три новых режима: РабочееМесто, ПолноэкранноеРабочееМесто и Киоск. Понять их отличия можно на примере начальной страницы 1С:Бухгалтерии.
Режим ПолноэкранноеРабочееМесто скрывает всё то же самое, что и режим РабочееМесто, но дополнительно к этому основное окно разворачивается на весь экран, и скрываются кнопки управления окном (Свернуть, Восстановить, Закрыть).
В режиме Киоск дополнительно ко всему перечисленному скрывается гиперссылка с именем пользователя и кнопка О программе. Этот режим мы позиционируем для «внешних» пользователей, поэтому персональная информация тут не используется и не нужна.
Примеры использования
Режим РабочееМесто вы можете использовать для простых приложений. Например, для гипотетического приложения Почтовый клиент, у которого есть всего две функции – приём и отправка почты.
Тут на начальной странице расположена одна форма. Всё лишнее скрыто. И даже скрыт заголовок формы. Такую возможность мы тоже реализовали, она управляется отдельно.
Режим ПолноэкранноеРабочееМесто вы можете использовать, например, для создания рабочего места кассира.
Для кассира важно, чтобы на экране было минимум информации, не относящейся к его функциям. При этом ему доступна гиперссылка с именем пользователя, по которой он может завершить работу в программе.
Режим Киоск удобен для простых приложений, в которых не требуется аутентификация пользователя в информационной базе. Например, это может быть платёжный терминал.
Как совсем фантастический пример, в этом режиме можно реализовать интерфейс банкомата, например.
Особенности веб-клиента
Браузеры в ряде случаев ограничивают возможности работающего внутри них программного кода, и требуют интерактивного взаимодействия с пользователем. По этой причине при использовании новых режимов работы в веб-клиенте есть две особенности, отсутствующие в тонком клиенте.
Во-первых, браузеры не позволяют веб-клиенту самостоятельно перейти в полноэкранный режим без участия пользователя. Поэтому сначала мы вынуждены показать диалог.
И только по нажатию кнопки в этом диалоге (по действию пользователя) происходит переход в полноэкранный режим.
Во-вторых, браузеры перехватывают нажатие клавиши Esc и пытаются выйти из полноэкранного режима. Здесь мы исходим из того, что если разработчик установил полноэкранный режим работы, то именно в таком режиме работа и должна продолжаться. Поэтому на нажатие клавиши Esc мы показываем диалог, который возвращает пользователя в полноэкранный режим.
Скрытие заголовка формы
Применение того или иного режима основного окна приводит к изменению сразу многих элементов интерфейса. Однако вам может потребоваться более тонкое управление некоторыми из них, например заголовком формы или кнопкой закрытия окна. Для этих элементов мы реализовали дополнительное отдельное управление.
Скрывать или показывать заголовок управляемой формы вы можете теперь с помощью свойства формы ОтображатьЗаголовок. Если установлен Обычный режим основного окна, то это свойство действует только на формы, расположенные на начальной странице. В других режимах это свойство действует на все управляемые формы.
Например, в режиме Обычный начальная страница с двумя формами, у которых заголовки включены или выключены, будет выглядеть следующим образом.
А вот в случае, когда на начальной странице находится только одна форма, мы изменили стандартное поведение платформы. Теперь стандартно, при включенном заголовке формы, заголовок формы отображается вместо надписи Начальная страница.
А при выключенном заголовке формы снова появляется надпись Начальная страница.
Скрытие кнопки закрытия окна приложения
Ещё одно новое свойство управляемой формы, ОтображатьКнопкуЗакрытия, позволяет вам скрыть кнопку закрытия формы и одновременно отключить стандартные действия, выполняемые по клавише Esc. Оно работает только в новых режимах открытия основного окна РабочееМесто, ПолноэкранноеРабочееМесто или Киоск.
С помощью этого свойства вы можете создавать формы, которые пользователь не сможет закрыть стандартными способами. Предполагается, что для таких форм вы определите иной способ закрытия.
Управляемые формы. Новая разработка 1С призванная облегчить труд разработчика, дать ему больше времени на написание кода за счет упрощения проектирования интерфейса. На деле часто получается, что т. н. «управляемые формы» являются совершенно неуправляемыми. УФ не умеют таких банальных вещей как сворачивание/разворачивание окна, не говоря уже о его позиционировании на экране и задании размера в пикселях. Возможно эти функции посчитали невостребованными и не стали включать в новый интерфейс, но практика показывает, что их порою очень сильно не хватает. Некоторое время проблема частично решалась за счет WSH, но хотелось чего-то большего. Так была реализована внешняя компонента для того что бы сделать «управляемые формы» чуть более управляемыми.
Что? Где? Когда?
Данная ВК представляет собой библиотеку функций для управления состоянием и положением окон. Так же в библиотеке есть несколько полезных системных функций.
Управление состоянием окна:
Развернуть ( ЗаголовокОкна ) — разворачивает окно на полный экран
Свернуть ( ЗаголовокОкна ) — сворачивает окно в панель задач
Скрыть ( ЗаголовокОкна ) — скрывает окно(при этом код формы продолжает исполняться)
Показать () - показывает последнее скрытое функцией Скрыть() окно
СвернутьВОкно ( ЗаголовокОкна ) — в осстанавливает исходное состояние окна
ИСТИНА Видимость ( ЗаголовокОкна ) — п роверяет видимо ли окно на экране
ИСТИНА Развернуто ( ЗаголовокОкна ) — проверяет развернуто ли окно на полный экран
ИСТИНА Свернуто ( ЗаголовокОкна ) — проверяет свернуто ли окно в панель задач
УстановитьПрозрачность ( ЗаголовокОкна , Коэффициент ) — устанавливает прозрачность окна. Степень прозрачности задается через коэффициент (0-255).
Управление положением окна:
ПолучитьПозицию ( ЗаголовокОкна , X , Y ) – получает координаты левого верхнего угла окна относительно экрана. Координаты возвращаются через параметры X,Y.
Переместить ( ЗаголовокОкна , X , Y ) – перемещает окно на заданную позицию XY. В данном случае XY являются координатами левого верхнего угла окна.
ПолучитьРазмеры ( ЗаголовокОкна , Ширина , Высота ) – получает размеры окна в пикселях. Значения возвращаются через соответствующие параметры.
УстановитьРазмеры ( ЗаголовокОкна , Ширина , Высота ) – устанавливает размеры окна в пикселях.
ПолучитьТекущееРазрешение ( Horz , Vert ) – получает текущее разрешение экрана. Значения возвращаются через соответствующие параметры.
ПолучитьСписокРазрешений () – получает список доступных в системе разрешений экрана. Данные возвращаются в виде «РАЗРЕШЕНИЕ1,РАЗРЕШЕНИЕ2,РАЗРЕШЕНИЕ3. ». В демонстрационной обработке есть пример формирования списка разрешений на форме.
УстановитьРазрешение ( ВыбранноеРазрешениеЭкрана ) – устанавливает разрешение экрана. В качестве параметра указывается порядковый номер разрешения. В демонстрационной обработке показан пример установки разрешения из ранее сформированного списка.
Спать ( ВремяСна ) – реализация классической функции sleep(). ВремяСна указывается в миллисекундах.
Сигнал ( Частота , Длительность ) – реализация классической функции beep(). Позволяет задать частоту и длительность звука.
Итого
Библиотека писалась для собственных нужд и возможно будет дорабатываться еще по мере необходимости. Если у кого-то возникнет светлая мысль по расширению ее функционала в рамках той предметной области для которой она задумывалась, то пишите пожелания. Если идеи окажутся стоящими, они будут реализованы.
В комплект поставки входят: База с подключенной ВК в виде общего макета и демонстрационной обработкой. ВК в zip архиве.
Особенности использования оконной системы
В системе 1С:Предприятие существуют следующие состояния окон:
Обычное
Окно, находящееся в обычном состоянии, перемещается только в пределах рабочей области главного окна. Список открытых обычных окон доступен с помощью меню "Окна" и с помощью панели окон.
Свободное
Окно, находящееся в свободном состоянии, может располагаться в любом месте экрана. В случае если окно соединяемое, оно может объединяться с другими свободными окнами.
Прикрепленное
Окно, находящееся в прикрепленном состоянии, закрепляется на одной из сторон главного окна и перемещается по экрану вместе с ним.
Прячущееся
Окно, находящееся в прячущемся состоянии, отличается от прикрепленного тем, что принимает минимальные размеры, когда не используется.
Переключение между состояниями окна осуществляется с помощью команд оконного меню. С помощью команды "Восстановить положение окна" осуществляется возврат к исходному состоянию. Программа ограничивает возможность изменения свойств окна в зависимости от его текущего состояния:
- если окно находится в обычном состоянии, то его нельзя перевести в прячущееся и наоборот;
- если окно находится в прикрепленном или прячущемся состояния, то ему нельзя запретить соединяться.
Для некоторых типов окон изначально ограничены варианты переключения состояний. В этом случае соответствующие команды исключаются из оконного меню. Например, окно калькулятора может принимать только свободное состояние.
Расстановка окон
Объединение окон
Окна могут быть объединены двумя разными способами: "склеены" друг с другом и сложены в окно с закладками.
Объединение окон также является соединяемым окном, что позволяет собирать сложные конструкции окон. Соединение окон осуществляется с помощью перетаскивания. Во время перетаскивания инверсная рамка показывает примерное положение окна. Если окно соединяется с окном с закладками, инверсный маркер показывает, какое место займет новая закладка.
Прячущиеся окна
Когда прячущееся окно не активно, оно становится невидимым, при этом остается видимым заголовок окна, в виде кнопки на специальной панели. Эта кнопка используется для активизации прячущегося окна. Кроме того, окно становится видимым при наведении на эту кнопку курсора. Если группа окон объединена в окно с закладками и переведена в прячущееся состояние, ее заголовок представлен кнопкой особого вида - заголовки всех страниц окна с закладками свернуты, полностью виден только заголовок активной страницы. Это сделано для дополнительной экономии места.
Получение нескольких представлений (разделение) одного окна
В случае если содержимое окна существенно больше его реальных размеров, бывает удобно использовать несколько его представлений, показывающих разные части. Для некоторых типов окон реализована такая возможность. У этих окон доступны команды из меню "Окна" - "Новое окно", "Горизонтально разделить окно" и "Вертикально разделить окно".
Команда "Новое окно" открывает дополнительное представление в отдельном окне.
Команды "Горизонтально разделить окно" и "Вертикально разделить окно" делят окно между двумя представлениями
Максимизация окон
Оконная система 1С:Предприятия предлагает собственную схему максимизации обычных окон, которая заменяет собой стандартную для Windows приложений схему. В конфигураторе эти схемы объединены. Главным различием схем максимизации является то, что максимизация одного окна не влечет за собой максимизацию всех обычных окон.
Отдельные советы (знаете ли Вы, что. )
Если нужно перетащить соединяемое окно так, чтобы оно лежало рядом с другим, но не соединялось с ним, во время перетаскивания удерживайте клавишу Ctrl.
В режиме конфигуратора можно соединять обычные окна, для этого, во время перетаскивания удерживайте клавишу Shift.
Можно совершить быстрый переход из свободного состояния окна в прикрепленное или обратно, для этого дважды щелкните мышью по заголовку окна.
Расстановку обычных окон удобно производить с помощью диалога "Окна", который вызывается из меню "Окна". В этом диалоге собраны вызовы основных операций с окнами, есть возможность их упорядочивания и соединения.
Как это было в обычных формах:
Цепочка действий
Выходим в меню/Окна/Все окна (уже 3 нажатия, но это еще не всё)
Программное закрытие всех форм
Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
Если Не Окно.Основное Тогда
Для каждого Форма из Окно.Содержимое Цикл
Форма.Закрыть();
КонецЦикла;
КонецЕсли;
КонецЦикла;
Этот код закроет все окна кроме файлов созданных средствами 1С: текстовых,табличных документов, открытых через Показать() .
С версии 8.3.8 при закрытии нельзя вызывать серверные процедуры, данный вариант закрытия всех ПередЗавершениемРаботыСистемы в приложении не позволяет обойти ошибку.
Резюме:
Посчитайте сами: сколько лишних действий по банальному закрытию всех окон.
Люди кончают самоубийством оттого, что получают по почте одну рекламу.
— Фредерик Бегбедер
Читайте также: