Файл: Особенности и примеры использования массивов при разработке программ.pdf
Добавлен: 28.03.2023
Просмотров: 140
Скачиваний: 2
Функция AEVENTS(ArrayName [, 0 | 1 | oEventObject]) формирует массив ArrayName, содержащий описание события и связанного с ним метода. Возвращает число связываний событий (связывание события объекта – это задание метода некоторого класса в качестве обработчика события).
Параметры:
0 – функция AEVENTS( ) возвращает одномерный массив из 3-х элементов, содержащий приведенные в табл. 3 значения.
Таблица 3
Элементы массива ArrayName, когда второй параметр равен 0
Элемент |
Что содержит |
Тип |
1 |
Объект-источник события |
Object |
2 |
Событие |
Character |
3 |
Тип события или как событие вызвано: |
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., если второй элемент – это источник события; |
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.