i21диал/Mod/Кнопки.odc

(* Кнопки [Command Button]. Модуль с двумя экспротированными процедурами без параметров (у кнопок нет параметров).
 В диалоге каждой процедуре соответствует кнопка. *)

MODULE  i21диалКнопки;
	IMPORT  StdLog;

	PROCEDURE Команда*;
		VAR  
	BEGIN
		(* просто сделать что-нибудь *)
		StdLog.String('первый пример диалоговой кнопки');  StdLog.Ln
	END Команда;
	
	PROCEDURE ЕщеКоманда*;
		VAR  
	BEGIN
		(* сделать еще что-нибудь *)
		StdLog.String('ну и напечатаем еще что-нибудь');  StdLog.Ln
	END ЕщеКоманда;
	
END  i21диалКнопки.

Что две команды работают, можно убедиться здесь:
i21диалКнопки.Команда
i21диалКнопки.ЕщеКоманда


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

Есть два способа сделать форму для диалога:

Первый способ: сначала придумать, написать и скомпилировать модуль, потом автоматически построить диалог:
1) Диалоги, Новая форма;
2) в открывшемся диалоге в поле "Связать с:" скопировать имя модуля (дважды щелкнуть где-нибудь по имени модуля, Ctrl+C, щелкнуть мышкой внутрь поля "Связать с:", Ctrl+V, OK).
3) Появится форма нового диалога с двумя кнопками. Сохранить: нажать Ctrl+C (система сама откроет диалог в правильной папке и предложит разумное имя; это все можно изменить как обычно в ОС Windows), OK.

Следует обратить внимание на команду меню Разметка, Пересчитать размер (меню Разметка появляется в верхней линейке меню, когда в фокусе находится какой-нибудь редактируемый форма диалога).
Эту команду удобно применять после того, как элемент диалога подвинут за край поля: команда увеличивает размер диалога так, чтобы все элементы помещались целиком.

Второй способ: начать с пустого диалога и "собрать" его, добавляя элементы (кнопки и т.п.). В этом случае нужно вручную вставлять кнопки и т.п. и связывать их с экспортированными процедурами. Здесь не рассматриваем, а только заметим, что в одном диалоге разные элементы (кнопки, поля ввода и т.п.) могут быть связаны с разными модулями  по усмотрению программиста.

Итак, по первому способу сделали диалог и сохранили его в i21диал/Rsrc/Кнопки.odc

Чтобы вызвать его, нужно выполнить команду:

"StdCmds.OpenAuxDialog('i21диал/Rsrc/Кнопки','любой заголовок для диалога')"
Расширение (тип) файла указывать не обязательно: .odc подразумевается.

Открыть форму диалога для модификаций (если спасли его так, не меняя ни имени, ни места, предложенного системой при сохранении новой формы):
"StdCmds.OpenDoc('i21диал/Rsrc/Кнопки')"

Задача. Сделать диалог с одной кнопкой, чтобы нажатие кнопки вызывало печать в Рабочий журнал очередного простого числа.

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

Внимание! Если сделать диалог с парой кнопок, а потом добавить в модуль еще одну процедуру-команду и попытаться заново сделать диалог с тремя кнопками, то нужно не забыть предварительно выгрузить из памяти старый скомпилированный модуль, если он там.
Как проверить, какием модули в памяти: Инфо, Загруженные модули.
Как выгрузить модуль: дважды щелкнуть по имени модуля и выполнить Разработка, Выгрузить модули из списка).