Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_Пролог_Етап2_10.doc
Скачиваний:
14
Добавлен:
23.03.2015
Размер:
1.57 Mб
Скачать

Додавання речення для реагування на вибір пункту меню

Для додавання речення можна було б використати редактор тексту VPI і додати потрібний фрагмент коду. Але простіше й зручніше це зробити за допомогою так званих експертів коду (Code Experts). Для цього натиснемо у вікні проекту кнопку Window на лівій інструментальній панелі й кнопку Code Expert на правій інструментальній панелі. З'явиться один із видів експертів коду – експерт діалогів і вікон (Dialog/Window Expert) (рис. 17).

Рис. 17. Вікно експерта коду

Потім виконаємо такі кроки:

- виберемо у вікні Event Type пункт Menu;

- виберемо у вікні Event or Item пункт id_hello;

- натиснемо кнопку Add Clause;

- натиснемо кнопку Edit Clause.

Вставка предиката dlg_Note в речення

Натиснення кнопки Edit Clause видасть редактор, у якому вже додано таке речення:

task_win_eh(_Win,e_Menu(id_hello,_ShiftCtlAlt),0):-!, !.

де task_win_eh – предикат оброблювача події для вікна Task.

Зверху й знизу від поданого речення знаходяться коментарі %BEGIN Task Window, id_hello, теж додані експертом діалогів і вікон. Змінна _Win містить дескриптор вікна – у розглядуваному випадку вікна Task. Змінна _ShiftCtlAlt містить комбінацію клавіш, якими ми можемо викликати меню.

Тепер для вставки предиката dlg_Note скористаємося контекстним меню (рис. 18). Установимо курсор на речення після першого предиката !, натиснемо праву клавішу миші й виберемо в меню пункти Insert | Predicate Call | Window, Dialog or Toolbar.

Рис. 18. Додавання предиката dlg_Note через контекстне меню

Далі у вікні Insert Call of… вибиремо опції Common Dialog та dlg_Note, а також у полі Note Message введемо фразу „Hello World!”, включаючи лапки (рис. 19).

Тепер кінцевий код речення виглядатиме таким чином:

task_win_eh(_Win,e_Menu(id_hello,_ShiftCtlAlt),0):-!,

Title="Title",

dlg_Note(Title,"Hello World!"),!.

Перевіримо роботу додатка. Натиснувши кнопку Run на панелі інструментів, скомпілюємо, скомпонуємо і виконаємо проект. Тепер, якщо в меню нашого додатка вибрати команду Test | Hello World, з’явиться вікно MessageBox із повідомленням „Hello World!”.

Рис. 19. Вікно Insert Call of…

Використання діалогових вікон, створених користувачем

Для створення нового діалогу в лівій частині вікна проекту натиснемо кнопку Dialog, а в правій частині вікна – кнопку New. Відкриється вікно Dialog Attributes, у якому у відповідних рядках введемо ім'я діалогу, наприклад My, константу (вона вводиться автоматично), заголовок, за потреби – прапори стилю, розміри та тип (модальний або немодальний). Після натиснення кнопки ОК з'являться вікно діалогу і вікна елементів керування та шарів. Відредагуємо вікно діалогу, наприклад, розмістимо в ньому рядок введення та командну кнопку. Після редагування вікна виділимо його назву у вікні проекту й натиснемо кнопку Code Expert. У вікні Dialog and Window Expert у групі Dialog or Window Selection поставимо перемикач на Dialog, у списку знайдемо ім'я діалогу – My. У групі Place Code Source in... у списку виберемо назву проекту (наприклад, New.pro). Натиснемо кнопку Default Code, при цьому у файл (наприклад, New.pro) буде вставлений код, стосовний цього діалогу.

Для виклику діалогу створимо пункт меню. У лівій частині вікна проекту виберемо кнопку Menu, а в правій – Edit. У вікні Task Menu натиснемо кнопку New, введемо текст, наприклад My_dialog, константа вводиться автоматично – id_My_dialog. Далі натиснемо кнопку Code Expert, у групі Dialog or Window Selection поставимо перемикач на Window, у списку Event Type виберемо Menu, у списку Event or Item – ім'я нашого пункту меню (My_dialog) і натиснемо кнопки Add Clause і Edit Clause. У вікні редактора в тілі правила task_win_eh поставимо курсор після першого предиката ! та коми й за допомогою контекстного меню виконаємо команду Insert – Predicate Call – Window, Dialog or Toolbar.

З'явиться вікно Insert Call of..., у якому поставимо перемикач на User Defined Dialog, у списку знайдемо ім'я нашого діалогу – My і натиснемо ОК. Далі викличемо Code Expert, поставимо перемикач на Dialog, у списку знайдемо ім'я My, у списку Event Type виберемо Control, у списку Event or Item виберемо pb: idc_Push_Button, натиснемо кнопку Add Clause i Edit Clause.

Далі в редакторі в тілі правила dlg_my_eh необхідно спочатку отримати дескриптор елемента керування поля введення для доступу до його атрибутів. Для цього в контекстному меню виконаємо команду Insert Predicate Call VPI Predicate, у списку виберемо предикат win_GetCtlHandle, натиснемо ОК. Атрибут CtrlId змінимо за допомогою контекстного меню на idc_edit (команда Insert – Resource Identifier – Dialog Controls). Змінна CtrlWin буде зберігати дескриптор поля введення idc_edit.

Далі за допомогою предиката win_GetText отримаємо текст із поля введення idc_edit (команда Insert – Predicate Call – VPI Predicate), атрибут _Win змінимо на дескриптор поля введення – CtrlWin. Потім уведемо послідовно за допомогою контекстного меню предикат str_real (команда Insert – Predicate Call – Standart Predicate), арифметичний вираз і знову предикати str_real та win_SetText (останній вставляє текст у поле введення). Код для правила dlg_my_eh буде таким:

dlg_my_eh(_Win,e_Control(idc_push_button,_CtrlType,_CtrlWin,_CtlInfo),0):-!, CtrlWin = win_GetCtlHandle(_Win, idc_edit),

Text = win_GetText(CtrlWin),

str_real(Text,RealParam), Y=cos(RealParam),str_real(TextY,Y),

win_SetText(CtrlWin, TextY),

!.