Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРЕДСТВА ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ.doc
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
2.13 Mб
Скачать

10.2. Преобразование вариантов к данным других типов

При участии вариантов в выражениях, а также при присваивании их значений переменным других типов тип размещенных в варианте данных преобразуется по следующим правилам:

Таблица 10.2. Преобразование типов для вариантов

Здесь

К целым Отнесены varByte, varSmallInt, varlnteger/ varError;

К вещественным — varSingle, varDouble/ varCurrency;

К строковым -var String, varOleStr.

10.3. Подпрограммы для работы с вариантами

Для работы с вариантами можно использовать такие подпрограммы:

Таблица 10.3. Подпрограммы для работы с вариантами

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: Vari

ant) : 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

 

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([l, 10, 100, 1000]);

Caption := V[2]; //Hello world

IbOutput.Caption := IntToStr(V[4][2]); //200

end;

Все действия с вариантными массивами осуществляются с помощью следующих процедур и функций:

Таблица 10.4. Подпрограммы для работы с вариантными массивами

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