Metodichka (663495), страница 2
Текст из файла (страница 2)
позиции Y,X строку меню и дополнительное сообщение,
если указано MESSAGE, в строке заданной командой
SET MESSAGE .
MENU TO - запоминает цифру, соответствующую выбору.
PULLDOWN - меню (двухуровневое меню) использует команды
MENU BAR ,
BAR-меню, задавая их как элементы первого столбца
двумерного <массива >, во второй столбец заносятся
сообщения, N- общее число пунктов меню.
MENU , , - определяет содержание
вспомогательного вертикального меню (POPUP-меню)
READ MENU BAR TO , - активирует меню.
Пример
1) ********** LIGHTBAR МЕНЮ *******
SET TALK OFF
SET DATE BRITISH
USE KADR.DBF
DO WHILE .T.
CLEAR
P=1
@5,20 PROMPT “Редактирование данных ”
@7,20 PROMPT “Поиск данных ”
@9,20 PROMPT “Средняя заработная плата ”
@11,20 PROMPT “Конец работы ”
MENU TO P
DO CASE
CASE P=1
BROWSE
CASE P=2
CLEAR
F=SPACE(20)
@ 10,15 SAY “ Введите ФИО “ GET F
READ
LOCATE FOR FIO = F
IF !FOUND( )
@ 12,15 SAY “Запись нe найдена”
WAIT
EXIT
ELSE
DISPL
ENDIF
CASE P=3
CALCULATE SUM(SRZAR) TO SUMM
SUMM = SUMM/RECCOUNT( )
@ 12,15 SAY STR(SUMM)
WAIT
CASE P=4
EXIT
ENDDO
CLOSE ALL
2) ********** PULLDOWN МЕНЮ *******
SET MESSAGE ТО 15
DIMENSION a(5, 3) && задание массива, содержащего
а(1, 1) = 'Информация' && тексты пунктов горизонтального меню
а(2, 1) = 'Штатное расписание'
а(3, 1) = 'Список сотрудников'
а(4, 1) = 'Состояние'
а(5, 1) = 'Выход'
а(1, 2) = ' ' && тексты сообщений
а(2, 2) = 'Работа с таблицей должностей'
а(3, 2) = 'Работа с данными о сотрудниках'
а(4, 2) = 'Совместный просмотр штатного расписания и списка сотрудников' а(5, 2) = '3авершение работы'
DIMENSION b(2) && задание массивов для вложенных меню
b(1) = 'просмотр'
b(2) = 'поиск'
DIMENSION c(2)
с(1) = 'просмотр'
с(2) = 'поиск'
** образ меню** && определение меню
MENU BAR a, 5
MENU 2, b, 2
MENU 3, c, 2
g = 1 && номер пункта горизонтального меню
v = 1 && номер пункта вложенного меню
DO WHILE .T.
CLEAR
READ MENU BAR TO g, v && активация меню
DO CASE && обработка выбора
CASE g = 1
DO info
CASE g = 2 .AND. v = 1
DO p21
CASE g = 2 .AND. v = 2
DO p22
CASE g = 3 .AND. v = 1
DO p31
CASE g = 3 .AND. v = 2
DO p32
CASE g = 4
DO p4
CASE g = 5
CANCEL
ENDCASE
ENDDO
Меню - объекты являются независимыми объектами и могут вызываться из любого места прикладной системы. Обработка выбора из меню не требует введения переменных и организации циклов, дает возможность создавать меню из имен файлов и обладает другими преимуществами. Рассмотрим один из вариантов меню такого типа.
Вертикальное POPUP - меню создается с помощью следующих команд.
DEFINE РОРUР - определение меню,
ON SELECTION POPUP - реакция на выбор,
ACTIVATE POPUP - активация меню.
3) ********** POPUP - меню ****************
CLEAR
DEFINE POPUP mmenu MARGIN && определение главного меню
DEFINE BAR 1 OF mmenu PROMPT 'Информация' && определение пунктов
DEFINE BAR 2 OF mmenu PROMPT 'Штатное расписание'
DEFINE BAR 3 OF mmenu PROMPT 'Список сотрудников'
DEFINE BAR 4 OF mmenu PROMPT 'Состояние'
DEFINE BAR 5 OF mmenu PROMPT 'Выход'
ON SELECTION BAR 5 OF mmenu DEACTIVATE POPUP && обработка выбора
ON SELECTION BAR 1 OF mmenu DO info
ON SELECTION BAR 4 OF mmenu DO p4
ON BAR 2 OF mmenu ACTIVATE POPUP ww && выбор вложенных меню
ON BAR 3 OF mmenu ACTIVATE POPUP ss
DEFINE POPUP ww && определение вложенных меню
DEFINE BAR 1 OF ww PROMPT 'Просмотр'
DEFINE BAR 2 OF ww PROMPT 'Поиск'
ON SELECTION BAR 1 OF ww DO p21
ON SELECTION BAR 2 OF ww DO p22
ON SELECTION POPUP ww DO ww
DEFINE POPUP ss
DEFINE BAR 1 OF ss PROMPT 'Просмотр'
DEFINE BAR 2 OF ss PROMPT 'Поиск'
ON SELECTION BAR 1 OF ss DO p21
ON SELECTION BAR 2 OF ss DO p22
ON SELECTION POPUP ss DO ss
ACTIVATE POPUP mmenu && активация меню
ЗАДАНИЕ
Программу 1, представленную в виде ряда процедур, дополните организацией МЕНЮ одного из предложенных типов. В приложении дан полный текст программы с использованием POPUP-меню для выбора процедур.
8.ИЗОБРАЗИТЕЛЬНЫЕ СРЕДСТВА
Из большого списка возможностей рассмотрим лишь некоторые
1. Построение рамки
@ ТО [DOUBLE / PANEL
COLOR / COLOR SCHEME
В указанных координатах строится рамка, ограниченная двойной линией (DOUBLE), с сплошным заполнением (PANEL) и желаемого цвета.
2. Управление цветом
Обозначения цветов:
черный N | желтый GR+ | бирюзовый BG | коричневый GR |
белый W | зеленый G | лиловый RB | красный |
Команда
SET COLOR TO [[,] [,] [,]]
- устанавливает цвета для основного текста, для вывода сообщений,
рамки за пределами используемой области и фона для основных и
дополнительных сообщений. Цвет текста и цвет фона под ним
образуют цветовую пару (например, W/B или R+/ GR).
Цветовую схему можно определить в диалоге и сохранить в специальном файле и командой SET COLOR OF SCHEME TO []/[SCHEME]. Можно задать мерцание изображения: SET BLINK ON/OFF.
10. РАБОТА С НЕСКОЛЬКИМИ БАЗАМИ ДАННЫХ
В FoxPro допускается работа сразу со многими базами данных, и при этом можно устанавливать между ними разнообразные связи, которые позволяют синхронно перемещать указатели записей в таких связанных базах. База, в которой указатель движется произвольно, считается старшей, а база (базы), в которой указатель следует за указателем старшей базы, - младший. В старшей и младших базах должны быть совпадающие поля. Допускается сцепление одной базы с несколькими другими. Младшие базы, в свою очередь, могут быть связаны с базами следующего уровня и т.д.
Возможно установление двух типов связей между записями двух сцепленных баз данных. Связь типа одна_запись-к-одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если есть) остаются «не замеченными». Эта связь устанавливается командой SET RELATION. Связь типа одна_запись-ко-многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком (команды SET RELATION и SET SKIP TO).
ПОНЯТИЕ О РАБОЧИХ ОБЛАСТЯХ
В FoxPro обрабатывать сразу несколько файлов баз данных (до 25). Каждый такой файл типа DBF и все вспомогательные файлы (например, индексные) открываются в своей отдельной рабочей области. Переход из области в область осуществляется командой:
SELECT
Первые десять рабочих областей идентифицируются номерами 1-10 или буквами A – J. Области с 11-й по 25-ю обозначаются номерами или буквенно-цифровыми именами W11 – W25. Если в качестве параметра указать цифру 0, произойдет переход в первую свободную рабочую область. Кроме того, рабочие области и файлы базы данных могут идентифицироваться так называемыми псевдонимами. Псевдонимом области по умолчанию является само имя находящегося в ней файла базы данных.
Область, в которой в данный момент работает пользователь, называется активной рабочей областью, и в ней можно работать с находящейся здесь базой данных. В одной команде можно работать с полями других баз (открытых в других областях). В этом случае имя поля из неактивной базы – составное: имени поля предшествует имя рабочей области или псевдоним, разделенные знаком «точка»:
< рабочая область / псевдоним > .<имя поля>
Рабочая область в составном имени указывается любым разрешенным образом (буквой, именем ее базы данных, псевдонимом), но не номером. Номер может быть указан в команде SELECT и в функциях.
При входе в СУБД активизируется область 1 (или А), и, если пользователь работает только с одной базой, заботиться об открытии областей не нужно.
В команде USE можно одновременно указывать и область, в которой открывается база. Пример:
USE delivery IN b.
Однако переход в указанную область с помощью такой команды не происходит (для перехода необходимо воспользоваться командой SELECT).
ПРИМЕР РАБОТЫ С НЕСКОЛЬКИМИ БАЗАМИ ДАННЫХ
В НЕСКОЛЬКИХ ОБЛАСТЯХ
В приведенной ниже программе приводится пример работы с двумя базами данных, базой Поставщик (Delivery) и базой Поставка (Supply). Структура баз и назначение полей приводится в Приложении № 3. Данная программа позволяет по введенному коду товара найти всех поставщиков, поставляющих данный товар.
CLEAR
SET TALK OFF
SET EXACT OFF
SELE A
USE Supply
KOD=0
@ 1,2 SAY 'Введите код товара' GET KOD PICTURE'#####'
READ
LOCATE FOR indgoods = kod
IF !FOUND()
WAIT 'Такого кода нет'
RETURN
ENDIF
ind = inddel
SELE B
USE Delivery
LOCATE FOR inddel=ind
IF !FOUND ()
WAIT 'Такого поставщика нет'
RETURN
ENDIF
DISPL namedel, count, tel, A.namgoods, A.pricegds
CLOSE ALL
Связь вида одна_запись-к-одной
Команда
SET RELATION TO <ключ> INTO <область> [,<ключ > INTO < область >…] [ADDITIVE]
связывает указатель записей в активной рабочей области с указателем записей из других рабочих областей, которых указаны после слова INTO, по заданному общему полю (ключу). Единственное условие – файл базы данных, с которым устанавливается связь, должен быть проиндексирован по этому полю.
Пример
Связать базы данных SUPPLY.DBF и DELIVERY.DBF по полю INDDEL. По коду поставщика вывести список поставщиков и их реквизиты.
SET TALK OFF
CLEAR
SELE A
IF FILE ('Inddelivery.ind')
USE Delivery INDEX Inddelivery
ELSE
USE delivery
INDEX ON inddel TO Inddelivery
ENDIF
SELE B
USE Supply
SET RELATION TO inddel INTO A
DO WHILE .T.
kod=0
CLEAR
@ 12,23 TO 14,50 DOUBLE
@ 13,25 SAY 'Введите код товара' GET kod PICTURE '#####'
READ
LOCATE FOR indgoods = kod
IF !FOUND()
WAIT 'Такого товара нет'
LOOP
ENDIF
name=namgoods
IF kod <>0
SET FILTER TO indgoods = kod
BROWSE ;
TITLE ' Список поставщиков, поставляющих ' + name ;
FIELDS ;
INDDEL :H = ' Код поставщика ' ,;
A.NAMEDEL :H = 'Название поставщика ' ,;
A.ADRDEL :H = 'Адрес ' ,;
A.TEL :H = 'Телефон '
SET FILTER TO
ENDIF
IF LASTKEY()=27
EXIT
ENDIF
ENDDO
PACK
CLOSE ALL
В этой программе выводятся записи, в которых для каждого кода поставщика inddel из текущей базы данных Supply.dbf (открытой в области В) выводятся поля A.namedel (Название поставщика), A.adrdel (Адрес) и A.TEL (Телефон) из базы данных Delivery.dbf (открытой в области A).
В FoxPro имеется возможность устанавливать связи с несколькими базами одновременно. Если со старшим файлом, который уже связан с другим, необходимо связать некоторый третий (четвертый и т.д.), следует во все последующие команды SET RELATION включать слово ADDITIVE, которое обеспечит сохранение связей, установленных ранее.
Связь между всеми файлами разрывается командой SET RELATION TO без параметров. Связь с отдельным файлом в заданной - командой SET RELATION OF INTO .
Связь вида одна_запись-ко-многим
Команда SET SKIP TO [< область1 > [,< область2 >] … ]
устанавливает связь типа одна_запись-ко-многим между двумя или несколькими базами данных.
С каждой записью из старшей базы могут быть сцеплены несколько записей из младшей базы. Связь может быть установлена сразу с несколькими младшими базами, находящимися в указанных .
Прежде чем использовать команду SET SKIP TO, необходимо выполнить начальное сцепление вида одна_запись-к-одной командой SET RELATION. Удаление связи одна_запись-ко-многим осуществляется командой SET SKIP TO без параметров.
Пример
Установить связь между тремя базами данных. В программе используется
третья база Товаров (Goods.dbf), получаемая из БД Supply.dbf
SET TALK OFF
IF FILE ('Goods.dbf')
ERASE Goods.dbf
ENDIF
IF FILE ('Indnum.idx')
ERASE Indnum.idx
ENDIF