Бегущая строка на управляемой форме

18 марта 2013

Файлы для загрузки:

Конфигурация с примером из статьи

Как это было в обычных формах

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

Бегущая строка в обычной форме

К сожалению, управляемые формы, поддержка которых появилась в версии 8.2, не позволяют стандартными средствами сделать подобное поведение. Но все же есть способ создать бегущую строку на управляемой форме. Его мы рассмотрим далее.

Реализация на управляемой форме

Перед реализацией поставим два условия при выполнении задачи:

  1. Бегущая строка на управляемой форме должна работать как в толстом, так и в тонком клиентах.
  2. Не должно быть влияния на производительность клиентского приложения и интерактивную работу пользователя с формой.

Итак, приступим.

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

Создание бегущей строки на управляемой форме

При открытии формы запускается обработчик ожидания, который переключает закладки через заданный промежуток времени. Программный код для запуска обработчика ожидания показан на следующем листинге:

&НаКлиенте
Перем текСтр; // Переменная хранит номер текущей страницы
           
&НаКлиенте
Процедура ПриОткрытии(Отказ) 
	// Устанавливаем текущую страницу при открытии формы  
	текСтр = 1;  
 
 	// Подключаем обработчик ожидания
	ПодключитьОбработчикОжидания("ПереключитьСтраницу", 
                                     0.1, 
                                     Истина); 
КонецПроцедуры
 
&НаКлиенте
Процедура ПереключитьСтраницу()      
	// Получаем номер текущей страницы
	НоваяСтр = ?(текСтр = 23, 1, текСтр+1);   
	// Устанавливаем текущую страницу
	Элементы.ПеремещениеНадписи.ТекущаяСтраница =
                          Элементы["Страница"+НоваяСтр];
	// Изменяем глобальную переменную формы
	текСтр = ?(текСтр = 23, 1, текСтр+1);
	// Подключаем обработчик ожидания
	ПодключитьОбработчикОжидания("ПереключитьСтраницу", 
                                     0.1, 
                                     Истина);   
КонецПроцедуры 

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

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

Вывод

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


comments powered by Disqus