Преобразование вариантов к данным других типов
При участии вариантов в выражениях, а также при присваивании их значений переменным других типов тип размещенных в варианте данных преобразуется по следующим правилам:
Здесь
К целым Отнесены varByte, varSmallInt, varlnteger/ varError;
К вещественным - varSingle, varDouble/ varCurrency;
К строковым -var String, varOleStr.
Подпрограммы для работы с вариантами
Для работы с вариантами можно использовать такие подпрограммы:
Таблица 10.2. Подпрограммы для работы с вариантамиfunction VarAsType(const V: Variant; VarType: Integer): Variant; | Преобразует данные варианта V к типу, определяемому параметром VarType | procedure VarCast(var Dest: Variant; const Source: Variant; Var Type: Integer) ; | Преобразует данные варианта Source к типу,определяемому параметром VarType, и помещает результат в переменную Dest | procedure VarClear(var V: Variant) ; | Освобождает динамическую память, если она была связана с вариантом, и дает ему тип varEmpty | procedure VarCopy(var Dest: Variant; const Source: Variants; | Копирует параметр Source в вариант Dest | function VarFrom-DateTime(DateTime: TDateTime):Variant; | Возвращает вариант, содержащий данные DateTime типа дата-время | function VarIsEmpty(const V: Variant): Boolean; | Возвращает True, если вариант V не содержит данных | function VarIsNull(const V: Variant) : Boolean; | Возвращает True, если вариант V содержит данные неопределенного типа (varNull) ', | function VarToDateTime(const V:Variant): TDateTime) ; | Преобразует данные варианта V к типу дата-время | function VarToStr(const V: Vari ant) : String; | Преобразует данные варианта V к строке ; | function VarType(const V: Variant) : Integer; | Возвращает тип хранящихся в варианте данных i |
Вариантные массивы
Значением варианта может быть массив данных, такие варианты называются вариантными массивами. (Не путайте с обычным или динамическим массивом, элементами которого являются варианты!) Значениями элементов вариантного массива могут быть любые допустимые для варианта значения, кроме строк 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 |
1 2 3
8 8 8
| |