Delphi 6 программирование

         

ВАРИАНТНЫЕ МАССИВЫ



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


Содержание раздела