- •Основы программирования
- •Введение
- •Основы delphi
- •Общая технология программирования
- •Язык программирования
- •Объектно-ориентированное программирование
- •Визуальное программирование
- •Событийно управляемое программирование
- •Windows-приложение
- •Среда программирования
- •Первоначальные сведения о проекте приложения
- •Встроенный отладчик
- •Использование встроенных классов
- •Иерархия классов
- •Использование палитры компонентов и инспектора объектов
- •Использование графики
- •Основные инструменты
- •Основные характеристики шрифтов
- •Графические данные и палитра
- •Некоторые общие свойства компонентов
- •Сохранение проекта
- •Построение простейшего проекта
- •Понятие исключительной ситуации
- •Введение в object pascal
- •Структура приложения
- •Структура программы-проекта
- •Структура модуля
- •Пример 1
- •Описания программных элементов
- •Программные элементы и адреса памяти
- •Области видимости
- •Правила записи имен
- •Время жизни идентификаторов
- •Использование локальных переменных в примере 1
- •Использование глобальных переменных в примере 1
- •Простые типы
- •Целые типы
- •Целые типы
- •Некоторые операции с целым типом
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Интервальный тип
- •Вещественный тип
- •Вещественные типы
- •Некоторые операции с вещественным типом
- •Тип дата-время
- •Выражения
- •Константы
- •Типизированные константы.
- •Переменные
- •Операции
- •Унарная операция not (отрицание)
- •Логические операции and, or, xor
- •Функции
- •Порядок вычисления выражений
- •Виды операторов
- •Простые операторы
- •Составной оператор
- •Операторы условного перехода
- •Оператор if
- •Пример 2
- •Оператор case
- •Пример 3
- •Использование enter в примере 3
- •Операторы цикла
- •Оператор цикла for
- •Пример 4
- •Оператор цикла while
- •Пример 5
- •Оператор цикла repeat
- •Пример 6
- •Использование процедур break и continue
- •Пример 7
- •Массивы
- •Статические массивы
- •Динамические массивы
- •Пример 8
- •Пример 9
- •Записи (объединения)
- •Оператор with
- •Пример 10
- •Совместимость и преобразование типов данных
- •Идентичность типов
- •Совместимость типов
- •Совместимость по присваиванию
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Пример 11
- •Множества
- •Операции над множествами
- •Пример 12
- •Вариантный тип данных
- •Процедуры и функции
- •Процедура
- •Функция
- •Рекурсия
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры без типа
- •Массивы открытого типа
- •Парамеры по умолчанию
- •Процедура exit
- •Директивы подпрограммы
- •Соглашения по передаче данных
- •Директива forward
- •Директива external
- •Директива assembler
- •Перегруженные подпрограммы
- •Пример 13
- •Инкапсуляция
- •Класс как объектный тип
- •Наследование
- •Области видимости
- •Операции is и as
- •Виды методов
- •Методы virtual и полиморфизм
- •Методы dynamic
- •Методы message
- •Методы abstract
- •Методы override
- •Методы class
- •Пример 14
- •Динамическое создание компонентов
- •Использование класса со счетчиком объектов
- •Отслеживание разрушения объектов
- •События
- •Указатели на методы
- •Пример 15
- •Типы ссылки на класс
- •Свойства
- •Свойства simple
- •Свойства enumerated
- •Свойства set
- •Свойства object
- •Свойства array
- •Задание начальных значений свойствам
- •Пример 16
- •Файловые типы
- •Текстовые файлы
- •Типизированные файлы
- •Файлы без типа
- •Дополнительные процедуры и функции
- •Пример 17
- •Компонент tmainmenu
- •Указатели
- •Пример 18
- •Динамические структуры данных
- •Однонаправленные списки
- •Двунаправленные списки
- •Стеки, очереди
- •Бинарные деревья
- •Пример 19
- •Процедурный тип
- •Программные единицы dll
- •Пример 20
- •Технологии программирования
- •Потоки данных
- •Пример 21
- •Пример 22
- •Интерфейс drag and drop
- •Пример 23
- •Технология drag and dock
- •Пример 24
- •Использование функций windows api при работе с файлами
- •Пример 25
- •Использование отображаемых файлов
- •Пример 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Пример 27
- •Использование блокировки в примере 27
- •Многопоточное приложение в примере 28
- •Проблемы синхронизации потоков
- •Список используемых в примерах компонентов
- •Список используемых компонентов и других классов
- •Библиографический список
- •Оглавление
Вариантный тип данных
Этот тип данных объявляется с помощью ключевого слова Variant. Данные типа Variant представляют собой такие величины, тип которых либо неизвестен к началу работы программы, либо может изменяться в процессе её выполнения. Они являются довольно гибким средством, но требуют дополнительной памяти и работа с ними происходит медленнее, чем с другими типами. Поэтому использовать их следует только там, где это необходимо, например, при работе с OLE-объектами, программировании серверов и т.д.
Одна переменная вариантного типа может принимать значения различных типов, например объявлено:
Var V: Variant; D: Double; S: String; W: Word;
Можно записать: D:= 6.88; V:= D; W:= 50;
V:= W; S:=’НИ РХТУ’; V:= S;
Вариантный тип данных представляет собой запись и определён в модуле System стандартным типом TVarData:
TvarData = record
Vtype:word;
Reserved1, Reserved2, Reserved3:word;
Case Integer of
VarSmallint: (VSmallint:Smallint);
VarInteger: (VInteger: Integer);
VarSingle: (VSingle: Single);
VarDouble: (VDouble: Double):
VarCurrency: (VCurrency: Currency);
VarDate: (VDate:Double);
VarOleStr: (VOleStr:PWideChar);
VarDispath: (VDispath:Pointer);
VarError: (VError:Integer);
VarBoolean: (VBoolean:WordBool);
VarUnknown: (VUnknown:Pointer);
VarByte: (VByte:Byte);
VarString: (VString:Pointer);
VarAny: (VAny:Pointer);
VarArray: (VArray:PVarArray);
VarByRef: (VPointer:Pointer);
End;
Этот тип представляет собой запись с вариантной частью. Поле VType определяет конкретный текущий тип записываемого значения. Само значение записывается в вариантной части записи. Три поля Reserved-1-2-3 не используются. Case-константы, определяющие вариантную часть, описаны в модуле System.
Имеется большое количество стандартных подпрограмм, которые позволяют во многих случаях избегать непосредственного обращения к внутренней структуре переменных вариантного типа.
Какие-либо параметры вариантного типа могут быть определённого типа, неназначенные и неизвестные. Неназначенный параметр – это параметр, которому не назначено ещё никакого значения. При своём создании параметр вариантного типа объявляется как неназначенный и получает значение VarEmpty, где VarEmpty – константа, определённая в модуле System. Неизвестные параметры, как правило, являются ошибочными параметрами.
В общем случае, переменные вариантного типа могут участвовать в выражениях, как и переменные других типов. Этот тип данных может представлять собой массив, в том числе, массив, состоящий из элементов вариантного типа. Для работы с такими массивами имеются стандартные подпрограммы.
Процедуры и функции
Обычно программа составляется так, что она состоит из блоков, которые строятся в какой-то степени произвольно. К крупным блокам относятся модули (Unit), библиотеки (DLL). К мелким блокам относятся подпрограммы, которые являются составной частью любых программных единиц. Подпрограмма выполняет некоторую логически завершенную последовательность действий. Существуют две разновидности подпрограмм, которые отличаются в оформлении и способе передачи данных. Это - процедуры и функции. Подпрограммы являются программными элементами, такими же, как и переменные, константы и т.д. Поэтому подпрограмма должна быть объявлена и определена до первого её использования. Существуют предопределенные встроенные подпрограммы, которые содержатся в программных модулях и библиотеках. Подпрограммы может создавать и сам программист.
При разработке подпрограммы важным является вопрос категорий используемых аргументов. Дело в том, что внутри подпрограммы все данные и вычисления локализованы, т.е. они недоступны (если не позаботиться об этом) для основной программы. Обмен результатами расчетов производится с помощью параметров (аргументов). Существует два вида параметров:
входные параметры, с помощью которых данные передаются внутрь подпрограммы;
выходные, с помощью которых передаются результаты расчета.
Обмениваться данными с подпрограммой можно с помощью глобальных переменных (не рекомендуется). В этой связи различают:
локальные переменные, объявленные внутри подпрограммы и доступны только ей;
глобальные переменные, объявленные в блоках, к которым принадлежит данная подпрограмма, и доступны как охватывающему подрограмму блоку, так и подпрограмме;
формальные параметры, которые записываются в круглых скобках справа от имени подпрограммы при ее объявлении и доступны как использующей подпрограмму программной единице, так и, естественно, подпрограмме.
Способ обмена данными с помощью глобальных переменных применяется только в простейших программах или каких-то блоках. Универсальным способом обмена данными является способ использования формальных параметров, который и разработан для этих целей.
