Файл: Особенности и примеры использования массивов при разработке программ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 140

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Функция AEVENTS(ArrayName [, 0 | 1 | oEventObject]) формирует массив ArrayName, содержащий описание события и связанного с ним метода. Возвращает число связываний событий (связывание события объекта – это задание метода некоторого класса в качестве обработчика события).

Параметры:

0 – функция AEVENTS( ) возвращает одномерный массив из 3-х элементов, содержащий приведенные в табл. 3 значения.

Таблица 3

Элементы массива ArrayName, когда второй параметр равен 0

Элемент

Что содержит

Тип

1

Объект-источник события

Object

2

Событие

Character

3

Тип события или как событие вызвано:
0 – системный;
1 – вызвано функцией RAISEEVENT( )
2 – вызов метода

Integer

Если событие является свойством, значение третьего элемента равно 1 или 2. Причем оно равно 2, если значение свойства устанавливается.

1 – функция AEVENTS( ) возвращает двумерный массив с 4-я столбцами, содержащий информацию о сообщении Windows. Массив содержит одну строку для каждого связывания. Элементы строки массива описаны в табл.4.

Таблица 4

Элементы массива ArrayName, когда второй параметр равен 1

Элемент

Что содержит

Тип

1

hWnd

Integer

2

Сообщение Windows

Integer

3

Ссылка или идентификатор

Ссылка на объект

4

Имя связанного метода

Character

oEventObject – ссылка на объект, содержащий метод, установленный в качестве обработчика события (привязанный к событию). При задании параметра AEVENTS( ) возвращает двумерный массив с 5-ю столбцами, содержащими приведенный в табл. 5 сведения.

Таблица 5

Содержимое строки массива ArrayName, когда задан параметр oEventObject

Номер
столбца

Что содержит

Тип

1

.T., если второй элемент – это источник события;
.F., если второй элемент – это идентификатор события

Logical

2

Источник события, если oEventObject – это идентификатор события, или идентификатор события, если oEventObject – это источник события

Ссылка на объект

3

Событие

Character

4

Метод, связанный с событием

"

5

Флаг функции BINDEVENT( )

Integer


Массив ArrayName не изменяется (или не создается), если не существует указанного события; второй параметр равен 0, а AEVENTS( ) вызывается не в момент возникновения события или oEventObject не имеет связанных событий.

Пример. Создается класс OneButtonForm, содержащий один объект – кнопку. Обработчик события Click этой кнопки закрывает, выполняя метод Release, форму. С событием Click кнопки CommandClose формы связывается метод SayWord объекта oHandler типа Inf. При возникновении события Click форма закрывается, однако прежде выполняется метод SayWord: вызывается функция MESSAGEBOX( ), сообщающая "Форма <имя формы> будет закрыта!".

&& Идентификаторы объектов объявляем как PUBLIC

public oForm, oHandler

&& Создаем объект класса OneButtonForm и определяем его свойства:

&& размеры, автоматическое центрирование и видимость

oForm = CreateObject("OneButtonForm")

with oForm

.Width = 300

.Height = 100

.AutoCenter = .T.

.Visible = .T.

&& Определяем свойства кнопки формы: заголовок, размеры и координаты

&& Кнопка в форме центрируется как по горизонтали, так и по вертикали

with .CommandClose

.Caption = "Закрыть"

.Width = 84

.Height = 27

.Left = (oForm.Width – .Width) / 2

.Top = (oForm.Height – .Height) / 2

endWith

endWith

&& Создаем объект типа Inf

oHandler = CreateObject("Inf")

&& Связываем событие Click объекта oForm.CommandClose

&& с процедурой SayWord объекта oHandler

BindEvent(oForm.CommandClose, "Click", oHandler, "SayWord")

&& Формируем массив arrayEvent, содержащий информацию о связанном событии

Aevents(arrayEvent, oHandler)

&& Создаем класс OneButtonForm – форму с одной кнопкой

define class OneButtonForm as Form

add object CommandClose as CommandButton

&&

&& Обработчик события Click кнопки формы

procedure CommandClose.Click

ThisForm.Release

endProc

endDefine

&& Создаем класс Inf, процедура SayWord которого будет выполняться

&& при нажатии на кнопку "Закрыть" формы OneButtonForm

define class Inf as Custom

procedure SayWord

MessageBox("Форма " + _Screen.ActiveForm.Name + " будет закрыта!")

endProc

endDefine

После запуска программы и нажатия на кнопку "Закрыть" на экране появятся 2 окна (рис. 1).

Рис. 1. Вызвана процедура SayWord

Массив arrayEvent, сформированный AEVENTS( ), содержит следующие данные:

.T. (Object) CLICK SAYWORD 0

Функция

AFIELDS(ArrayName [, nWorkArea | cTableAlias])

размещает в массиве ArrayName информацию о структуре таблицы и возвращает число полей в таблице. Результирующий массив содержит 18 столбцов. Число строк массива равно числу полей таблицы.

Параметры:

nWorkArea – номер рабочей области исследуемой таблицы.


cTableAlias – псевдоним исследуемой таблицы.

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

Содержимое каждой строки массива описано в табл. 6; значения в столбцах 10 – 16 появляются только в первой строке массива.

Таблица 6

Содержимое строки массива, формируемого AFIELDS( )

Номер столбца

Что содержит

Тип данных

1

Имя поля

Character

2

Символ, характеризующий тип поля (C – Character, D – Date, L – Logical, M – Memo, N – Numeric, F – Float, I – Integer, B – Double, Y – Currency, T – DateTime, G – General, Q – Varbinary, V – Varchar and Varchar (Binary), W – Blob)

"

3

Длина поля

Numeric

4

Число десятичных знаков

"

5

Разрешение для NULL-значения

Logical

6

Запрет на изменение кодовой страницы

"

7

Выражение проверки поля

Character

8

Текст проверки поля

"

9

Значение поля по умолчанию

"

10

Выражение проверки таблицы

"

11

Текст проверки таблицы

"

12

Длинное имя таблицы

"

13

Выражение триггера вставки

"

14

Выражение триггера обновления

"

15

Выражение триггера удаления

"

16

Комментарий таблицы

"

17

Следующее значение автоматически увеличиваемого поля

Numeric

18

Шаг для автоматического увеличения значения поля

"

Функция AFONT(ArrayName [, cFontName [, nFontSize | nFontCharSet [, nFlags]]]) помещает информацию о доступных шрифтах в массив ArrayName. Возвращает .T., если массив благополучно сформирован, или .F. – в противном случае. Формируемый массив является одномерным. Если задан только параметр ArrayName, то массив заполнится именами доступных шрифтов.

Параметры:

cFontName – имя шрифта, информация о котором помещается в массив. Если шрифт недоступен, то AFONT( ) вернет .F. Если шрифт может принимать дискретные размеры (8, 10, …), то массив будет заполнен возможными значениями размеров шрифта, число элементом массива будет равно числу возможных размеров шрифта. Если шрифт поддерживает дробные размеры, то массив будет состоять из 1-го элемента, равного –1. Тип параметра – Character.


nFontSize – задает размер шрифта cFontName (nFlags отсутствует или равен нулю). Если указанный параметром nFontSize размер шрифта возможен, то массив будет иметь 1 равный .T. элемент и AFONT( ) вернет .T. Если же невозможен, то массив сформирован не будет и AFONT( ) вернет .F. Если параметр отсутствует или равен –1, то массив в случае дискретного шрифта cFontName заполнится возможными значениями его размеров, в случае недискретного в массиве будет 1 равный –1 элемент. Тип параметра – Numeric.

nFontCharSet – задает набор символов шрифта cFontName (nFlags отличен от нуля). Если указанный параметром nFontCharSet набор символов возможен, то массив будет иметь 1 равный .T. элемент и AFONT( ) вернет .T. Если же невозможен, то массив сформирован не будет и AFONT( ) вернет .F. Тип параметра – Numeric.

nFlags – если отсутствует или равен 0, то третий параметр интерпретируется как nFontSize, и – как nFontCharSet – в противном случае. Если nFlags отличен от нуля и nFontCharSet равен –1, то массив заполняется возможными наборами шрифтов.

Пример. Выводятся имена всех дискретных шрифтов. Для первого дискретного шрифта выводятся допустимые размеры и номера доступных наборов символов.

&& Помещаем имена доступных шрифтов в массив fontNamesArray

if Afont(fontNamesArray) then

firstDFont = .T.

for fontNumber = 1 to Alen(fontNamesArray)

&& Имя шрифта

fontName = fontNamesArray(fontNumber)

&& Помещаем информацию о возможных размерах шрифта в массив fontSizeArray

Afont(fontSizeArray, fontName)

if fontSizeArray(1) != –1 then

&& Печатаем имя дискретного шрифта

? fontName

if firstDFont then

firstDFont = .F.

&& Для первого дискретного шрифта массива fontNamesArray

&& печатаем возможные размеры

display memory like fontSizeArray

&& Затем печатаем номера возможных наборов символов

Afont(fontSetArray, fontName, –1, 1)

display memory like fontSetArray

endif

endif

endFor

endif

Возможный результат:

Courier

FONTSIZEARRAY

Priv

A

test

( 1)

N

10

( 10.00000000)

( 2)

N

12

( 12.00000000)

( 3)

N

15

( 15.00000000)

FONTSETARRAY

Priv

A

test

( 1)

N

204

( 204.00000000)

Fixedsys

FoxFont

FoxPro Window Font

MS Sans Serif

MS Serif

Small Fonts

System

Terminal

Функция AINS(ArrayName, nElementNumber [, 2]) вставляет в массив ArrayName элемент, если массив одномерный, или строку или столбец, если массив двумерный.


Добавление элемента (строки, столбца) не изменяет формы массива. При вставке элементы сдвигаются по направлению к концу массива последний элемент (строка, столбец) из массива выпадают. Новый элемент или элементы новой строки (столбца) имеют значения .F.

Возвращает 1, если действие выполнено, или 0 – в противном случае.

Параметр:

nElementNumber – задает положение вставляемого элемента (строки, столбца). В случае одномерного массива новый элемент вставляется перед элементом nElementNumber. В случае двумерного массива новая строка (столбец) вставляется перед строкой (столбцом) с номером nElementNumber. При таком способе вставки номер нового элемента (строки, столбца) равен nElementNumber.

2 – обеспечивает в случае двумерного массива вставку столбца. При отсутствии параметра вставляется строка.

Пример. В массив oneDArray вставляется элемент, а в массив twoDArray – строка, а затем столбец. Значения новых элементов выводятся на экран.

dimension oneDArray(7), twoDArray(3, 4)

if set("COMPATIBLE") = "ON" then

set compatible off

endif

store .T. to oneDArray, twoDArray

nElementNumber = 2

&& Вставка второго элемента в одномерный массив oneDArray

Ains(oneDArray, nElementNumber)

? oneDArray(nElementNumber) && Напечатает: .F.

&& Переходим в окне вывода на новую строку

?

&& Вставка второй строки в двумерный массив twoDArray

aIns(twoDArray, nElementNumber)

&& Выводим значения элементов во вставленной строке

for iCol = 1 to 4

?? twoDArray(2, iCol) && Напечатает: .F. .F. .F. .F.

endFor

?

&& Вставка второго столбца в двумерный массив twoDArray

Ains(twoDArray, nElementNumber, 2)

&& Выводим значения элементов во вставленном столбце

for iRow = 1 to 3

?? twoDArray(iRow, 2) && Напечатает: .F. .F. .F.

endFor

Функция AINSTANCE(ArrayName, cClassName) размещает в массиве ArrayName информацию об экземплярах класса cClassName, созданных функциями CREATEOBJECT( ) или NEWOBJECT( ). Возвращает число элементов в сформированном массиве.

В качестве имени класса может быть указано имя как базового класса, так и созданного пользователем. Имена базовых классов VFP см. в табл. 13.2.

Пример.

public oFormA, oFormB

oFormA = CreateObject("OneButtonForm")

oFormB = CreateObject("OneButtonForm")

oFormA.Show

&& Формируем массив arrayIns

Ainstance(arrayIns, "OneButtonForm")

wait arrayIns(1) + ', ' + arrayIns(2) window

&& Создаем класс OneButtonForm – форму с одной кнопкой

define class OneButtonForm as Form

endDefine

Сообщение WAIT WINDOW:

Функция ALANGUAGE(ArrayName, nType) формирует массив ArrayName, содержащий имена всех доступных в VFP команд, функция, базовых классов или DBC-событий. Содержание и форма результирующего массива определяются параметром nType.