- •Программирование на языке Delphi.
- •1. Краткий экскурс в историю
- •1.1. Языки программирования
- •1.2. Объектно-ориентированное программирование
- •1.3. Визуальное программирование
- •1.4. Среда программирования Delphi
- •1.5. Технология Java
- •1.6. Среда программирования Kylix
- •1.7. Технология .Net
- •... И опять среда Delphi
- •2. Основы языка Delphi
- •2.1. Алфавит
- •2.1.1. Буквы
- •2.1.2. Числа
- •2.1.3. Слова-идентификаторы
- •2.1.4. Комментарии
- •2.2. Типы данных
- •2.2.1. Понятие типа данных
- •2.2.2. Простые типы данных
- •Целочисленные типы данных
- •Вещественные типы данных
- •Временной тип данных
- •Символьные типы данных
- •Булевские типы данных
- •Определение новых типов данных
- •Перечисляемые типы данных
- •Интервальные типы данных
- •2.3. Данные
- •2.3.1. Константы
- •2.3.2. Переменные
- •2.4. Операции
- •2.4.1. Выражения
- •2.4.2. Арифметические операции
- •2.4.3. Операции отношения
- •2.4.4. Булевские операции
- •2.4.5. Операции с битами (эта часть пока не нужна)
- •2.4.6. Очередность выполнения операций
- •2.5. Строки
- •2.5.1. Строковые значения
- •2.5.2. Строковые переменные
- •2.5.3. Операции над строками
- •2.5.4. Стандартные процедуры и функции для работы со строками
- •2.6. Операторы
- •2.6.1. Общие положения
- •2.6.2. Простые операторы
- •Оператор присваивания
- •Оператор вызова процедуры
- •Пустой оператор
- •Оператор безусловного перехода
- •2.6.3. Структурированные операторы
- •Составной оператор
- •Оператор ветвления if
- •Оператор множественного выбора case
- •Оператор повтора for
- •Оператор повтора repeat
- •Оператор повтора while
- •2.6.4. Прямая передача управления в операторах повтора
- •2.7. Подпрограммы
- •2.7.1. Общие положения
- •2.7.2. Объявление процедур и функций
- •Список формальных параметров
- •Локальные объявления
- •Тип возвращаемого значения
- •Соглашения о вызове подпрограмм
- •2.7.3. Вызов процедур и функций
- •2.7.4. Перегрузка процедур и функций
- •2.7.5. Рекурсивные подпрограммы
- •2.7.6. Упреждающее объявление процедур и функций
- •2.7.7. Процедурные типы данных
- •2.7.8. Стандартные процедуры и функции
- •2.8. Структура программных единиц
- •2.8.1. Структура файла проекта
- •Заголовок программы
- •Подключение модулей
- •Программный блок
- •2.8.2. Структура модуля
- •2.8.3. Стандартные модули языка Delphi
- •2.8.4. Область действия идентификаторов
- •2.9. Массивы
- •2.9.1. Статические массивы
- •2.9.2. Работа с массивами
- •2.9.3. Массивы в параметрах процедур и функций
- •2.9.4. Уплотнение структурных данных в памяти
- •2.9.5. Динамические массивы
- •2.10. Множества
- •2.10.1. Объявление множества
- •2.10.2. Операции над множествами
- •2.10.3. Стандартные процедуры для работы с множествами
- •2.11. Записи
- •2.11.1. Объявление записи
- •2.11.2. Операции над записями
- •2.11.3. Записи с вариантами
- •2.12. Файлы
- •2.12.1. Понятие файла
- •2.12.2. Работа с файлами
- •2.12.3. Стандартные подпрограммы управления файлами
- •2.13. Переменные с непостоянным типом значений
- •2.13.1. Тип данных Variant
- •2.13.2. Значения переменных с типом Variant
- •2.13.3. Variant в выражениях
- •2.13.4. Преобразование вариантов к другим типам данных
- •2.13.5. Подпрограммы для работы с вариантами
- •2.13.6. Вариантные массивы
- •2.14. Указатели
- •2.14.1. Понятие указателя
- •2.14.2. Стандартные указательные типы
- •2.14.3. Динамическое распределение памяти
- •2.14.4. Операции над указателями
- •2.14.5. Процедуры GetMem и FreeMem
- •2.15. Представление строк в памяти
- •2.16. Нуль-терминированные строки
- •2.17.1. Встроенный ассемблер
- •2.17.2. Подключение внешних подпрограмм
- •Delphi 6 в подлиннике
- •Часть I. Введение в delphi 6
- •Глава 1. Среда Delphi 6
- •Глава 2. Язык Object Pascal
- •Глава 3. Использование визуальных компонентов
- •Глава 4. Форма - главный компонент приложения
- •Глава 20. Реляционный способ доступа к данным
- •Глава 21. Работа с отчетами
- •Глава 22. Инструментальные средства
- •Часть V. Удаленные базы данных
- •Глава 23. Введение в работу с удаленными базами данных
- •Глава 24. Работа с удаленными базами данных
- •Глава 25. Инструментальные средства для
- •Глава 26. Трехуровневые приложения
- •Часть VI. Публикация баз данных в интернете
- •Глава 27. Введение в технологии публикаций
- •Глава 28. Web-приложения, серверы и интерфейсы
- •Глава 29. Публикация баз данных средствами Delphi
2.13. Переменные с непостоянным типом значений
2.13.1. Тип данных Variant
В среде Delphi определен стандартный тип данных Variant, с помощью которого объявляются переменные с непостоянным типом значений. Разработан специально для тех случаев, когда на этапе компиляции программист не может сказать, какого типа данные будут использоваться в выражении или как параметры вызова подпрограмм.
Переменная с типом Variant занимает в памяти 16 байт. В них хранятся текущее значение переменной (или адрес значения в динамической памяти) и тип этого значения.
Структура вариантного типа представляет собой упакованную запись с вариантной частью. Типы TVarData и TVarType (тождественный типу Word), константы (указывающие тип помещенных в вариант данных) описаны в модуле System. Функциональная часть описана в модуле Variants, который необходимо подключать, если мы хотим работать с вариантным типом.
2.13.2. Значения переменных с типом Variant
1. В переменную-вариант можно поместить:
целое или вещественное число;
булевское значение;
строковое значение;
время и/или дату;
OLE-объект;
массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов, так называемый вариантный массив (не статический).
Кроме того, переменные с типом Variant принимают два специальных значения: Unassigned и Null.
Значение Unassigned показывает, что переменной еще не присвоено значение. Оно автоматически устанавливается в качестве начального значения любой переменной с типом Variant.
Значение Null показывает, что переменная имеет неопределенное значение.
В Delphi определены такие константы, указывающие тип помещенных в вариантданных. Таблица…
Получить тип вариантных данных можно с помощью функции varType(см. ниже), а изменить тип - путем присваивания варианту нового значения.
2.13.3. Variant в выражениях
1. Варианты могут участвовать в целочисленных, вещественных, логических и время-дата выражениях при условии корректности соответствующих преобразований.
var V1, V2, V3, V4: Variant;
begin V1 := 5; // целое число V2 := 0.8; // вещественное число V3 := '10'; // строка V4 := V1 + V2 + V3; // вещественное число 15.8 end; |
Если же V3:=’текст’, то выражение V1 + V2 + V3 вызовет исключение EVariantError.
2. Если в выражении участвует переменная со значением Null, то результат будет Null.
2.13.4. Преобразование вариантов к другим типам данных
Все целочисленные, вещественные, булевские, строковые и символьные типы совместимы по присваиванию с Variant. Для них в выражениях осуществляется автоматическая конвертация по следующим правилам:
|
integer |
real |
string |
boolean |
integer |
converts integer formats |
converts to real |
converts to string representation |
returns False if 0, True otherwise |
real |
rounds to nearest integer |
converts real formats |
converts to string representation using regional settings |
returns False if 0, True otherwise |
string |
converts to integer, truncating if necessary; raises exception if string is not numeric |
converts to real using regional settings; raises exception if string is not numeric |
converts string/character formats |
returns False if string is "false" (non-case-sensitive) or a numeric string that evaluates to 0, True if string is "true" or a nonzero numeric string; raises exception otherwise |
character |
same as string (above) |
same as string (above) |
same as string (above) |
same as string (above) |
Boolean |
False = 0, True = -1 (255 if Byte) |
False = 0, True = -1 |
False = "0", True = "-1" |
False = False, True = True |
Unassigned |
returns 0 |
returns 0 |
returns empty string |
returns False |
Null |
raises exception |
raises exception |
raises exception |
raises exception |
|
|
|
|
|