Отправляет email-рассылки с помощью сервиса Sendsay

Школа 1С

  Все выпуски  

Школа 1С: Игра с формой (#61)


Школа 1С
Выпуск 61
Игра с формой

Здравствуйте, дорогие подписчики!

Этот выпуск нашей рассылки «Школа 1С» вновь подготовлен совместно с командой проекта 1CV8GAMES, в рамках которого создаются и бесплатно распространяются игры для программ системы «1С:Предприятие 8». Наши друзья из проекта 1CV8GAMES продолжают выпускать новые игры, и в коллекции, представленной на сайте проекта – http://www.1cv8games.ru/, их уже 16: «Пятнашки», «Флип-Флоп», «Мемо», «Цветоряд», «Вращающийся квадрат», «Обход конем», «Переливания вина», «Собаки и кошки», «Четвертый», «Цветные линии», «Треугольник», «Цветные пары», «Кликомания», «Змейка», «Охота на лис» и «Семь».

Все представленные в настоящее время игры оформлены в виде внешних обработок системы «1С:Предприятие 8.1» и могут быть запущены в любой программе на этой платформе. Те из вас, кто уже скачал эти игры, возможно, обратили внимание, что в Конфигураторе диалоговые формы обработок пусты, однако, при запуске в режиме «1С:Предприятие» они «оживают», заполняются различными элементами управления, часто – красиво оформленными, давая возможность пользователям насладиться игрой.

В этом выпуске мы попросили Евгения Огнева – одного из участников проекта – рассказать об имеющихся в распоряжении программиста стандартных средствах системы «1С:Предприятие» для управления внешним видом диалоговых форм.

Слово Евгению:

 

Предисловие

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

Платформа «1С:Предприятие 8» принесла с собой значительно более богатые средства динамического управления пользовательским интерфейсом. Теперь можно прямо во время работы программы создавать и удалять элементы формы, задавать значения различным их параметрам и свойствам.

Целью этого выпуска является рассказ об этих возможностях системы «1С:Предприятие 8». Мы с Вами создадим внешнюю обработку, в модуле формы которой будем средствами встроенного языка системы управлять внешним видом самой формы.

 

1С:Предприятие 8.1

Откройте Конфигуратор с любой имеющейся у Вас информационной базой. В процессе работы мы не будем изменять ни конфигурацию, ни данные (работаем с внешней обработкой), однако, я всё равно советую Вам сделать резервную копию базы, например, через пункт меню «Администрирование» - «Выгрузить информационную базу…».

1. Создадим внешнюю обработку

Выберите пункт меню «Файл» - «Новый…», в открывшемся окне выберите вид документа «Внешняя обработка», нажмите кнопку «ОК».

Задайте Имя внешней обработки – «ИграСФормой», Синоним – «Игра с формой» - должен будет появиться автоматически.

Сохраните созданную внешнюю обработку: выберите пункт меню «Файл» - «Сохранить», выберите папку, куда будете сохранять файл обработки (например, «Рабочий стол»), задайте имя файла (например, «ИграСФормой.epf»).

2. Создадим форму обработки

Нажмите кнопочку «лупы» в поле «Основная форма внешней обработки». В окне Конструктора формы обработки выберите тип формы: «Форма обработки», установите «галочку» «Назначить форму основной», задайте Имя и Синоним: «Форма», снимите «галочки» «Командная панель формы сверху» и «Командная панель формы снизу». Нажмите кнопку «Готово».

Создалась новая форма обработки, эта форма была установлена в качестве основной, открылось окно проектирования внешнего вида формы.

Выделите на форме и удалите созданные автоматически кнопки «Выполнить» и «Закрыть» - они нам не понадобятся.

Сохраните внешнюю обработку: выберите пункт меню «Файл» - «Сохранить».

3. Подготовим модуль формы

Мы не будем изменять вручную свойства Формы, заполненные системой автоматически при её создании. Для управления внешним видом формы мы будем использовать средства встроенного языка системы «1С:Предприятие 8».

Перейдём к редактированию модуля формы – закладка «Модуль». Очистите текст модуля – удалите созданную автоматически процедуру «КнопкаВыполнитьНажатие».

Сначала подготовим основные параметры, с которыми будем работать:

МинимальнаяШиринаФормы  = 300;
МаксимальнаяШиринаФормы = 500;
ШагИзмененияШириныФормы = 25;
ЗаголовокФормы          = "Игра с формой";

РазмерПоля              = 8;

ШиринаКнопки            = 20;
ВысотаКнопки            = 20;
ЗаголовокКнопкиВлево    = "<--";
ЗаголовокКнопкиВправо   = "-->";

Нужно не забыть описать все эти переменные в самом начале модуля:

Перем МинимальнаяШиринаФормы, МаксимальнаяШиринаФормы, ШагИзмененияШириныФормы;
Перем ЗаголовокФормы;
Перем РазмерПоля;
Перем ШиринаКнопки, ВысотаКнопки;
Перем ЗаголовокКнопкиВлево, ЗаголовокКнопкиВправо;

Теперь опишем действия при открытии формы:
- перейдите на закладку «Диалог», в свойствах формы найдите раздел «События» и нажмите кнопку с «лупой» в поле «ПриОткрытии» - система автоматически создала в модуле формы процедуру ПриОткрытии и связала обработку события открытия формы с этой процедурой;
- заполним процедуру ПриОткрытии следующим образом:

Процедура ПриОткрытии()
      // очистим форму от всех элементов:
      ЭтаФорма.ЭлементыФормы.Очистить();
      
      // зададим заголовок формы:
      ЭтаФорма.Заголовок = ЗаголовокФормы;
      
      // зададим размеры формы:
      ЭтаФорма.Ширина = МинимальнаяШиринаФормы;
      ЭтаФорма.Высота = РазмерПоля + ВысотаКнопки + РазмерПоля;
      
      // запретим изменение размера формы пользователем:
      ЭтаФорма.ИзменениеРазмера = ИзменениеРазмераОкна.НеИзменять;
            
      // разместим на форме кнопки:
      // - влево:
      КнопкаВлево = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Кнопка"), "КнопкаВлево", Ложь);
      КнопкаВлево.Верх        = РазмерПоля;
      КнопкаВлево.Лево        = ЭтаФорма.Ширина - РазмерПоля - ШиринаКнопки - РазмерПоля - ШиринаКнопки;
      КнопкаВлево.Ширина      = ШиринаКнопки;
      КнопкаВлево.Высота      = ВысотаКнопки;
      КнопкаВлево.Заголовок   = ЗаголовокКнопкиВлево;
      КнопкаВлево.Доступность = Истина;
      
      КнопкаВлево.УстановитьДействие("Нажатие", Новый Действие("НажалиКнопкуВлево"));
      КнопкаВлево.Видимость   = Истина;
            
      // - вправо:
      КнопкаВправо = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Кнопка"), "КнопкаВправо", Ложь);
      КнопкаВправо.Верх        = РазмерПоля;
      КнопкаВправо.Лево        = ЭтаФорма.Ширина - РазмерПоля - ШиринаКнопки;
      КнопкаВправо.Ширина      = ШиринаКнопки;
      КнопкаВправо.Высота      = ВысотаКнопки;
      КнопкаВправо.Заголовок   = ЗаголовокКнопкиВправо;
      КнопкаВправо.Доступность = Истина;
      
      КнопкаВправо.УстановитьДействие("Нажатие", Новый Действие("НажалиКнопкуВправо"));
      КнопкаВправо.Видимость   = Истина;
     
КонецПроцедуры

Таким образом, при открытии формы она будет очищаться, ей будут заданы заголовок окна и размеры (неизменяемые интерактивно), на форму будут помещены две кнопки. Вызывая для кнопки метод «УстановитьДействие» мы связываем обработку события нажатия на кнопку с указанной процедурой.

Теперь нам нужно в раздел описания переменных добавить:

Перем КнопкаВлево, КнопкаВправо;

Осталось только написать уже указанные процедуры обработки события нажатия на кнопки:

Процедура НажалиКнопкуВлево(Кнопка)
      
      // вычислим новую ширину формы:
      НоваяШиринаФормы = ЭтаФорма.Ширина - ШагИзмененияШириныФормы;
      
      // новая ширина формы не должна быть меньше минимальной:
      Если НоваяШиринаФормы<МинимальнаяШиринаФормы Тогда
            Возврат;
      КонецЕсли;
      
      // изменим ширину формы:
      ЭтаФорма.Ширина = НоваяШиринаФормы;
      
      // сдвинем кнопки вслед за сужением формы:
      КнопкаВправо.Лево = КнопкаВправо.Лево - ШагИзмененияШириныФормы;
      КнопкаВлево.Лево  = КнопкаВлево.Лево - ШагИзмененияШириныФормы;
      
      // обновим форму:
      ЭтаФорма.Обновить();
     
КонецПроцедуры


Процедура
НажалиКнопкуВправо(Кнопка)
      
      // вычислим новую ширину формы:
      НоваяШиринаФормы = ЭтаФорма.Ширина + ШагИзмененияШириныФормы;
      
      // новая ширина формы не должна быть больше максимальной:
      Если НоваяШиринаФормы>МаксимальнаяШиринаФормы Тогда
            Возврат;
      КонецЕсли;
      
      // изменим ширину формы:
      ЭтаФорма.Ширина = НоваяШиринаФормы;
      
      // сдвинем кнопки вслед за расширением формы:
      КнопкаВправо.Лево = КнопкаВправо.Лево + ШагИзмененияШириныФормы;
      КнопкаВлево.Лево  = КнопкаВлево.Лево + ШагИзмененияШириныФормы;
      
      // обновим форму:
      ЭтаФорма.Обновить();
     
КонецПроцедуры

В этих процедурах мы управляем шириной формы и положением кнопок на ней.

Сохраните внешнюю обработку.

4. Запустим внешнюю обработку

Запустите программу в режиме «1С:Предприятие», выберите любую информационную базу.

Откройте созданную внешнюю обработку: пункт «Файл» - «Открыть…», выберите папку с обработкой (например, «Рабочий стол»), выберите файл обработки (например, «ИграСФормой.epf»).

Если мы с Вами всё сделали правильно, то должно будет появиться окно с заголовком «Игра с формой» и двумя кнопками на форме. При нажатии на кнопку «-->» форма будет расширяться, а кнопки смещаться вправо, при нажатии на кнопку «<--» форма будет сужаться, а кнопки смещаться влево.

Послесловие

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

 

Выпуск подготовил: Евгений Огнев

Редактор: Владислав Аврутин

Автор рассылки: Алексей Куприйчук


В избранное