!.
%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, при выборе которого появляется новое окно для ввода двух чисел и вычисления их суммы.
Использование элемента ListBox
ListBox (список)- это элемент управления, содержащий набор пунктов, которые может выбрать пользователь. В VPI есть несколько предикатов для работы со списками:
· lbox_Add (Window, Index, Str) добавляет новую строку Str в список в позицию с индексом Index. Если Index равен -1, то строка добавляется в конец списка. Нумерация элементов списка начинается с 0, т.е. первый элемент списка имеет индекс 0, второй -1 и т.д.
· lbox_Clear (Window) удаляет все элементы списка
· lbox_Delete (Window, Index) удаляет элемент с указанным индексом
· lbox_GetItem (Window, Index) возвращает элемент списка с указанным индексом
· Integer=lbox_GetSelIndex(Window) возвращает индекс выбранного элемента. Предикат завершится неуспешно, если никакой элемент в списке не выбран
· lbox_IsSel(Window, Index) завершается успешно или неспешно в зависимости от того, является ли текущим заданный элемент в списке
Пример. Проект, позволяющий формировать и редактировать списки данных.
Создать проект, содержащий элементы ListBox (список), Edit Control (поле ввода) для ввода новых данных, Push Button (кнопки) для добавления нового элемента в список и удаления выделенного элемента.
Решение
|
|
1. Создайте новый проект.
2. Добавьте в главное меню новый пункт Spisok.
3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем – кнопку New справа. Откроется окно Window Attributes. Введите имя создаваемого окна Spisok и нажмите ОК.
4. Разместите на макете появившегося нового окна следующие компоненты: Edit Control, Push Button, ListBox (рис.26).
|
|
|
рис.26. Созданное окно Spisok
Задайте имена-константы для размещенных элементов, например для Edit Control - idc_edit, для ListBox - id_list_box, для кнопки ADD - idc_add, для кнопки DELETE - idc_delete
5. Сгенерируйте стандартный код Visual Prolog для нового окна. Для этого в окне проекта нажмите кнопку Code Expert, когда выбрано окно Spisok. Откроется окно Dialog and Window Expert. Выберите исходный модуль spisok.pro и нажмите кнопку Default Code.
6. Запрограммируйте выбор пункта меню Spisok для вызова окна Spisok. Для этогов списке окон выберите Task Window, пункт Menu в списке Event Type и выделите строку id_spisok (имя пункта меню) в списке Event or Item. Нажмите кнопку Add Clause, чтобы сгенерировать Пролог-предложение для события. Название кнопки изменится на Edit Clause, когда код для события будет создан. Нажмите кнопку Edit Clause. Откроется окно редактора для файла Spisok.pro, в который добавлено предложение:
%BEGIN Task Window, id_spisok
task_win_eh(_Win,e_Menu(id_spisok,_ShiftCtlAlt),0):-!,
!.
%END Task Window, id_spisok
Допишите команду для открытия окна Spisok: win_spisok_Create(_Win). В результате должно получиться:
%BEGIN Task Window, id_spisok
task_win_eh(_Win,e_Menu(id_spisok,_ShiftCtlAlt),0):-!,