Главная / Банки и базы данных / Основы программирования на языке foxpro

Основы программирования на языке foxpro

ЛАБОРАТОРНАЯ РАБОТА № 1

1. ЦЕЛЬ РАБОТЫ

1. Изучение основных понятий и правил языка FoxPro.

2. Изучение принципов определения окон и меню в FoxPro.

2. ПЕРЕМЕННЫЕ И МАССИВЫ

2.1. Переменные

Переменная представляет собой ячейку временного хранения данных. Каждая переменная имеет собственное имя. В FoxPro переменной может быть присвоено значение любого допустимого типа данных. Однако при дальнейшем использовании переменной необходимо учитывать тип сохраняемого в ней значения. Прежде чем использовать переменную в программе, ей нужно присвоить значение. Например:

NFirst = 10

CName = "Иван"

NResult = 255 + nFirst

CName = "Иван" + alltrim(LastName)

2.1.1. Глобальные переменные

Глобальными переменными называются переменные или массивы, которые могут быть доступны из любой программы, которая выполняется в текущем сеансе работы с FoxPro. Такие переменные должны быть объявлены до присвоения им значения с помощью команды:

PUBLIC MemVarList

2.1.2. Локальные переменные

Команда PRIVATE позволяет создавать локальные переменные или массивы, доступные в пределах программы, в которой объявлена переменная, а также во всех процедурах и функциях, вызываемых из нее. Синтаксис команды:

PRIVATE MemVarList

Переменные объявленные командой LOCAL, доступны только в пределах программы, в которой объявлена переменная, и не доступны в процедурах и функциях, которые вызываются из нее. Синтаксис команды:

LOCAL MemVarList

2.2. Массивы

Команда DECLARE (синоним – DIMENSION) позволяет создавать одно — и двумерные массивы:

DECLARE [Array] ArrayName1(NRows1 [, NColumns1])

[, ArrayName2(NRows2 [, NColumns2])] …

Нумерация индексов массива начинается с 1.

Для объявления глобальных или локальных массивов используются соответственно команды:

PUBLIC [Array] ArrayName1(NRows1 [, NColumns1])

[, ArrayName2(NRows2 [, NColumns2])] …

LOCAL [Array] ArrayName1(NRows1 [, NColumns1])

[, ArrayName2(NRows2 [, NColumns2])] …

3. ПРОЦЕДУРЫ И ФУНКЦИИ

3.1. Процедуры

Синтаксис процедур в FoxPro имеет следующий вид:

PROCEDURE ProcedureName

Commands

ENDPROC

Можно хранить каждую процедуру в отдельном файле или объединять несколько процедур в одном файле. Для выполнения процедуры используется команда:

DO ProcedureName

При этом FoxPro осуществляет поиск процедуры в следующем порядке:

1) в файле, из которого осуществляется вызов процедуры;

2) в процедурном файле, который указан в команде SET PROCEDURE TO;

3) просматриваются программы в соответствии с иерархией вызовов, начиная с последней вызвавшей программы и заканчивая основной программой;

4) ищется отдельный файл, который имеет такое же имя, как и имя вызываемой процедуры.

При вызове процедуры можно указать имя файла, в котором содержится процедура:

DO ProcedureName IN ProgramName

3.2. Функции

Синтаксис функции в языке FoxPro имеет следующий вид:

FUNCTION FunctionName

Commands

ENDFUNC

В отличие от процедуры, функция может использоваться в выражениях аналогично стандартным функциям FoxPro. Поиск функции осуществляется в таком же порядке, как и поиск процедуры.

3.3. Передача аргументов

Как процедуры, так и функции могут иметь параметры, которые объявляются в них командой

PARAMETERS ParameterList

Эта команда должна быть первой командой процедуры/функции, если они используют параметры. Каждый элемент списка разделяется запятой.

При вызове процедуры или функции, содержащей параметры, необходимо использовать следующий вариант команды DO:

DO ProcedureName WITH ParameterList

По умолчанию аргументы передаются в процедуру по ссылке. В этом случае передается указатель аргумента, и поэтому изменение значений параметров в вызываемой процедуре приводит к изменению значений аргументов в вызывающей программе.

При передаче по значению в процедуру передается копия исходного значения аргумента. В вызывающей программе значение аргумента не изменится. Для передачи аргументов в процедуру по значению их необходимо заключить в круглые скобки в списке параметров.

По умолчанию в функцию параметры передаются по значению. Если требуется передавать аргументы по ссылке, используется команда

SET UDFPARMS TO VALUE | REFERENCE

Где VALUE – режим передачи аргументов по значению, а REFERENCE – режим передачи по ссылке.

3.4. Возврат из процедур и функций

Для завершения процедуры или функции используется команда

RETURN [EExpression | TO MASTER | TO ProcedureName]

Здесь EExpression выражение, которое возвращается в вызывающую программу. TO MASTER возвращает управление вызывающей программе самого высокого уровня. TO ProcedureName возвращает управление указанной процедуре (программе).

4. ОКНА

4.1. Определение пользовательского окна

Вид окна определяется следующей командой:

DEFINE WINDOW WindowName1

FROM NRow1, NColumn1 TO NRow2, NColumn2

| AT NRow3, NColumn3 SIZE NRow4, NColumn4

[IN [WINDOW] WindowName2 | IN SCREEN | IN DESKTOP] [FONT CFontName [, NFontSize]] [STYLE CFontStyle] [FOOTER CFooterText] [TITLE CTitleText] [DOUBLE | PANEL | NONE | SYSTEM | CBorderString] [CLOSE | NOCLOSE] [FLOAT | NOFLOAT] [GROW | NOGROW] [MINIMIZE | NOMINIMIZE] [ZOOM | NOZOOM] [ICON FILE FileName1] [FILL CFillCharacter | FILL FILE FileName2] [COLOR SCHEME NSchemeNumber | COLOR ColorPairList]

Здесь WindowName1 – имя окна. FROM NRow1, NColumn1 TO NRow2, NColumn2 – координаты левого верхнего и нижнего правого углов окна. AT NRow3, NColumn3 SIZE NRow4, NColumn4 – координаты левого верхнего угла, высота и ширина окна. IN [WINDOW] WindowName2 | IN SCREEN | IN DESKTOP помещает определяемое окно в родительском окне WindowName2, в главном окне FoxPro (используется по умолчанию) или на рабочем столе. FONT CFontName [, NFontSize] – тип и размер шрифта. STYLE CFontStyle – стиль шрифта. FOOTER CFooterText – нижний колонтитул. TITLE CTitleText – заголовок. DOUBLE | PANEL | NONE | SYSTEM определяет рамку окна. CLOSE | NOCLOSE – возможность закрытия окна. FLOAT | NOFLOAT – возможность перемещения окна. GROW | NOGROW – возможность изменения размеров окна. MINIMIZE | NOMINIMIZE – возможность минимизации окна. ZOOM | NOZOOM – возможность разворачивания окна. ICON FILE FileName1 – иконка окна (файл с расширением ico). FILL CFillCharacter | FILL FILE FileName2 – фон окна заполняется символом CFillCharacter или содержимым bmp-файла FileName2. COLOR SCHEME NSchemeNumber | COLOR ColorPairList – цвета окна задаются номером цветовой схемы или набором цветовых пар.

4.2. Использование пользовательских окон

Следующая команда отображает и активирует одно или несколько определенных пользователем окон или системных окон FoxPro:

ACTIVATE WINDOW WindowName1 [, WindowName2 …] | ALL

[IN [WINDOW] WindowName3 | IN SCREEN] [BOTTOM | TOP | SAME] [NOSHOW]

Здесь WindowName1 [, WindowName2 …] | ALL – имена окон, предназначенных для активации, или все определенные окна. IN [WINDOW] WindowName3 | IN SCREEN активирует окно в родительском окне или в главном окне FoxPro. BOTTOM | TOP | SAME – предложения BOTTOM и TOP позволяют отобразить активируемые окна под/над уже имеющимися на экране (по умолчанию TOP). SAME – поместить и активировать окно в то же место, где оно было ранее. NOSHOW – окно активируется, но не отображается.

Перед активированием определяемые пользователем окна должны быть созданы командой DEFINE WINDOW. Вывод всегда направляется в окно, активированное последним.

Команда

DEACTIVATE WINDOW WindowName1 [, WindowName2 …] | ALL

Деактивирует указанные окна. Деактивация текущего окна очищает его содержимое и удаляет с экрана (при этом описание окна остается в памяти), а вывод направляется в окно, которое было активным до него. Если таких окон нет, то вывод направляется в главное окно FoxPro. Удаление окон с экрана и из памяти осуществляется командой

RELEASE WINDOWS WindowName1 [, WindowName2 …] | ALL

Пример создания и использования пользовательского окна:

DEFINE WINDOW MyWindow FROM 5, 20 TO 15, 100 IN SCREEN;

FONT "Times New Roman" , 14 STYLE "BIU"

TITLE "Мое окно";

DOUBLE CLOSE FLOAT GROW MINIMIZE ZOOM;

&& …

ACTIVATE WINDOW MyWindow

WAIT "Через 5 секунд окно закроется" TIMEOUT 10

RELEASE WINDOW MyWindow

5. МЕНЮ

5.1. Определение строки меню

Горизонтальное меню создается с помощью команды

DEFINE MENU MenuName [BAR [AT LINE NLineNumber]] [IN [WINDOW] WindowName | IN SCREEN] [KEY KeyLabel] [MESSAGE MessageText] [NOMARGIN] [COLOR SCHEME NSchemeNumber | COLOR ColorPairList]

Здесь MenuName – имя меню. BAR [AT LINE NLineNumber] – меню имеет свойства строки меню FoxPro, располагается в строке с номером NLineNumber. KEY KeyLabel – назначение клавиши (или комбинации клавиш) для активации меню. MESSAGE MessageText – сообщение, отображаемое при активации меню. NOMARGIN – подавление вывода пробелов слева и справа от каждого пункта меню.

Каждый пункт меню описывается командой

DEFINE PAD PadName1 OF MenuName PROMPT CMenuItemText

[AT NRow, NColumn] [BEFORE PadName2 | AFTER PadName3] [KEY KeyLabel] [SKIP [FOR LogicExpression]] [MESSAGE MessageText] [COLOR SCHEME NSchemeNumber | COLOR ColorPairList]

Здесь PadName1 – имя пункта меню. MenuName – имя строки меню. PROMPT CMenuItemText – текст пункта меню. Можно создать «Горячую клавишу», поместив ‘<‘ перед нужным символом. AT NRow, nColumn – координаты пункта меню (по умолчанию 0,0). BEFORE PadName2 | AFTER PadName3 – если предложение AT отсутствует, то предложения BEFORE или AFTER определяют фактическое расположение создаваемого пункта (соответственно до или после) относительно указанного. SKIP [FOR LogicExpression]SKIP безусловно запрещает выбор и активацию создаваемого пункта меню, а SKIP FOR LogicExpression Запрещает или разрешает доступ к пункту меню в зависимости от значения LogicExpression. Если значение истинно, то доступ запрещен, если ложно – разрешен.

Активировать строку меню можно с помощью команды

ACTIVATE MENU MenuName [NOWAIT] [PAD PadName]

Здесь NOWAIT – продолжение выполнения программы после отображения и активации меню. По умолчанию выполнение программы приостанавливается до тех пор, пока не будет активирован один из пунктов меню. PAD PadName – при активации меню будет выбран пункт меню PadName (по умолчанию – первый).

Деактивация строки меню осуществляется с помощью команды

DEACTIVATE MENU MenuName1 [, MenuName2 …] | ALL

Команда DEACTIVATE MENU удаляет активную строку меню или набор строк меню из главного окна FoxPro или пользовательского окна. При этом определения строк меню остаются в памяти. Меню могут быть активированы командой ACTIVATE MENU. Удаление меню из памяти производится командой

RELEASE MENUS MenuName1 [, MenuName2 …] | ALL

5.2. Выбор и активация пунктов строки меню

Для определения реакции на выбор пункта строки меню используется команда

ON PAD PadName OF MenuName1

[ACTIVATE POPUP PopupName | ACTIVATE MENU MenuName2]

Где ACTIVATE POPUP PopupName | ACTIVATE MENU MenuName2 – активация Popup-меню или строки меню.

Реакция на активацию пункта строки меню определяется с помощью команды

ON SELECTION PAD PadName OF MenuName [Command]

Где Command – обычно команда DO, выполняющая какую-либо процедуру.

Реакция на активацию любого пункта строки меню определяется с помощью команды

ON SELECTION MENU MenuName | ALL [Command]

Пример определения строки меню

DEFINE MENU MyMenu IN WINDOW MyWindow;

NOMARGIN COLOR SCHEME 13

DEFINE PAD mnuFile OF MyMenu PROMPT "<Файл"

DEFINE PAD mnuAbout OF MyMenu PROMPT "<?"

&& …

ACTIVATE MENU MyMenu NOWAIT

5.3. Определение Popup-Меню

Всплывающее меню или Popup-меню создается с помощью команды

DEFINE POPUP PopupName

[FROM NRow1, NColumn1 [TO NRow2, NColumn2]] [IN [WINDOW] WindowName | IN SCREEN] [KEY KeyLabel] [MARGIN] [MESSAGE MessageText] [MOVER] [MULTISELECT] [PROMPT FIELD Expression | PROMPT FILES [LIKE Template]|

PROMPT STRUCTURE] [RELATIVE] [SCROLL] [COLOR SCHEME NSchemeNumber | COLOR ColorPairList]

Здесь PopupName – имя меню. FROM NRow1, NColumn1 [TO NRow2, NColumn2] – координаты левого верхнего угла и правого нижнего. IN [WINDOW] WindowName | IN SCREEN – пользовательское окно или главное окно FoxPro. MARGIN помещает слева и справа от каждой опции меню по одному пробелу. MOVER – порядок следования опций в меню можно менять. MULTISELECT – возможность выбора сразу нескольких опций. PROMPT FIELD Expression – определение поля (полей) открытой базы данных в качестве опций меню. Выражение Expression может содержать комбинацию из имен полей, выражений и функций пользователя, соединенных символом «+». PROMPT FILES [LIKE Template] позволяет отобразить имена файлов, доступных на диске, в качестве опций меню. Предложение LIKE Template позволяет поместить в меню только файлы, соответствующие шаблону. Например, PROMPT FILES LIKE D:Work*.prg. PROMPT STRUCTURE отображает в меню имена полей согласно структуре текущей базы данных. RELATIVE – управление порядком следования опций в меню. SCROLL осуществляет скроллинг, если все опции не помещаются в окне меню.

Для создания опций Popup-меню, описанного в команде DEFINE POPUP, используется команда

DEFINE BAR NMenuItemNumber1 | SystemItemName

OF PopupName Prompt CMenuItemText

[BEFORE NMenuItemNumber2 | AFTER NMenuItemNumber3] [KEY KeyLabel] [MESSAGE MessageText] [SKIP [For LogicExpression]] [COLOR SCHEME NSchemeNumber | COLOR ColorPairList]

Здесь NMenuItemNumber1 – номер опции. PopupName – имя меню. CMenuItemText – текст создаваемой опции. BEFORE NMenuItemNumber2 | AFTER NMenuItemNumber3 – местоположение создаваемой опции относительно других опций. Можно использовать только при включенном предложении RELATIVE в команде DEFINE POPUP.

5.4. Выбор и активация пунктов Popup-меню

Для определения реакции на выбор опции Popup-меню используется команда

ON BAR NMenuItemNumber OF PopupName1

[ACTIVATE POPUP PopupName2 | ACTIVATE MENU MenuName]

Реакция на активацию опции Popup-меню определяется с помощью команды

ON SELECTION BAR NMenuItemNumber OF PopupName [Command]

Реакция на активацию любой опции Popup-меню определяется с помощью команды

ON SELECTION POPUP PopupName | ALL [Command]

Пример определения Popup-меню

DEFINE POPUP pmnuFile COLOR SCHEME 13

DEFINE BAR 1 OF pmnuFile PROMPT "<Открыть"

DEFINE BAR 2 OF pmnuFile PROMPT "<Закрыть"

DEFINE BAR 3 OF pmnuFile PROMPT "Вы<ход"

DEFINE POPUP pmnuAbout COLOR SCHEME 13

DEFINE BAR 1 OF pmnuAbout PROMPT "О <программе…"

ON PAD mnuFile OF MyMenu ACTIVATE POPUP pmnuFile

ON PAD mnuAbout OF MyMenu ACTIVATE POPUP pmnuAbout

6. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ

Написать две процедуры в отдельных файлах (файлы с расширением PRG): первая создает окно для ввода значений элементов массива, после выхода из процедуры окно удаляется из памяти; вторая находит максимальное, минимальное и среднее значение массива и выводит эти значения в отдельном окне (окно также создается и уничтожается внутри процедуры).

В основной программе создать окно со строкой меню, содержащей два пункта: «Файл» и «Выполнить». При активации пункта меню «Файл» активируется Popup-меню, содержащее опцию «Выход» – выход из программы. При активации пункта меню «Выполнить» активизируется Popup-меню, содержащее имена программ, написанных ранее. При выборе опции этого меню выполняется соответствующая процедура.

7. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Как необходимо объявить переменную, чтобы она была доступна для всех вызываемых процедур и функций?

2. Какими способами можно вызвать процедуру, определенную в отдельном файле?

3. Что значит передача параметров по значению и по ссылке?

4. Можно ли активировать окно после команды RELEASE WINDOW?

5. Как определить реакцию на активацию любого пункта строки меню?

6. Как определить реакцию на активацию любой опции Popup-меню?

7. Где, на ваш взгляд, будет размещена строка меню, если при определении ее в команде DEFINE MENU опустить предложение IN…?

Оставить комментарий