Лабораторна работа№7 (2г)
Тема роботи: Організація Foxменю.
Мета роботи: навчитися створювати меню.
Рекомендована література:
-
Попов а.А. Програмування в середовищі сrбд foxpro 2.0. - м.: Радіо і зв'язок, к.: тоо «Століття», 1995 стор.39-54.
І. Теоретичні відомості
Меню є основною формою діалогу в прикладних системах обробки даних. FOXPRO має винятково розвиті засоби підтримки меню як з об'ємним світловим курсором (світловим "зайчиком") так і з призначеними клавішами.
Крім того в FOXPRO реалізоване ще і кнопкове" (Button) меню. Термін кнопка тут означає не фізичну кнопку на клавіатурі, а деяку область на екрані, якої додані керуючі властивості. "Кнопкове" меню зручно використовувати разом з мишею.
Світлове меню.
Світлове меню являє собою перелік елементів меню, серед яких один є поточний "підсвічений" (відображений іншим світлом чим всі інші пункти меню). Переміщення світлового курсору здійснюється клавішами керування курсором. Вибір у меню виробляється натисканням клавіш Enter і Space (Введення і Пробіл), відмовлення від вибору - клавішею Escape.
Більшість з реалізованих у мові меню є вікнами, тобто вони можуть проектуватися на видиму частину екрана без псування зображення під ним. При деактивації меню екран автоматично відновлюється. Це винятково зручно, наприклад, з екранами редагування даних. Тут можна в будь-який момент натисканням будь-який попередньо закріпленої клавіші викликати меню на екран, зробити необхідний вибір і повернутися назад.
Усі види меню допускають роботу з мишкою, а так само вибір за першою буквою елемента меню. При цьому, якщо встановлено команду SET CONFIRM OFF, натискання клавіші з першою буквою негайно спричинить і вибір даного пункту. Якщо встановлено команду SET CONFIRM ON, то буде потрібно підтвердження натисканням клавіші Enter/Space.
Коли деякі пункти меню починаються на ту саму букву, це може бути незручно. У такому випадку можна буде призначити "гарячі" клавіші. Якщо в рядок меню включені символи "\<", то символ, що коштує праворуч від них, буде виділений кольором. Натискаючи клавішу з цим символом, можна зробити вибір у меню, причому без натискання Enter незалежно від команди SET CONFIRM. Якщо пункт меню починається із символу " \",він буде відображатися на екрані приглушеним кольором і не буде вибиратися (курсор на ньому не фіксується). Якщо пункт (тільки в POPUP меню) складається з двох символів "\-", то йому в меню буде відповідати горизонтальна лінія. Використання таких символів дозволяє видимо (зрительно - рос.) групувати пункти меню, розділяючи їх горизонтальними лініями ("\-"), і навіть давати їм свої підзаголовки("\").
У FOXPRO є дві альтернативні технології побудови меню -
концепція, що продовжується з попередні версії СКБД FoxBASE-2.1, і концепція, яка позичена із СКБД dBASE IY. Найважливіше ідейне розходження може бути відображено термінами "меню-програма" і "меню-об'єкт". Fox-меню є частиною програми, де воно і створюється.
Fox-меню завжди виробляє числові перемінні, фіксуючі зроблений користувачем вибір. Ці перемінні аналізуються далі в програмі, звичайно в структурі DO CASE...ЕNDCASE. Для підтримки можливості постійного повернення воно або команда активації меню, як правило міститься в цикл виду DO WHILE .T. ...ENDDO.
FOX-меню
У FOX-меню можливе створення трьох різних форм меню:
1.Меню з довільно розташованими елементами(меню з підсвічуванням елементів - LIGHTBAR-меню).
2.Вертикальне ("спливаюче"- POPUP-меню).
3.Дворівневе меню (PULLDOWN-меню).
Меню першого типу одночасно визначається і використовується. У меню другого і третього типу процес визначення форми і змісту меню відділений від його використання, що більш зручно.
LIGHTBAR-меню
Для створення такого меню використовуються команди:
Команда
@Y,X PROMTRT <вирс1> [MESSAGE<вирс2>]
видає в позиції Y,X рядок меню (<вирс1>). Інформативність меню може бути посилена включенням у команду фрази MESSAGE(<вирс2>). Тоді в останньому або визначеному командою SET MESSAGE рядку екрана виникне додаткове повідомлення(<вирс2>). Саме меню складається з ряду (до 128) команд PROMPT, що пред'являють у заданих позиціях екрана рядки меню. Переміщення усередині меню користувач здійснює за допомогою натискання клавіш зі стрільцями, причому активний в даний момент рядок меню виділяється контрастним зображенням. Вибір необхідної позиції меню здійснюється за допомогою натискання клавіш Enter і Spase.
До аналогічних результатів веде натискання клавіші, що відповідає найпершому символові з необхідної позиції меню. Для цього зручно, наприклад, пронумерувати всі пункти меню.
Команда
MENU TO < перемінна >
здійснює запам'ятовування цифри, що відповідає порядковому номеру обраного рядка PROMPT у деякої перемінної. Тут мається на увазі номер команди в тексті програми (серед інших команд PROMPT, що відносяться до даного меню), а не номер її позиції на екрані. Натискання клавіші Escape також волоче вихід з меню з занесенням нуля в <перемінну>.
Команда
SET MESSAGE TO [<вир> [LEFT/RIGHT/CENTER]]
застосовується, щоб у рядку <вир> вікна/екрана вивести додаткове повідомлення до пункту меню, на якому коштує курсор, ліворуч, праворуч або в центрі рядку (LEFT,RIGHT або CENTER). У такому меню повинна бути опція MESSAGE з <вир>. Команда SET MESSAGE TO без параметра направляє повідомлення в останній рядок екрана. Команда діє як у Fox-меню, так і в dBASE-меню, але в останньому випадку MESSAGE-повідомлення центрується автоматично.
Приклад
Побудуємо меню з пунктами "Кінець роботи", "Доповнення даних", "Коректування", "Печатка даних" і видачею додаткових повідомлень "Уключите принтер" при виборі позиції меню "Печатка даних" і "Вихід із системи" при виборі позиції кінець роботи".
CLEAR
SET MESSAG TO 16 CENTER
@ 5,31 SAY 'МЕНЮ СИСТЕМИ: '
@ 7,31 PROMPT 'Кінець роботи ' MESSAGE 'Вихід із системи'
@ 9,31 PROMPT 'Доповнення даних'
@ 11,31 PROMPT 'Коректування '
@ 13,31 PROMPT 'Печатка даних ' MESSAG 'Уключите принтер'
MENU TO R
SET MESSAG TO
У прикладі додаткові повідомлення будуть виведені в центрі 16 рядка.
При виборі користувачем рядка КІНЕЦЬ РОБОТИ перемінна R одержить значення 1, при виборі рядка ДОПОВНЕННЯ ДАНИХ-2 і т.д.
Таке меню можна розташувати не тільки вертикально, але і горизонтально і як завгодно. Більш того можна запрограмувати динамічне меню (з числом рядків, що змінюється, і їхнім умістом), адже повідомлення в рядку PROMPT, т.е.<вир1>,можуть бути і перемінними.
Приклад:
use ccc
clear
a=1
set confirm off
@ 15,15 Prompt 'Перегляд'
@ 18,15 Prompt 'Очищення' message 'Команда clear'
menu to a
do case
case a=1
browse
case a=2
clear
endcase