СОЗДАНИЕ НОВЫХ ОКОН В ПРОЕКТЕ
С ИСПОЛЬЗОВАНИЕМ КНОПОК И ПОЛЕЙ ВВОДА
Поля ввода (
Edit Control) позволяют пользователю вводить данные. Обычно этот элемент представляет собой строку, которая содержит текст или число. Поле ввода может быть многострочным.
Для установки и получения содержимого поля ввода нужно использовать предикаты:
String = win_GetText (Window)
win_SetText (Window , string Text)
где Window – это оконный дескриптор элемента управления, который может быть получен вызовом предиката:
CtrlHndl=win_GetCtlHandle(Parent Window,CtrlId)
Командные кнопки (
Push Button) позволяют пользователю выполнять различные действия: открывать и закрывать окна, выполнять расчеты и т.д.
Пример. Проект, позволяющий вычислить факториал введенного числа
Создать проект, в котором при выборе пункта меню
Factorial открывается окно, позволяющее ввести натуральное число и вычислить его факториал.
Решение
1. Создайте новый проект.
2. Добавьте в главное меню новый пункт Factorial .
3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем – кнопку New справа
Откроется окно
Window Attributes. Введите имя создаваемого окна
Factorial и нажмите ОК.
4. Разместите на макете появившегося нового окна следующие компоненты:
Static Text для вывода текста
Edit Control для ввода данных
Push Button для выполнения расчета






После размещения компонентов установите необходимые для каждого из них атрибуты:
а) для компонента
Static Text, служащего для вывода надписи
Введите число (имя-константа будет задано автоматически)
б) для компонента Edit Control (поле ввода), который обеспечит ввод числа

в) для компонента
Push Button (кнопка), при нажатии на который будет выполнен расчет и выведен результат (имя-константа будет задано автоматически)
г) для компонента
Static Text, необходимого для вывода результата

5. Сгенерируйте стандартный код Visual Prolog для нового окна. Для этого в окне проекта нажмите кнопку
Code Expert, когда выбрано окно
Factorial. Откроется окно
Dialog and Window Expert. Выберите исходный модуль
Factorial.pro и нажмите кнопку
Default Code.

Когда заданный по умолчанию код будет сгенерирован, станут доступны кнопки
Add Clause, Edit Code и некоторые другие.
6. Запрограммируйте выбор пункта меню
Factorial для вызова окна
Factorial. Для этого в списке окон выберите
Task Window , пункт
Menu в списке
Event Type и выделите строку
id_factorial(имя пункта меню) в списке
Event or Item. Нажмите кнопку
Add Clause, чтобы сгенерировать Пролог-предложение для события. Название кнопки изменится на
Edit Clause, когда код для события будет создан. Нажмите кнопку
Edit Clause. Откроется окно редактора для файла Factorial.pro, в который добавлено предложение:
%BEGIN Task Window, id_factorial
task_win_eh(_Win,e_Menu(id_factorial,_ShiftCtlAlt),0):-!,
!.
%END Task Window, id_factorial
Допишите команду для открытия окна Factorial: win_factorial_Create(_Win). В результате должно получиться:
%BEGIN Task Window, id_factorial
task_win_eh(_Win,e_Menu(id_factorial,_ShiftCtlAlt),0):-!,
win_factorial_Create(Win),
!.
%END Task Window, id_factorial
7. Запрограммируйте нажатие кнопки
Результат в окне Factorial для выполнения расчета и вывода результата. Для этого вызовите окно
Dialog and Window Expert и в списке окон выберите
Factorial. Выберите пункт
Control в списке
Event Type и выделите строку
pb: idc_результат(имя кнопки). Нажмите кнопку
Add Clause, а затем
Edit Clause. Откроется окно редактора для файла Factorial.pro, в который добавлено предложение:
%BEGIN Factorial, idc_результат _CtlInfo
win_factorial_eh(_Win,e_Control(idc_результат,_CtrlType,_CtrlWin, _CtlInfo),0):-!,
!.
%END Factorial, idc_результат _CtlInfo
Допишите команды, необходимые для вычисления факториала и вывода результата. В результате должно получиться:
%BEGIN Factorial, idc_результат _CtlInfo
win_factorial_eh(_Win,e_Control(idc_результат, _CtrlType, _CtrlWin, _CtlInfo), 0):-!,
EDIT_WIN1=win_GetCtlHandle(_WIN,idc_ввод),
Text1=win_GetText(EDIT_WIN1), % считываем данные из поля ввода
str_int(Text1,N), % преобразует в числовое значение
fact(N,FN), % вычисляем факториал
str_int(StrFN,FN), % преобразуем в строковое значение
EDWIN=win_GetCtlHandle(_WIN,idct_вывод),
win_SetText(EDWIN,StrFN), % выводим результат
!.
%END Factorial, idc_результат _CtlInfo
8. Опишите правило вычисления факториала и предикат
fact:
PREDICATES
win_factorial_eh : EHANDLER
fact(integer,integer)
CLAUSES
fact(0,1):-!.
fact(N,F):- N1=N-1,fact(N1,F1), F=N*F1.
win_factorial_Create(_Parent):-
win_Create(win_factorial_WinType,win_factorial_RCT,win_factorial_Title,
win_factorial_Menu,_Parent,win_factorial_Flags,win_factorial_eh,0).
9. Запустите проект на исполнение и протестируйте его.
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Доработайте проект, создав новый пункт меню
Summa, при выборе которого появляется новое окно для ввода двух чисел и вычисления их суммы.