Читайте также:
|
|
Змінна типу Variant займає в пам'яті шістнадцять байт, в яких знаходиться інформація про тип даних (код типу), що зберігаються в даний момент в даній змінній і самі дані, або покажчик на них. Можливі коди типів даних для варіантних змінних, описані в модулі System, представлені в таблиці 1.
Для визначення типу даних, що зберігаються у варіантній змінній, використовується функція Vartype, описана в модулі Variants в наступному вигляді:
Function Vartype (const V: Variant): Tvartype;
Значення яке повертає функція Vartype має тип аналогічний типу Word і містить інформацію про тип даних, а також про те, чи є значення, що зберігається в змінній, масивом або покажчиком. Молодші дванадцять біт (три останні шістнадцяткові цифри) цього значення містять код типу, відповідний константам, приведеним в таблиці. 4, а в старших чотирьох бітах можуть знаходитися наступні значення:
· нульове значення $0000 - указує на те, що дані заявленого типу зберігаються безпосередньо у варіантній змінній;
· значення $2000 (константа varArray модуля System) - указує на те, що дані, які зберігаються, є масивом елементів, що мають тип, визначуваний кодом типу даних;
· значення $4000 (константа varByRef модуля System) - указує на те, що дані, що зберігаються, є посиланням на відповідний тип даних, який визначається кодом типу даних.
Таблиця 1
Коди типів варіантних змінних
Константа | Тип даних | Значення |
varEmpty | Значення не визначене | $000 |
varNull | Порожнє значення | $001 |
varSmallint | Smallint | $002 |
varInteger | Integer | $003 |
varSingle | Single | $004 |
varDoudle | Double | $005 |
varCurrency | Currency | $006 |
varDate | TDateTime | $007 |
varQleStr | Посилання на AnsiString | $008 |
varDispatch | Посилання на інтерфейс Dispatch | $009 |
varBoolean | Word Bool | $00B |
varVanant | Variant | $00C |
varUnknown | Посилання на інтерфейс IInterface або IUnknown | $00D |
varShortint | Shortint | $010 |
varByte | Byte | $011 |
varWorO | Word | $012 |
varLongWord | LongWocd | $013 |
varInt64 | Int64 | $014 |
varStrArg | Посилання на рядок, сумісний з СОМ | $048 |
varString | Посилання на рядок, не сумісний з СОМ | $100 |
Для виділення частини значення, що містить код типу даних, передбачена константа vartypemask (значення i $0FFF), за допомогою якої можна відокремити код типу даних від додаткових ознак:
<Змінна типу Variant> and vartypemask
Як приклад використання описаних вище методів приведемо фрагмент програми, що формує рядок S, що містить докладну інформацію про тип варіантної змінної V.
S:= 'Data element type:';
Case Vartype(V) and vartypemask of
varempty: S:= S + ‘The variant is Unassigned’;
varnull: S:= S + ‘The variant is Null’;
varSmallint: S:= S + '16 bit signed integer (type Smallint)';
varInteger: S:= S + '32-bit signed integer (type Integer)';
varSingle: S:= S + ‘Single-precision floating-point value (type Single)’;
varDouble: S:= S + ‘Duble-precision floating-point value (type Double)';
varCurrency: S:= S + ‘Currency floating-point value (type Currency)’;
varDate: S:= S + 'Date and time value (type Tdatetime)';
varOleStr: S:= S + 'Reference to а dynamically allocated UNICODE String';
varDispatch: S:= S + 'Reference to an Automation object';
varBoolean: S:= S + '16-bit boolean (type WordBool)';
varVariant: S:= S + 'A variant';
varUncnown: S:= S + 'Reference to an unknown OLE object';
varShortInt: S:= S + '8 bit signed integer (type ShortInt)';
varByte: S:= S + 'A Byte';
varWord: S:= S + 'Unsigned 16-bit value (Word)';
varLongword: S:= S + 'Unsigned 32-bit value (Longword)';
varInt64: S:= S + '64-bit signed integer(Int64)';
varStrArg: S:= S + 'Com-compatible string';
varString: S:= S + 'Reference to а dynamically allocated string';
end;
if (Vartype(V) and vararray) = vararray then S:= S + it is an array';
if (Vartype(V) and varbyref) = varbyref then S:= S + 'it is а reference';
Таким чином, якщо в змінній V знаходиться значення 200, то після виконання даного фрагмента програми значенням змінної s буде рядок 'Data element type: A Byte'. якщо змінній V задати значення 1221.66, то в змінній S буде рядок 'Data element type: Currency floating-point value (type Currency)'. Якщо ж значення змінної V буде строковрядковимим, наприклад, ‘4 221. 66’, то значенням змінної s буде такий рядок: 'Data element type: Reference to а dynamically allocated string'.
Дата добавления: 2015-07-11; просмотров: 130 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Динамічні масиви | | | Автоматичне приведення типів |