Obx/Docu/ru/Hello0.odc

Примеры. ObxHello0
ENGLISH
Если Блэкбокс уже запущен, то можно открыть файл Hello0 в папке Docu/ru (Docu для англоязычного оригинала прим. ред.) папки Obx. Файл содержит текст, который вы сейчас читаете.  
Первый пример модуля Компонентного Паскаля приведен ниже в виде вставленного текстового объекта:

	MODULE ObxHello0;

	IMPORT StdLog;

	PROCEDURE Do*;
	BEGIN
		StdLog.String("Hello World"); StdLog.Ln  (* вывод в рабочий журнал (Log) цепочки литер и 0DX (переход на новую строку) *)
	END Do;

END ObxHello0.


Чтобы откомпилировать этот модуль, его исходник должен быть в фокусе. Для этого достаточно кликнуть где-нибудь в области исходника. (Если текст модуля набран в отдельном документе, а соотвествующее окно является передним, то исходник автоматически в фокусе. прим. ред.) Затем выполните команду Compile (Компилировать) в меню Dev( Разработка). (По умолчанию этой команде назначена горячая клавиша Ctrl+K, K латинское. прим. ред.). После компиляции в окне Log (Рабочий журнал) появится сообщение вида
компилируется "ObxHello0"   32   0
Это значит, что модуль ObxHello0 был успешно скомпилирован, бинарник, содержащий откомпилированный исходный код, был записан на диск в папку Obx\Code, размер этого модуля  32 байта, глобальные переменные занимают 0 байт, а информация об интерфейсе модуля была записана на диск в символьный файл (папка Obx\Sym). Новые символьные файлы создаются всякий раз, когда модуль компилируется впервые или когда меняется его интерфейс.   
Интерфейс вышеуказанного модуля содержит одну экспортируемую процедуру: ObxHello0.Do. Чтобы вызвать ее, можно использовать коммандер (кнопка  в начале следующей строки):
   ObxHello0.Do
При клике по ней выполняются следующие действия: бинарный код для ObxHello0 загружается в память, затем выполняется его процедура Do. В Рабочем журнале будет виден результат:
Hello World
Если снова кликнуть по кнопке коммандера, Блэкбокс выполнит команду немедленно, без новой загрузки кода модуля: после загрузки модули остаются в памяти до их явной выгрузки.
При клике коммандер читает цепочку литер, которая следует за ним, и пытается интерпретировать ее как команду Компонентного Паскаля, т.е. как имя модуля, за которым идет точка, затем  имя экспортируемой процедуры без параметров.  
Попробуйте кликнуть по следующим коммандерам:
	 StdLog.Clear	очистить рабочий журнал
	 Dialog.Beep	короткий гудок
	 DevDebug.ShowLoadedModules 	показать загруженные модули
Список загруженных модулей можно посмотреть, выполнив команду Loaded Modules (Загруженные модули) в меню Info (Инфо), или нажатием на указанный выше коммандер. При этом будет сгенерирован текст, аналогичный следующему:

имя модуля|байт использовано|	клиенты |скомпилирован	     | загружен    Обновить

ObxHello0	ЏЏЏ106	ЏЏЏ0	25.10.1994  20:07:08	25.10.1994  20:08:42

Out	ЏЏЏ532	ЏЏЏ1	24.10.1994  13:53:49	25.10.1994  20:08:42
Config	ЏЏЏ159	ЏЏЏ0	24.10.1994  13:53:47	25.10.1994  18:31:52
Модуль можно выгрузить из оперативной памяти, если значение счетчика клиентов равно 0, т.е. если он не импортируется (т.е. не используется) никаким другим модулем. Чтобы выгрузить ObxHello0, снова поставьте его исходный текст в фокус и затем выполните Unload (Выгрузить) в меню Dev (Разработка). В РЖ появится следующее сообщение: 
ObxHello0 выгружен
Если снова сгенерировать список загруженных модулей, то он будет выглядеть следующим образом:
имя модуля|байт использовано|клиенты	 |скомпилирован	       |загружен   Обновить

Out	532	0	24.10.1994  13:53:49	25.10.1994  20:08:42
Config	159	0	24.10.1994  13:53:47	25.10.1994  18:31:52
Заметим, что список модулей  это всего лишь текст, показывающий мгновенный снимок состояния загрузчика в определенный момент времени; он не будет обновляться автоматически, если загружать или выгружать модули. Этот текст можно распечатать, сохранить в файле или отредактировать, не беспокоясь, что система может его изменить. Обновить его можно кликом по синей ссылке Обновить (Update) в заголовке списка.
В этом первом примере мы увидели, как выглядит очень простой модуль, как его компилировать, как выполняется содержащаяся в нем команда, как можно использовать коммандеры в качестве удобной альтернативы командам меню, как посмотреть список загруженных модулей, а также как выгрузить уже загруженный модуль.

Перевел студент группы 08-302 Забелин И.С.
Редакция перевода: Ф.В.Ткачев, 2009-03-24