Obx/Docu/ru/Controls.odc

Описание системы примерами: ObxControls

	Изменение поля интерактора (т.е., поля глобально объявленной переменной типа запись) может повлиять не только на элементы управления, связанные с этим полем, но и заодно на некоторые другие. К примеру, командная кнопка может быть недоступной пока текстовое поле пусто, и становиться доступной, когда что-то введено в текстовое поле. 

Охранные команды (Guard commands)
	Те изменения состояния элементов управления, которые являются результатом изменений состояния элементов управления в интеракторе, управляются с помощью охранных команд. Охрана - команда, которая может заблокировать элемент управления, может отключить элемент управления, или же сделать его доступным только для чтения. У нее нет других побочных эффектов; в частности, она не запускает произвольный процесс и не меняет состояние интерактора. Для этих целей используются уведомители.

Команды-уведомители (Notifier commands)
	Уведомитель - необязательная команда, которая может быть привязана к элементу управления с помощью редактора свойств элементов управления. Например, команда-уведомитель может записать что-нибудь в  строку состояния, когда нажата кнопка мыши; и очистить строку состояния при отпускании кнопки мыши.
	Однако, более типична ситуация, в которой когда уведомитель меняет состояние интерактора, с которым связан его элемент управления, т.е. чтобы поменять одно или более полей интерактора, с которыми элемент управления не связан.
	Таким образом, изменение одного значения поля интерактора может вызвать изменение значения другого поля при помощи созданного уведомителя.

Пример
	Пример иллюстрирует охраны и уведомители, а также командную кнопку, радио-кнопку и элементы управления списком.
	Представьте какой-нибудь объект, размер которого должен устанавливаться через диалог, при этом более продвинутые пользователи должны получать большую степень свободы. Например, это может быть диалог в игре, который позволяет пользователю выбрать уровень сложности. Новичок при игре в экономический симулятор получает для инвестиций сумму денег, установленную по умолчанию, более продвинутый пользователь, в добавление к этому, может выбрать среди трех предписанных вариантов, в то время как гуру может ввести любую сумму, которую он хотел бы использовать. Чтобы сделать наш пример проще и сосредоточиться на поведении элементов управления, ничего более сложного, чем в игре-симуляторе, он не реализует. Вместо этого начальный размер прямоугольной картинки может управляться пользователем более или менее гибким способом, зависящим от выбранного уровня пользователя.
	В нашем примере уровень сложности представляет собой поле класса в интеракторе данных модуля ObxControls. Это целая переменная, с которой может быть соединено поле входного текста или, что более уместно, число радио-кнопок. Радио-кнопки отмечаются как "начинающий", "продвинутый", "эксперт" и "гуру". В зависимости от выбранного класса поле списка интерактора адаптируется для игроков различного уровня:

1) начинающий - окно списка должно быть скрыто, так как выбор не предоставляется (используется    значение по умолчанию);

2) продвинутый - дополнительно к значению по умолчанию предоставляется возможность выбора "малого","среднего" и "большого" размера.

Легко видеть, что списковое окно должно быть разблокировано, если сделан соответствующий выбор;

3) эксперт - получает еще больше вариантов размера, а именно "крошечный" и "гигантский";
 
Заметьте, что если эти варианты появляются, то спискового окна не хватает, чтобы показать все варианты одновременно. Вследствие этого активируется полоса прокрутки списка.

4) гуру - имеет еще больше свободы, может набирать желаемый размер на клавиатуре, в поле входного текста, которое для остальных классов игроков является доступным лишь для чтения. 

	Командная кнопка Cancel закрывает диалог без совершения каких-либо действий, с нажатия кнопки Open начинается игра, а кнопка Ok начинает игру, немедленно закрывая диалоговую форму. 
	Поскольку мы, в основном, заинтересованы в том, чтобы осуществить описанное поведение, мы на самом деле не запускаем игру. Более того, игра просто заключается в открытии нового визуального объекта, размер которого определен размером, выбранным в диалоге ("по умолчанию", "большой", "малый" и т.д.).
	Новое диалоговое окно для "интерактора" ObxControls.data может быть автоматически создано с помощью Новая форма... Компоновка формы диалога может быть выбрана интерактивно, а свойства некоторых элементов управления могут быть установлены при помощи редактора свойств. Они должны быть настроены, как в приведенной ниже таблице:

Control	Link	Label	Guard	Notifier	Level
Radio Button	ObxControls.data.class	&Beginner		ObxControls.ClassNotify	0
Radio Button	ObxControls.data.class	&Advanced		ObxControls.ClassNotify	1
Radio Button	ObxControls.data.class	&Expert		ObxControls.ClassNotify	2
Radio Button	ObxControls.data.class	&Guru		ObxControls.ClassNotify	3
List Box	ObxControls.data.list		ObxControls.ListGuard	ObxControls.ListNotify
Text Field	ObxControls.data.width		ObxControls.WidthGuard
Command Button	StdCmds.CloseDialog;
	ObxControls.Open	OK
Command Button	ObxControls.Open	&Open

 "StdCmds.OpenAuxDialog('Obx/Rsrc/Controls', 'ObxControls Demo')"
 "StdCmds.OpenAuxDialog('Obx/Rsrc/Управление', 'ObxУправление Демо')"

ObxControlssources

Перевел студент группы 08-302 Забелин И.С.