Урок Delphi 5Собственные и структурные типы данных Delphi |
Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание
компонентов Поиск по сайту Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо |
При создании любой серьёзной программы не обойтись без дополнительных, более сложных, чем числа и строки, типов данных. В
Delphi программист может для своих целей конструировать собственные типы данных. Чтобы ввести в программу (описать) новый тип данных,
применяется оператор с ключевым словом type:
Массив - это структура данных, доступ к элементам которой осуществляется по номеру (или индексу). Все элементы массива имеют одинаковый тип. Описание массива имеет вид: type имя_типа_массива = array [диапазон] of тип_элемента; Диапазон определяет нижнюю и верхнюю границы массива и, следовательно, количество элементов в нём. При обращении к массиву индекс должен лежать в пределах этого диапазона. Массив из ста элементов целого типа описывается так: type TMyArray = array [1 .. 100] of Integer; Теперь можно описать переменные типа TMyArray: var A, B: TMyArray; Вместо присвоения типа можно явно описать переменные как массивы: var A, B : array [1..100] of Integer; Для доступа к элементу массива нужно указать имя массива и индекс элемента в квадратных скобках. В качестве индекса может выступать число, идентификатор или выражение, значение которых должно укладываться в диапазон, заданный при описании массива: var N: Integer; begin N := 65; A[5] := 101; A[N] := 165; A[N+3] := 200; B := A; end; Иногда требуется узнать верхнюю или нижнюю границу массива. Для этого служат встроенные функции: High() - вернёт число, являющееся верхней границей массива; Low() - вернёт число, являющееся нижней границей массива. В скобки нужно подставить массив, границы которого требуется узнать. Выражение B := A означает, что каждый элемент массива B будет равен элементу с таким же индексом массива A. Такое присвоение возможно только если оба массива объявлены через некий поименованный тип, или перечислены в одном списке. И в случае:var A: array[1..100] of String; B: array[1..100] of String; его использовать невозможно (но возможно поэлементное присвоение B[1] := A[2]; и т.д.).Массивы могут иметь несколько измерений, перечисляемых через запятую. Например, таблицу из четырёх столбцов и трёх строк:
type MyTable = array[1..4, 1..3] of Integer; var X : MyTable; Y : Integer; begin Y:=X[3, 2]; end; Теперь в результате операции присвоения Y будет равен 7. Многомерный, например, двумерный массив можно описать как массив массивов: type TMyArray = array [1 .. 4] of array [1 .. 3] of Integer; Результат будет аналогичен предыдущему примеру. Каждое измерение многомерного массива может иметь свой собственный тип, не обязательно целый. Кроме вышеописанных, так называемых статических массивов, у которых количество элементов неизменно, в Delphi можно использовать динамические массивы, количество элементов в которых допускается изменять в зависимости от требований программы. Это позволяет экономить ресурсы компьютера, хотя работа с такими массивами происходит гораздо медленнее. Описываются динамические массивы аналогично статическим, но без указания диапазона индексов: type TDinArray = array of Integer; var A : TDinArray; После создания в динамическом массиве нет ни одного элемента. Необходимый размер задаётся в программе специальной процедурой SetLength. Массив из ста элементов: begin SetLength(A, 100); end; Нижняя граница динамического массива всегда равна нулю. Поэтому индекс массива A может изменяться от 0 до 99. Многомерные динамические массивы описываются именно как массивы массивов. Например, двумерный: type T3DinArray = array of array of Integer; var A : T3DinArray; В программе сначала задаётся размер по первому измерению (количество столбцов):
A:=nil; Ключевое слово nil в Delphi означает отсутствие значения. Записи очень важный и удобный инструмент. Даже не применяя специальные технологии, с его помощью можно создавать собственные базы данных. Записи - это структура данных, каждый элемент которой имеет собственное имя и тип данных. Элемент записи иначе называют поле. Описание записи имеет вид: type имя_типа_записи = record название_поля : тип_поля ; . . . название_поля : тип_поля ; end; Названия полей, имеющих одинаковый тип, можно, как и в случае описания переменных, указывать в одну строку через запятую. Для обращения к полю записи сначала указывают имя записи, затем точку, затем имя поля. Например, данные о персонале предприятия могут быть организованы таким типом записи: type TPers = record Fam, Name, Par : String; Year : Integer; Dep : String; end; var Pers : TPers; begin Pers.Fam:='Иванов'; Pers.Name:='Иван'; Pers.Par:='Иванович'; Pers.Year:=1966; Pers.Dep:='Цех №1'; end; Теперь осталось записать эти данные в файл, предварительно объявив и его тип как TPers, и база данных готова. С файлом в Delphi также ассоциируется переменная, называемая файловой переменной, которая описывается так: VFile : file of тип_файла; В качестве типа может использоваться любой ограниченный тип Delphi. При этом не допускается тип String, так как он допускает переменный размер до 2 ГБайт. Его необходимо ограничивать: String[N], где N - количество символов. Тип TPers из предыдущего примера должен быть описан, например, так: type TPers = record Fam, Name, Par : String[20]; Year : Integer; Dep : String[10]; end; Теперь переменная такого типа занимает строго определённое место в памяти, и может быть записана в файл. Как это сделать, рассказывается во 2-й части Урока №7. Множество - это группа элементов, объединённая под одним именем, и с которой можно сравнивать другие величины, чтобы определить, принадлежат ли они этому множеству. Количество элементов в одном множестве не может превышать 256. Множество описывается так: type имя_множества = set of диапазон_значений_множества ; В качестве диапазона может указываться любой тип, количество элементов в котором не больше 256. Например: type TMySet = set of 0 .. 255; type TMySet = set of Byte; Конкретные значения множества задаются в программе с помощью перечисления элементов, заключённых в квадратные скобки. Допускается использовать и диапазоны: var MySet : TMySet; begin MySet:=[1, 3 .. 7, 9]; end; Чтобы проверить, является ли некое значение элементом множества, применяется оператор in в сочетании с условным оператором: var Key : Char; Str : String; begin if Key in ['0' .. '9', '+', '-'] then Str:='Math'; end; Чтобы добавить элемент во множество, используется операция сложения, удалить - вычитания:
var Digit: set of Char=['1'..'9'];
*Примечание: DecimalSeparator - встроенная в Delphi константа типа Char, имеющая значение символа-разделителя целой и дробной частей, который может быть равен точке ('.' ) либо запятой (',' ), в зависимости от текущих настроек Windows.
Переменные, константы и их типы
В начало урока
Выражения и операторы Delphi |
© 2023 Delphi-Manual.ru - Уроки Delphi начинающим с нуля |