- •Средства визуального программирования
- •090105 «Комплексное обеспечение информационной безопасности
- •Ставрополь, 2010 Содержание
- •Введение
- •Задачи дисциплины – дать основы:
- •В результате изучения дисциплины студенты должны
- •1.1. Версия 1
- •1.2. Версия 2
- •1.3. Версия 3
- •1.4. Версия 4
- •1.5. Версия 5
- •1.6. Версия 6
- •2.1. Главное окно
- •2.2. Окно формы
- •2.3. Окно дерева объектов
- •2.4. Окно инспектора объектов
- •2.5. Окно кода программы
- •3.1. Пустая форма и ее модификация
- •3.2. Размещение нового компонента
- •3.3. Реакция на события
- •3.4. Некоторые итоги
- •4.1. Страница standard
- •4.2. Страница additional
- •4.3. Страница win32
- •4.4. Страница system
- •4.5. Страница dialogs
- •4.6. Страница win31
- •4.7. Страница samples
- •4.8. Компоненты для работы с базами данных
- •4.9. Компоненты для доступа к интернет
- •4.10. Доступ к серверам автоматизации
- •5.1. Учебная программа
- •5.2. Структура программ delphi
- •5.3. Типы
- •5.4. Операторы языка
- •5.5. Массивы
- •5.6. Процедуры и функции
- •6.1. Алфавит
- •6.2. Идентификаторы
- •6.3. Константы
- •6.4. Выражения
- •6.5. Операции
- •7.1. Простые типы
- •7.2. Структурированные типы
- •7.3. Строки
- •7.4. Указатели и динамическая память
- •7.5. Псевдонимы типов
- •8.1. Локализация имен
- •8.2. Описание подпрограммы
- •8.3. Параметры-массивы и параметры-строки
- •8.4. Процедурные типы
- •8.5. Рекурсия и опережающее описание
- •9.1. Основные понятия
- •9.2. Составляющие класса
- •9.3. Объявление класса
- •9.4. Интерфейсы
- •10.1. Основные свойства варианта
- •10.2. Преобразование вариантов к данным других типов
- •10.3. Подпрограммы для работы с вариантами
- •10.4. Вариантные массивы
- •10.5. Пользовательские варианты
- •11.1. Доступ к файлам
- •11.2. Процедуры и функции для работы с файлами
- •11.3. Текстовые файлы
- •11.4. Типизированные файлы
- •11.5. Нетипизированные файлы
- •11.6. Средства windows для работы с файлами
- •11.7. Отображение файлов в память
- •11.7.1. Создание/открытие файла
- •11.8. Объектная модель работы с файлами
- •12.1. Структура модулей
- •12.2. Заголовок модуля и связь модулей друг с другом
- •12.3. Интерфейсная часть
- •12.4. Исполняемая часть
- •12.5. Инициирующая и завершающая части
- •12.6. Доступ к объявленным в модуле объектам
- •12.7. Типы модулей в delphi
- •13.1. Назначение
- •13.2. Реализация
- •13.3. Пример
- •13.4. Использование
- •13.5. Включение в библиотеку форм
- •15.1. Константы простых типов и типа string
- •15.2. Константы-массивы
- •15.3. Константы-записи
- •15.4. Константы-множества
- •15.5. Константы-указатели
- •15.6. Инициация переменных
- •16.1. Класс exception - обработка исключений
- •16.2. Класс tlist - списки
- •16.3. Классы tstrings и tstringlist -наборы строк и объектов
- •16.4. Графический инструментарий
- •Список используемой литературы
10.1. Основные свойства варианта
Вариант (в Delphi 1 он отсутствует) - это тип variant, разработанный специально для тех случаев, когда на этапе компиляции программист не может сказать, какого типа данные будут использоваться в выражении или как параметры вызова подпрограмм. Переменная-вариант занимает в памяти дополнительные 2 байта, в которые помещается информация о действительном типе переменной. Эта информация позволяет компилятору создать код, который будет осуществлять необходимое преобразование типов на этапе прогона программы.
В переменную-вариант можно поместить:
целое или вещественное число;
логическое значение;
строку;
время и/или дату;
OLE-объект;
массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов.
Варианты могут участвовать в целочисленных, вещественных, логических и время-дата выражениях при условии корректности соответствующих преобразований. Например, если варианту v присвоена строка '1.0', то выражение 1+v будет правильным вещественным значением 2,0. Однако если v := 'текст', выражение 1+v вызовет исключение EVariantError.
В Delphi определены такие константы, указывающие тип помещенных в вариант данных:
Таблица 10.1. Типы возможных значений варианта
Имя |
Константа |
Смысл |
varEmp.ty |
$0000 |
Нет данных |
varNull |
$0001 |
Неизвестный тип параметра |
varSmallInt |
$0002 |
Целый тип Smallint |
varlnteger |
$0003 |
Целый тип Integer |
varSingle |
$0004 |
Вещественный тип Single |
varDouble |
$0005 |
Вещественный тип Double |
varCurrency |
$0006 |
Вещественный тип Currency |
varDate |
$0007 |
Тип дата-время |
varOleStr |
$0008 |
OLE-строка в кодировке Unicode |
varDispatch |
$0009 |
Указатель на OLE-объект |
varError |
$000А |
Код ошибки |
varBoolean |
$000В |
Тип WordBool |
varVariant |
$000С |
Тип Variant (только для вариантных массивов) |
varUnknow |
$0011 |
Неизвестный OLE-объект |
varByte |
$0100 |
Целый тип Byte |
varString |
$0100 |
Строковый тип |
varArray |
$2000 |
Вариантный массив |
varByRef |
$4000 |
Указатель на данные |
Структура вариантного типа описывается следующим образом:
TVarData = packed record
VType: Word;
Reservedly Reserved2, ReservedS: Word;
case Integer of
varSmallInt: (VSmallInt: Smallint);
varlnteger: (VInteger: Integer);
varSingle: (VSingle: Single);
varDouble: (VDouble: Double);
varCurrency: (VCurrency: Currency);
varDate:(VDate: Double) ;
varOleStr: (VOleStr: PWideChar) ;
varDispatch: (VDispatch: Pointer);
varError: (VError: WordBool);
varString: (VString: Pointer);
varArray: (VArray: PVarArray) ;
varByRef: (VPointer: Pointer);
end;
Как нетрудно убедиться, любая переменная вариантного типа представляет собой 16-байтную запись, содержащую 8-байтную вариантную часть, которая хранит либо собственно данные, либо их адрес (т. е. указатель на динамически размещ
К чему приводится |
Тип данных в варианте |
|||||
varEmpty |
Целые |
Вещественные |
Дата- Время |
Строковые |
Логические |
|
К дата- 'У: время |
30.12. 1899 00:00:00 |
Преобразование в Double |
Преобразование в Double |
Без преобразования |
Преобразование в дату |
Преобразование в Double |
К целым |
0 |
Преобразование в соответствующий тип |
Округление до ближайшего целого |
Округление до ближайшего целого |
Преобразование в целый тип |
0 для False, иначе-1 (255 для Byte) |
.'К дата- 'У: время |
30.12.1899 00:00:00 |
Преобразование в Double |
Преобразование в Double |
Без преобразования |
Преобразование в дату |
Преобразование в Double |
К строковым |
Пустая строка |
Преобразование в символьный вид |
Преобразование в символьный вид |
Преобразование в символьный вид |
Без преобразования |
'0'для False,'-!' для True |
К логическим |
False |
False для 0, иначе True |
False для 0, иначе True |
False для 0, иначе True |
False для 'False' и для '0', иначе True |
Без преобразования |
енные данные). В поле VType в момент создания варианта компилятор помещает, признак отсутствия данных varEmpty. В работающей программе значение этого поля меняется в соответствии с текущим типом данных, размещенных в вариантной части. Замечу, что программа не может получить прямого доступа к полям вариантной записи. Получить тип вариантных данных можно с помощью функции varType (см. ниже), а изменить тип - путем присваивания варианту нового значения.