ИСПОЛЬЗОВАНИЕ ЭЛЕМЕНТА LISTBOX ListBox (список)- это элемент управления, содержащий набор пунктов, которые может выбрать пользователь. В VPI есть несколько предикатов для работы со списками: lbox_Add (Window, Index, Str) добавляет новую строку Str в список в позицию с индексом Index. Если Index равен -1, то строка добавляется в конец списка lbox_Clear (Window) удаляет все элементы списка lbox_Delete (Window, Index) удаляет элемент с указанным индексом Пример. Проект, позволяющий формировать и редактировать списки данных. Создать проект, содержащий элементы ListBox (список), Edit Control (поле ввода) для ввода новых данных, Push Button (кнопки) для добавления нового элемента в список и удаления выделенного элемента. Решение 1. Создайте новый проект. 2. Добавьте в главное меню новый пункт Spisok . 3. Создайте новое окно. Для этого в окне проекта нажмите кнопку Window на левой панели инструментов, а затем – кнопку New справа. Откроется окно Window Attributes. Введите имя создаваемого окна Spisok и нажмите ОК. 4. Разместите на макете появившегося нового окна следующие компоненты: Edit Control, Push Button, ListBox Edit Control ListBox Push Button Задайте имена-константы для размещенных элементов, например: для 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 Допишите команду для открытия окна win_spisok_Create(_Win). В результате должно получиться: Spisok: %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 Clause, а затем Edit Clause. Откроется окно редактора для файла Spisok.pro, в который добавлено предложение: %BEGIN spisok, idc_add _CtlInfo win_spisok_eh(_Win,e_Control(idc_add,_CtrlType,_Ctrl Win, _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. Запустите проект на исполнение и протестируйте его. ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ Доработайте проект, добавив кнопку CLEAR, при нажатии на которую удаляется все содержимое списка (используйте предикат lbox_Clear)