10.4.
ВАРИАНТНЫЕ МАССИВЫ
Значением
варианта может быть
массив данных, такие варианты называются вариантными массивами. (Не путайте
с обычным или динамическим массивом,
элементами
которого являются варианты!)
Значениями элементов вариантного массива могут быть любые допустимые для варианта
значения, кроме строк varstring. Значениями элементов вариантного массива могут
быть и варианты, а это значит, что в таком массиве могут одновременно храниться
данные разных типов (и в том числе строки). Например:
var
V: Variant;
begin
//
Создаем одномерный
вариантный массив с 5 элементами:
V := VarArrayCreate([0,
4], varVariant);
//
Наполняем его:
V[0] := 1;
//Тип целый
V[1] := 1234.5678;
//Тип
вещественный
V[2] := 'Hello world';
//Строковый
тип
V[3] := True;
//Логический
тип
//Пятым элементом исходного
массива сделаем еще один массив:
V[4] := VarArrayOf([1, 10,
100, 1000]);
Caption := V[2];
//Hello
world
IbOutput.Caption := IntToStr(V[4][2]);
//200
end;
Все действия с вариантными массивами
осуществляются с помощью следующих процедур и функций:
Таблица 10.3. Подпрограммы
для работы с вариантными массивами
function VarArrayCreate(const
Bounds: array of Integer; VarType:
Integer): Variant;
|
Создает вариантный массив из
элементов типа VarType с количеством и границами измерений, указываемых
параметром Bounds
|
function VarArrayDimCount(const
A: Variant): Integers;
|
Возвращает количество измерений
вариантного массива А или 0, если А не массив
|
function VarArrayHighBound(const
A: Variant; Dim: Integer):
Integer;
|
Возвращает верхнюю границу
индекса вариантного массива А по измерению Dim
|
function VarArrayLock(var A:
Variant): Pointer;
|
Блокирует массив (предотвращает
его возможные изменения размеров) и возвращает указатель на связанные
с ним данные
|
function VarArrayLowBound(const
A: Variant; Dim: Integer):
Integers;
|
Возвращает нижнюю границу индекса
вариантного массива А по измерению Dim
|
function VarArrayOf(const Values:
array of Variant): Variants;
|
Создает одномерный вариантный
массив по перечню значений, содержащихся в открытом массиве Values. Нижняя
граница индексов вариантного массива в этом случае равна 0
|
procedure VarArrayRedim(var
A:
Variant; HighBound: Integer)
;
|
Изменяет верхнюю границу индекса
вариантного
массива А на величину HighBound.
Вызов про
цедуры игнорируется, если массив
был заблоки
рован функцией VarArrayLock
|
function VarArrayRef(const
A:
Variant): Variants;
|
Возвращает ссылку на вариантный
массив. Ис
пользуется при обращении к
API-функциям
|
procedure VarArrayUnlock(var
A:
Variant)
|
Отменяет действие функции VarArrayLock
|