- •Армавирский государственный
- •1.1. Cреда Visual Prolog: основные понятия, интерфейс.
- •Задания для самостоятельной работы
- •1.2 Набор, редактирование и тестирование простейших программ в режиме Test Goal
- •1.3 Создание простейших проектов
- •Задания для самостоятельной работы
- •1.4 Поиск с возвратом
- •Задания для самостоятельной работы
- •1.5 Управление поиском с возвратом: предикаты fail и отсечения.
- •Задания для самостоятельной работы
- •1.6 Арифметические вычисления
- •1.7 Рекурсия
- •Задания для самостоятельной работы
- •1.8 Решение логических задач в пролоГе
- •Задания для самостоятельной работы
- •1.9 Списки
- •2 Разработка графического интерфейса пользователя
- •2.1 Создание простейших проектов с графическим интерфейсом
- •Задание для самостоятельной работы
- •2.2 Создание новых окон в проекте с использованием кнопок и полей ввода
- •Задание для самостоятельной работы
- •2.3 Использование элемента ListBox
- •Задание для самостоятельной работы
- •3 Создание экспертных систем средствами пролоГа
- •Задание для самостоятельной работы
Задание для самостоятельной работы
Доработайте проект, создав новый пункт меню Summa, при выборе которого появляется новое окно для ввода двух чисел и вычисления их суммы.
2.3 Использование элемента 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).
Push
Button Edit
Control ListBox
рис.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):-!,
win_spisok_Create(_Win),
!.
%END Task Window, id_spisok
7. Запрограммируйте нажатие кнопки ADD в окне Spisok для добавления нового элемента в список. Для этого вызовите окно Dialog and Window Expert (кнопка Code Expert) и в списке окон выберите Spisok. Выберите пункт Control в списке Event Type и выделите строку pb: idc_add(имя кнопки ADD). Нажмите кнопку Add Clause, а затем Edit Clause(рис.26).
рис.26. Созданное окно Spisok
Откроется окно редактора для файла Spisok.pro, в который добавлено предложение:
%BEGIN spisok, idc_add _CtlInfo
win_spisok_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,
_CtlInfo),0):-!,
!.
%END spisok, idc_add _CtlInfo
Допишите необходимые команды. В результате должно получиться:
%BEGIN spisok, idc_add _CtlInfo
win_spisok_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,
_CtlInfo),0):-!,
LBOXWIN = win_GetCtlHandle(_Win,id_list_box),
E_WINDOW = win_GetCtlHandle(_Win,idc_edit),
EDIT_STRING= win_GetText(E_WINDOW),
EDIT_STRING<>"",
lbox_Add(LBOXWIN,-1,EDIT_STRING),
!.
%END spisok, idc_add _CtlInfo
8. Аналогично запрограммируйте нажатие кнопки DELETE в окне Spisok для удаления выделенного элемента списка.
%BEGIN spisok, idc_delete _CtlInfo
win_spisok_eh(_Win,e_Control(idc_delete,_CtrlType,_
CtrlWin, _CtlInfo),0):-!,
LBOXWIN = win_GetCtlHandle(_Win,id_list_box),
Index = lbox_GetSelIndex(LBOXWIN),
lbox_Delete(LBOXWIN,Index),
!.
%END spisok, idc_delete _CtlInfo
9. Запустите проект на исполнение и протестируйте его.