Obx/Docu/ru/Address0.odc

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

Одним из отличительных признаков современных пользовательских интерфейсов является немодальность диалоговых окон и форм ввода данных. Они изображают поля ввода данных, кнопки нажатий, флажки (check boxes) и вариации так называемых элементов управления (controls). Блэкбокс трактует эту проблему по-своему:
 новые элеметы управления могут реализовываться в Компонентном Паскале; они суть не что иное, как специализированные отображения (views), нет никаких существенных различий между элементами управления и объектами-документами;
 каждое отображение, которое может содержать другие отображения (т.е. отображение-контейнер), может также содержать элементы управления, нет существенных различий между контейнерами элементов управления и контейнерами документов;
 каждый общий контейнер отображений при желании может быть превращён в маску ввода;
 некоторые элементы управления могут быть непосредственно связаны с переменными программы;
 для гарантирования согласованности связывание производится автоматически с учетом информации о типах переменных;
 начальное представление формы может быть сгенерировано автоматически без объявления записи (без объединения переменных в одну запись - прим. пер.);
 формы могут быть отредактированы в интерактивном режиме и сохраненты как документы, никакой промежуточной генерации кода не требуется;
 формы могут использоваться "вживую", во время их редактирования;
 макет формы может быть создан или изменен программой на Компонентным Паскале, если это желательно.

Некоторые из этих  аспектов продемонстрированы следующим примером:

	MODULE ObxAddress0;

	VAR
		adr*: RECORD 
			name*:	ARRAY	 64 OF CHAR;
			city*:	ARRAY 24 OF CHAR;
			country*:	ARRAY 16 OF CHAR;
			customer*:	INTEGER;
			update*:	BOOLEAN
		END;

	PROCEDURE OpenText*;
	BEGIN
		
	END OpenText;
	
END ObxAddress0.

Скомпилируйте этот файл, затем выполните Новая форма...  в меню Диалоги. Откроется диалог. Затем напишите "ObxAddress0" в поле Связать с после чего щелкните кнопку ОК. Будет открыто новое окно с формой. Эту форму можно редактировать, например, двигая поле update немного вправо. (Заметьте, что тем самым вы изменяете документ, следовательно, вас спросят о сохранении изменений, когда вы попробуете закрыть окно. Не сохраняйте изменений.)

Теперь запустите Диалоговое управление модулем в меню Диалоги. В результате вы получите полностью фнкционирующий диалог с текущей компоновкой формы. Эта маска может быть использована немедленно, т.е., когда вы отмечаете окно Update, переменная ObxAddress0.adr.update  будет переключена/изменена!

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

Элементы управления формы связаны с программными переменными очень просто, так же как текстовое представление связано с его текстовой моделью. И текстовое отображение, и элемент управления являются реализациями интерфейса Views.View. Контейнер упомянутых выше средств управления - суть отображение формы, которое в свою очередь также является реализацией типа Views.View. Отображения-формы, как и текстовые отображения, являются примерами отображений-контейнеров: отображение-контейнер может содержать встроенные части (например, куски текста), впрочем, как и любые другие отображения. Отображение-формы вырождены в том смысле, что они не имеют встроенных данных; они могут содержать  лишь другие отображения.

Вместо того, чтобы начать с объявления записи в вышеприведённом примере, вы можете предпочесть начать с интерактивного создания диалога, и только после этого вернуться к аспектам программирования. Это  вполне возможно: кликните на кнопку Пустой (Диалоги->Новая форма) для создания новой пустой формы. Она откроется в новом окне, и появится меню Разметка. Используя команды меню Диалоги, можно добавлять новые элементы управления в форму. Форму можно сохранить в файле, а её элементы управления могут быть позже связаны с программными переменными при помощи инструмента под названием Редактор свойств элементов (смотрите описание меню Правка в Руководстве пользователя).

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

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

Текст перевёл Адаменко Оскар. гр. 08-302

Возможно, начинающему программисту будет более понятен несколько измененный (А.И.Попков) вариант примера:				
	
MODULE ObxАдрес0;
	
	IMPORT StdLog;
	
	VAR
		адрес*: RECORD 
			фамилия*:	ARRAY	 64 OF CHAR;
			город*:	ARRAY 24 OF CHAR;
			страна*:	ARRAY 16 OF CHAR;
			заказчик*:	INTEGER;
			обновить*:	BOOLEAN
		END;

	PROCEDURE ОткрытьТекст*;
	BEGIN
		StdLog.String(адрес.фамилия); StdLog.Ln;
		StdLog.String(адрес.город); StdLog.Ln;
		StdLog.String(адрес.страна); StdLog.Ln;
		StdLog.Int(адрес.заказчик); StdLog.Ln;
		StdLog.Bool(адрес.обновить); StdLog.Ln;
	END ОткрытьТекст;
	
END ObxАдрес0.