Тесты / Вопросы / Основы использования и конфигурирования 1С Предприятие
Disynergy.ru – Сдача тестов без предоплаты +7(924) 305-23-08 help@disynergy.ru
Disynergy.ru – Сдача тестов без предоплаты
Whatsapp/Telegram/Viber: +7(924) 305-23-08
1. Агрегатными объектами конфигурации называются объекты конфигурации, …
2. Алгоритм поведения документа определяется .
3. В качестве обязательных реквизитов каждый справочник имеет .
4. В окне редактирования объекта свойства Имя, Синоним и Комментарий входят в состав группы «…»
5. Ввод документа на основании – это возможность …
6. Верным утверждением является «. »
7. Внешние отчеты …
8. Все регистры на этапе конфигурирования описываются набором …
9. Движения документа — это .
10. Для запуска системы 1С:Предриятие можно использовать режимы.
11. Для реквизита документа Дата установить тип данных «Дата» .
12. Если необходимо создать регистр сведений для хранения данных по номенклатуре товаров, реализуемых фирмой,…
13. Значения перечислений устанавливаются …
14. Иерархические справочники – это …
15. Макеты документа .
16. На закладке «. » окна редактирования регистра сведений определяется структура хранения данных регистра
17. Набор свойств объекта конфигурации …
18. Неверно, что в 1С:Предприятие существуют регистры .
19. Неверно, что имя объекта конфигурации .
20. Неверно, что работа со справочниками может осуществляться в режиме …
21. Неверно, что тип данных «. » относится к базовым
22. Независимым называется регистр сведений,…
23. Особенность реквизитов отчета в том, что .
24. Отношение подчиненности между справочниками заключается …
25. Палитра свойств доступна .
26. Перечисления предназначены для …
27. Периодическим называется регистр сведений, …
28. Под измерениями регистров понимают …
29. Под объектом конфигурации понимается …
30. Под ресурсами регистров понимают набор …
31. Подчиненные документы — это .
32. При форматировании синтаксических конструкций встроенного языка «синтаксический отступ» выполняет автоматическое …
33. Регистр бухгалтерии предназначен для …
34. Регистр накопления предназначен для …
35. Регистр расчета предназначен для .
36. Регистр сведений …
37. Регистры в 1С:Предприятие используются для …
38. С помощью конструктора . можно создать печатную форму отчета
39. Синоним объекта конфигурации …
40. Синтаксический контроль модуля предназначен для .
41. Системными реквизитами любого справочника являются .
42. Текстовое поле как элемент диалога может быть .
Disynergy.ru – Сдача тестов без предоплаты +7(924) 305-23-08 


Disynergy.ru – Сдача тестов без предоплаты +7(924) 305-23-08 help@disynergy.ru
43. Текстовый редактор 1С:Предприятие предназначен для …
44. Типизированными объектами конфигурации называются объекты конфигурации, …
45. Типообразующими объектами конфигурации называются объекты конфигурации.
46. Форма объекта конфигурации включает в себя .
47. Чтобы открыть модуль документа, надо …
Disynergy.ru – Сдача тестов без предоплаты +7(924) 305-23-08 


Диалоги. Знакомство с элементами управления — MFC
Диалоги и элементы управления — очень обширная тема. Например, для полного освещения темы элементов управления потребовалась бы целая книга. Поэтому в данных методических указаниях мы рассмотрим сначала основы, а затем только наиболее широко используемые элементы управления. Это послужит Вам хорошим фундаментом на пути к углубленному изучению MFC.
Диалог (диалоговое окно) представляет собой специальный вид окна, которые предназначены для взаимодействия с пользователем. Обычно они используются для изменения настроек приложения и ввода информации. Диалоги используются очень часто. Например, практически все окна настроек приложения Microsoft Word являются диалогами.
- Обыкновенная кнопка (push button) — это кнопка, которую пользователь «нажимает» мышью или клавишей Enter, переместив предварительно на нее фокус ввода.
- Контрольный переключатель (check box) может быть либо выбранным, либо нет. Если в диалоге есть несколько контрольных переключателей, то могут быть выбраны одновременно несколько из них.
- Радиокнопка (radio button) — это почти то же самое, что и контрольный переключатель. Только при наличии нескольких кнопок в группе может быть выбрана только одна.
- Список (list box) содержит набор строк, из которого можно выбрать одну или несколько. Широко используется при отображении имен файлов.
- Поле ввода (edit box) — это элемент, позволяющий ввести строку текста.
- Комбинированный список (combo box) представляет собой список со строкой ввода.
- Статический элемент (static control) предназначен для вывода текста или графики, но не предназначен для ввода.
Классы MFC для элементов управления
В MFC содержатся классы для всех стандартных элементов управления. Эти классы описывают сами элементы, а также содержат функции для работы с ними. Их называют классами управления. Они порождаются от класса CWnd. Таким образом, все они обладают характеристиками окна. Ниже приведены основные классы управления:
| Класс | Элемент управления |
| CButton | Кнопки, селекторные кнопки и контрольные переключатели |
| CEdit | Поля ввода |
| CListBox | Списки |
| CComboBox | Комбинированные списки |
| CScrollBar | Полосы прокрутки |
| Cstatic | Статические элементы |
В MFC допускается также и непосредственное обращение к элементам управления, но на практике это происходит очень редко. Намного удобнее пользоваться соответствующими классами. Наиболее часто элементы управления используются с диалоговыми окнами, хотя можно создавать и отдельные элементы, расположенные в главном окне.
Модальные и немодальные диалоги
Есть два типа диалогов: модальные и немодальные. Наиболее распространены первые. В случае модальных диалогов, при активизации диалога основное окно приложения становится пассивным и перестает реагировать на действия пользователя до тех пор, пока он не закроет диалог. В случае немодальных диалогов, диалог существует независимо от других окон, и основное окно также может быть активизировано. Программировать немодальные диалоги немного труднее. Мы рассмотрим оба типа диалогов.
Диалоги как ресурсы
Как уже было упомянуто выше, диалоги не создаются программно. Вместо этого, при необходимости из ресурсов загружаются описания диалогов, и Windows по этому описанию формирует окно и размещает на нем все элементы управления.
Диалоги редактируются визуально из ресурсного редактора. Диалог вместе со всеми элементами управления представляет собой один ресурс со своим идентификатором. Кроме того, каждый элемент управления имеет свой идентификатор, который может быть только числовым. Обычно идентификаторы имеют префикс в соответствии с названием данного элемента управления, хотя при желании можно использовать любые идентификаторы.
Класс CDialog
В MFC все диалоги являются экземплярами либо класса CDialog, либо порожденных от него классов. Лишь самые простые диалоги используют непосредственно класс CDialog. В общем же случае, необходимо определять собственный класс. Класс CDialog имеет конструкторы со следующими прототипами:
Параметр ResourceName или ResourceID определяет идентификатор диалога в ресурсах, строковый или числовой. Параметр Owner — это указатель на окно-собственник, если равен 0, то собственником будет главное окно приложения. Последняя форма конструктора предназначена для создания немодальных диалогов, о которых будет сказано в дальнейшем.
Обработка сообщений от диалогов
Все диалоги являются разновидностью окон. Поэтому для них используется такой же механизм сообщений, как и для главного окна. Для каждого диалога организуется собственная очередь сообщений, так же точно, как и для главного окна.
Каждый раз, когда элемент управления диалога активизируется, диалогу посылается сообщение WM_COMMAND. С этим сообщением передается идентификатор элемента управления. Для обработки сообщений в карту сообщений диалога нужно поместить макрос ON_COMMAND(). Многие элементы управления генерируют также идентификационный код, который позволяет определить, какое действие было произведено с элементом управления. Во многих случаях по этому коду выбирается тот или иной обработчик. Как будет показано далее, в MFC имеется механизм, подобный макросу ON_COMMAND(), с помощью которого можно связывать идентификационные коды с обработчиками.
Вызов диалога
После того, как объект класса диалога создан, необходимо вызвать член-функцию DoModal(). Результатом будет модальное отображение диалога. Прототип функции следующий:
Функция возвращает код завершения, генерируемый диалогом при закрытии, или -1, если окно не может быть отображено. Если при отображении диалога произошла ошибка, возвращается IDABORT. Функция не завершается, пока диалог не будет закрыт.
Закрытие диалога
По умолчанию диалог закрывается при получении сообщения с идентификатором либо IDOK, либо IDCANCEL. Они предопределены и обычно связаны с кнопками подтверждения и отмены. Класс CDialog содержит встроенные обработчики для этих двух случаев, OnOK() и OnCancel(). Их не нужно включать в очередь сообщений диалога. Но их можно переопределить, что дает возможность программисту управлять закрытием диалога. Для программного закрытия диалога нужно вызвать член-функцию с прототипом:
Параметр определят значение, которое вернет функция DoModal(). Обычно возвращаются значения IDOK или IDCANCEL, другие значения используются редко.
Пример программы с диалоговым окном
Ниже приведены исходные тексты примера программы с диалогом. Диалог выбирается с помощью меню. Он имеет три элемента управления — кнопки «Red», «Green» и «Cancel». Также переопределена функция OnCancel(), что позволяет при попытке закрытия диалога вывести окно с подтверждением. Диалог закрывается программно, с возвратом кода завершения 7, который затем возвращается функцией DoModal() и отображается в окне. Это сделано лишь для демонстрации, реально же обычно возвращается IDCANCEL. Диалог создавался визуально в среде Visual C++. Здесь приводится также файл с идентификаторами, сгенерированный средой. В дальнейшем этот файл приводиться не будет, потому что, вообще говоря, он не предназначен для чтения человеком. Так как все идентификаторы в примерах имеют осмысленные имена, то загрузив проект в среду IDE, Вы сможете сразу узнать, какие идентификаторы каким элементам управления соответствуют.
Рис. 7. Пример приложения с диалогом
Инициализация диалога
Часто различные переменные и элементы управления, связанные с диалогом, должны быть инициализированы до того, как диалог будет отображен. Чтобы позволить диалогу выполнить подобные действия, Windows автоматически посылает ему сообщение WM_INITDIALOG в момент создания. При получении такого сообщения MFC автоматически вызывает член-функцию OnInitDialog(), которая является стандартным обработчиком, определенным в классе CDialog. Эта функция должна переопределяться в программе, если необходимо выполнение различных инициализационных действий. Прототип функции такой:
Эта функция вызывается до того, как диалог будет отображен. Она должна возвращать TRUE, чтобы Windows могла передать фокус ввода (т. е. сделать активным) на первый элемент управления в окне.
Первым действием в переопределенной функции должен быть вызов функции CDialog::OnInitDialog().
В дальнейшем мы будем использовать эту функцию в примерах.
Списки
Список является одним из наиболее распространенных элементов управления. В MFC работа со списком осуществляется через класс CListBox.
Основы работы со списками
Списки являются элементами управления, требующими двустороннего взаимодействия между ними и программой. То есть список может как посылать, так и принимать сообщения. В частности, сообщения посылаются списку при его инициализации. Сюда входит передача набора строк, которые будут отображены в окне списка (по умолчанию список создается пустым). Когда список инициализирован, он посылает сообщения о действиях, произведенных с ним пользователем.
Прием идентификационных кодов списка
Список может генерировать сообщения различных типов. Например, сообщения посылаются при двойном щелчке на элементе списка, при потере списком фокуса ввода и при выборе другого элемента из списка. Каждое такое событие описывается идентификационным кодом. Этот код является частью сообщения WM_COMMAND. Некоторые другие элементы также используют идентификационные коды.
Единственный код, которым мы воспользуемся, называется LBN_DBLCLK. Он посылается, когда пользователь выполняет двойной щелчок на элементе списка. (При определении списка в ресурсах должна быть установлена опция Notify, чтобы он мог генерировать это сообщение.) Когда выбор произведен, необходимо запросить список, чтобы узнать о том, какой элемент выбран.
Для обработки сообщения LBN_DBLCLK необходимо поместить его обработчик в карту сообщений. Но это будет не макрос ON_COMMAND(). Вместо этого в данном случае используются специальные макрокоманды. Для нашего сообщения это будет ON_LBN_DBLCLK(). Она имеет такой вид:
Многие сообщения обрабатываются подобным образом. Названия всех макросов для таких сообщений начинаются с префикса ON_LBN_.
Передача сообщений списку
В традиционных Windows-программах сообщения посылаются элементам управления с помощью API-функций, например SendDlgItemMessage(). Но в программах на MFC для этих целей применяются соответствующие функции-члены. Они автоматически посылают нужное сообщение элементу управления. В этом заключается преимущество MFC по сравнению с традиционным методом программирования.
Списку может быть послано несколько разных сообщений. Для каждого класс CListBox содержит отдельную член-функцию. Например, рассмотрим следующие функции:
Функция AddString() вставляет указанную строку в список. По умолчанию она вставляется в конец списка. Начало списка имеет индекс 0. Функция GetCurSel() возвращает индекс текущего выделенного элемента. Если ни один элемент не выбран, возвращает LB_ERR. Функция GetText() получает строку, связанную с указанным индексом. Строка копируется в символьный массив по адресу StringVariable.
Получение указателя на список
Функции CListBox работают с объектами CListBox. Значит, необходимо получить указатель на объект списка, что делается с помощью функции GetDlgItem(), являющейся членом класса CWnd:
Эта функция возвращает указатель на объект, чей идентификатор передан как параметр. Если такой объект не существует, то возвращается 0. Необходимо понимать, что указатель, возвращаемый функцией, является временным. Он действителен только в пределах текущего обработчика.
Значение, возвращенное функцией, должно быть приведено к типу указателя на конкретный класс управления. Например, в нашем случае это тип CListBox*.
Инициализация списка
Посколькlу по умолчанию список создается пустым, он должен инициализироваться каждый раз, когда отображается диалог. Для этого необходимо переопределить функцию OnInitDialog(), в которой в список добавлялись бы строки. Если при добавлении элементов в список их число превысит то, которое помещается в окне списка, то в этом окне автоматически появится вертикальная полоса прокрутки.
Пример программы
Мы расширим предыдущий пример программы и добавим в диалог список. Выбор элемена списка осуществляется либо с помощью двойного щелчка на элементе, либо при нажатии на кнопку «Выбери фрукт». Обратите внимание, что в обоих случаях вызывается один и тот же обработчик, который сначала получает адрес объекта списка, затем получает номер выделенного пункта, а по номеру получает выделенную строку. Строка печатается в окне.
Рис. 8. Пример приложения со списком
Поле ввода
Это последний элемент управления, который мы рассмотрим в качестве введения в диалоги и элементы управления. Поля ввода используются очень широко, так как дают возможность ввести строку по своему усмотрению. Даже зная, как создавать только поля ввода и списки, уже можно писать полезные программы.
Поля ввода принимают многие сообщения и сами могут генерировать несколько типов сообщений. Однако обычно отвечать на большинство из них нет необходимости. Как Вы скоро убедитесь, поля ввода самостоятельно выполняют большинство функций редактирования. Для этого не требуется взаимодействия с программой. Нужно только решить, когда затребовать содержимое поля ввода.
Для получения текущего содержимого поля вода, состоящего из одной строки, используется функция GetWindowText(). Ее прототип таков:
В результате ее выполнения содержимое поля ввода будет скопировано в строку по адресу StringVariable. Эта функция позволяет получить текст, связанный с любым окном или элементом управления. Применительно к обычному окну функция получает заголовок окна.
В момент создания поле ввода является пустым. Для инициализации его содержимым используется еще одна функция-член класса CWnd — SetWindowText(). Она отображает строку в элементе управления, который вызвал эту функцию. Вот ее прототип:
Пример программы с полем ввода
Рис. 9. Приложение со строкой редактирования в диалоге
Немодальные диалоги
Немодальные диалоги получают сообщения параллельно с основным окном bприложения. То есть, как минимум два окна будут одновременно активными. Поэтому работа с немодальными диалогами требует чуть больше усилий, должны быть выполнены дополнительные операции.
Для создания немодального диалога нужно выполнить два действия. Во-первых, нужно создать «пустой» объект диалога, то есть не связанный с шаблоном из ресурсов. Привязка к ресурсам осуществляется через функцию Create(). Рассмотрим этот процесс подробнее.
Для создания объекта немодального диалога нужно использовать конструктор CDialog::CDialog() без параметров. Он объявлен как protected-член класса. Это означает, что он может быть вызван только изнутри член-функции порожденного класса. Это сделано для того, чтобы программист обязательно определял свой порожденный класс для немодального диалога, и определял в нем дополнительные операции для немодального диалога.
Когда экземпляр создан, он привязывается к ресурсам с помощью функций:
Первый параметр определяет идентификатор диалога в ресурсах. Второй параметр, как обычно, определяет окно-собственник для диалога.
Необходимо помнить о том, что объект немодального диалога должен существовать в течение всего времени использования диалога. Функция Create() отображает окно и после этого немедленно завершается. А объект окна должен существовать.
В отличие от модальных окон, немодальные не становятся автоматически видимыми при вызове. Чтобы диалог сразу был видимым, нужно в ресурсном редакторе установить опцию Visible. Или можно использовать функцию ShowWindow().
Для закрытия немодального диалога нужно использовать функцию DestroyWindow(). Это означает, что функции OnCancel() и/или OnOK() должны быть переопределены.
Пример программы с немодальным диалогом
Рис. 10. Пример приложения с немодальным диалогом
Текстовое поле как элемент диалога может быть
Визуальные средства разработки приложений в Windows в последнее время становятся обыденным инструментом любой приличной системы программирования. Предлагать систему программирования, способную создавать диалоговые программы, но лишенную визуальных средств проектирования экранных форм, пожалуй, просто неловко.
В этом разделе описывается работа со встренным конструктором диалогов (экранным дизайнером) HomeLisp. Последовательность действий по созданию визуального интерфейса в HomeLisp довольно схожа с работой в таких системах, как Visual Basic, VBA или Deplphi. Разумеется, возможности и событийная модель HomeLisp, описанная здесь, заметно скромнее, чем у перечисленных выше профессиональных систем разработки. Тем не менее, даже эти скромные возможности вполне позволяют создать простой графический интерфейс для программ, написанных на HomeLisp.
Основой графического пользовательского интерфейса применительно к HomeLisp является т.н. диалог — модальная форма, содержащая элементы управления. Элементами управления являются:
Событийная модель HomeLisp очень проста: с каждым элементом управления связан один тип событий. С полем ввода (TextBox) связано событие KeyPressed, заключающееся в том, что пользователь ввел в поле ввода символ. С остальными элементами управления связано событие Click (щелчок мыши). Процедура-обработчик события для поля ввода получает, как параметр, ASCII-код клавиши, нажатой пользователем. Обработчики события Click не получают параметров.
В экранном дизайнере диалог может быть «нарисован» мышью (при минимальном участии клавиатуры). Дизайнер также генерирует заглушки процедур-обработчиков событий для каждого из элементов управления. Содержательную часть кода процедур-обработчиков событий должен написать человек.
Сверстанный диалог можно сохранить в текстовом файле с расширением «.dlg» (и впоследствии восстановить с целью продолжения работы). Полностью готовый диалог следует «протранслировать» в Лисп-код, после чего диалог готов для выполнения.
Для того, чтобы из среды разработки вызвать дизайнер, пользователь должен активизировать четвертую кнопку панели инструментов:

или пункт главного меню «Диалоги». Окно экранного дизайнера выглядит так:

Дизайнер содержит командную панель (органы которой задублированы в главном меню) и панель инструментов. Панель инструментов, в свою очередь, включает средства выбора элементов управления, выпадающий список элементов управления и окно свойств. Справа от панели инструментов расположена форма проектируемого диалога.
Опишем органы управления дизайнером чуть подробнее. Командная панель (тулбар) дизайнер имеет вид:

Кнопки командной панели (перечисленные слева направо) предназначены для:
Загрузить диалог сохраненный ранее в файле .dlg;
Сохранить диалог в файле формата .dlg;
Вырезать выделенный текст и поместить его в буфер обмена (кнопка активна только в режиме корректировки программного кода);
Скопировать выделенный текст и поместить его в буфер обмена (кнопка активна только в режиме корректировки программного кода);
Вставить текст из буфера обмена с текущего положения курсора (кнопка активна только в режиме корректировки программного кода и при непустом буфере обмена);
Вставить стандартный шаблон вызова функции с текущего положения курсора (кнопка активна только в режиме корректировки программного кода);
Сгенерировать Лисп-код диалога (включает программное создание диалога, добавление органов управления и назначение обработчиков событий);
Выйти из конструктора диалогов и вернуться в среду разработки.
Панель инструментов конструктора показана на отдельном рисунке ниже:

Два ряда кнопок в верхней части панели служат для выбора «рисуемого» элемента управления. При этом самая левая кнопка в первом ряду (с изображением стрелки) служит для отказа от выбора типа. Активная в данный момент кнопка обводится синей рамкой.
Ниже в отдельной рамке располагается двухкнопочный переключатель свойства/события. Этот переключатель активен только если на форме имеется хотя бы один элемент управления.
Еще ниже располагается выпадающий список объектов диалога. Каждому элементу управления дается уникальное стандартное имя и оно добавляется в выпадающий список объектов. Если пользователь удалит элемент управления, его имя автоматически удалится из списка объектов диалога.
Под списком объектов диалога располагается окно свойств активного элемента управления. Любое из свойств может быть изменено. Для этого следует щелкнуть по полю ввода, распложенному правее нужной надписи. Дальнейшее зависит от вида свойства. Для простых свойств (текст надписи, геометрические размеры) откроется желтое поле ввода, в которое можно с клавиатуры ввести новое значение (которое заменит старое). Нажатие клавиши Esc позволяет отказаться от замены. Для сложных свойств (шрифт, цвет, иконка) в поле ввода появится кнопка Дальше. , после чего либо вызывается стандартный диалог (выбор шрифта, цвета), либо отображается форма выбора иконки из внутреннего пула иконок.
Ниже работа с дизайнером будет рассмотрена на примере создания простого диалога, содержащего два поля ввода и две командные кнопки. В первое поле ввода пользователь вводит целое число, нажимает первую кнопку, и во втором поле появляется факториал введенного числа. Вторая кнопка служит для завершения диалога.
Для изменения размеров формы (ширины и высоты) можно либо «подцепить» соответствующую границу формы мышью и придать форме нужные размеры, либо дважды щелкнуть мышью по полю ввода в окне свойств диалога (против надписей «ширина» или «высота») и задать нужный размер формы диалога. Двойной щелчок по полю ввода против надписи «заголовок» позволяет задать отображаемый заголовок формы.
Для того, чтобы разместить на форме элемент управления, следует щелкнуть мышью по иконке нужного элемента, перевести курсор мыши на проектируемую форму, установить его в точку, где будет располагаться левый верхний угол элемента управления, нажать левую клавишу мыши, и, не отпуская левой клавиши, повести мышью вниз и вправо. При этом на форме возникнет коричневая рамка, показывающая место, где будет располагаться добавляемый элемент управления. На приводимом ниже рисунке пользователь размещает текст-бокс (поле ввода).

После того, как пользователь отпустит левую клавишу мыши, рамка исчезнет, а на месте рамки появится соответствующий элемент управления:

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

Пусть читатель обратит внимание, что в выпадающй список, расположенный между палитрой инструментов и окном свойств, добавляются имена выбранных элементов управления. Первое поле ввода будет называться _TXT_1, второе — _TXT_2 и т.д. Диалогу тоже присваивается имя _DLG_. В поля ввода при их создании автоматически заносится текст Поле_ввода_1, Поле_ввода_2 и т.д. Аналогично, на командных кнопках формируются надписи Кнопка-1, Кнопка-2 и т.д.
Теперь необходимо очистить поля ввода и изменить надписи на кнопках. Для этого следует щелкнуть мышью по нужному элементу управления (например, по первому полю ввода), перейти в окно свойств и щелкнуть мышью по полю ввода справа от слова «текст». Поле окрасится в желтый цвет, и в нем появится курсор. Необходимо удалить все символы из этого поля и нажать Enter:

Аналогичным образом очищается второе поле ввода, а на кнопки наносятся надписи «Вычислить» и «Закрыть» соответственно:

На командные кнопки можно посадить иконки. Для того, чтобы сделать это, выделяем щелчком мыши нужную кнопку, переходим в окно свойств, и дважды щелкаем по белому полю справа от надписи «иконка». На поле появится кнопка с тремя точками:

Щелкаем по этой кнопке, — появится форма выбора иконки:

Выбираем нужную иконку, нажимаем кнопку «Принять», — и диалог принимает окончательный вид:

Теперь необходимо назначить кнопкам процедуры-обработчики событий. Начнем с кнопки «Закрыть». Выделяем эту кнопку щелчком мыши, а затем щелкаем по кнопке с изображением желтой молнии. Открывается окно редактирования кода:

В теле функции-обработчика события пишем вызов DLGHIDE:

Щелкаем по кнопке с изображением руки (переходим от редактирования кода к дизайну), выбираем кнопку «Вычислить» и, щелкнув по желтой молнии, открываем ее обработчик. В этом обработчике пишем следующее:

Тело функции-обработчика представляет собой PROG-конструкцию. Используются две локальные (связанные) переменные x и y. В переменую x заносится текст, введенный пользователем в первое поле ввода. Чтобы предотвратить возможные ошибки, вычисление факториала заключается в TRY-EXCEPT-группу. Поскольку функция fact требует аргумента типа FIXED, то используется функция STR2FIX. Если при вычислении факториала произойдет любая ошибка, переменная y получит значение «Ошибка при вычислении». В любом случае, значение переменной y заносится в текстовое поле _TXT_2.
Диалог готов. Перед тем, как генерировать Лисп-код, диалог рекомендуется сохранить. Для этого следует выбрать пункт главного меню «Сохранить» или нажать кнопку на панели инструментов с изображением дискеты. Откроется окно «Сохранить как»:

Выбираем имя test и нажимаем кнопку сохранить. Выдается сообщение «Диалог сохранен». Теперь следует сгенерировать Лисп-код нашего диалога. Для этого нажимаем седьмую кнопку панели инструментов (или выбираем пункт главного меню «Сгенерировать»). Снова появится окно «Сохранить как»:

Задаем имя test и нажимаем кнопку «Сохранить». Выдается сообщение «Лисп-код сгенерирован», а в выбранной директории появится файл test.lsp, содержащий полный код диалога. При желании можно посмотреть Лисп-код. Он будет выглядеть так:

