Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 02 26 Основы программирования в Delphi.docx
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
204.56 Кб
Скачать
  1. Множества

Поскольку множества используются в Delphi весьма часто, рассмотрим как с ними работать.

Множество строится из значений базового типа. В этом смысле оно похоже на массив. Но в отличие от массива, множество может содержать любое количество различных элементов базового типа – от нуля элементов всех возможных значений. Если множество не содержит ни одного элемента, то говорят, что оно пустое. На множествах определены такие операции как объединения, пересечения, включение и исключение.

Как пример множества рассмотрим свойство Style объекта VCL Font (шрифт). Это свойство представляет собой комбинацию признаков начертания символов шрифта. Каждый из признаков имеет стандартное наименование

fsBold – полужирный

fsItalic – наклонный

fsUnderline – подчеркнутый

fsStrikeout – перечеркнутый

Шрифт можно характеризовать любым сочетанием этих признаков или ни одним из них. Иными словами, множество признаков шрифта может быть пустым, оно может содержать все различные признаки или любую комбинацию различных признаков.

В общем случае объявление множества включает определение базового типа (если базовый тип не является стандартным) и самого множества. Базовым может быть любой дискретный (целочисленный) тип с количеством различных элементов не более 256. Таким образом, стандартными базовыми типами элементов множеств являются byte и char.

Базовый тип признаков шрифта в модуле VCL GRAPHICS.PAS объявлен так

type

TFontStyles= (fsBold,fsItalic,fsUnderline,fsStrikeout);

Данное объявление вводит в рассмотрение четыре различных значения. Тип свойства Style шрифта объявлен так

type TFontStyle = set of TFontStyles;

и буквально означает «множество значений типа TFontStyles». При проектировании формы приложения, в свойство–множество Style шрифта можно включать любые различные признаки из числа перечисленных в TFontStyles, отмечая их в окне инспектора объектов. Может возникнуть необходимость изменения состава признаков шрифта непосредственно в процессе выполнения программы, например, в ответ на нажатие какой-либо кнопки. Допустим, что нам необходимо изменить стиль шрифта формы добавлением признаков «полужирный, наклонный». Следующий фрагмент кода показывает как это можно сделать:

procedure Form1.Button1Click(Sender:TObject);

begin

Font.Styles := Font.Styles + [fsBold, fsItalic];

end;

В этом коде в свойство-множество Styles включаются элементы fsBold и fsItalic. Список включаемых элементов находится в квадратных скобках, которые в данном случае называются конструктором множества. Исключить признак наклонного шрифта можно так:

Font.Style := Font.Style – [fsItalic];

В результате выполнения этого оператора из множества Styles будет исключен элемент fsItalic.

Допустим, что нам нужно знать, содержится данный элемент в множестве или нет. Например, мы хотим знать обладает ли текущий шрифт признаком «полужирный»? Ответ дает следующий код:

if fsBold in Styles then DoSomething;

Для «очистки» множества используется конструктор пустого множества, например:

Form1.Font.Styles := [];

Следующий пример показывает как инициализировать множество с требуемым составом элементов:

Form1.Font.Styles := [fsBold, fsItalic];

Подобным образом можно модифицировать стиль шрифта любого компонента формы, например,

Memo1.Font.Style:= [];

Memo1.Font.Style:= Memo1.Font.Style + [fsBold, fsItalic];

  1. Записи

Записи являются еще одним типом структурированных данных, поддерживаемым языком Object Pascal.

Новый термин. Запись – это группа данных, связанных общим смыслом и обрабатываемых как единое целое. Данные в записи могут быть разнотипны и называются полями.

Зададимся целью создать описание коллекции CD с музыкой. Было бы удобно иметь такую переменную, которая позволила бы хранить всю необходимую нам информацию об одном CD в одном месте. Именно такую возможность и дают нам записи. Сначала мы должны объявить структуру записи, а затем использовать ее экземпляры– переменные.

Для объявления записи применяется ключевое слово record:

type

TCDRecord = record

Number : integer; // Порядковый номер CD в коллекции

Title : string; // Наименование

Artist : string; // Исполнитель

Year : integer; // Год выпуска

Recorded: string; // Фирма-производитель

Price : double; // Стоимость

Market : string; // Где куплен

end;

Каждый элемент записи называется полем. В данном случае запись объединяет данные трех различных типов – целого, строкового и вещественного.

ПРИМЕЧАНИЕ. К объявлению записи в этом примере следует относиться только как к примеру. Так, запись с полями типа «длинная строка» не подходит для записи в файл. Если предполагается хранить записи в файлах, все записи должны иметь одинаковый размер ( в байтах). В данном же случае никто не может гарантировать то, что все записи сведений о коллекции CD будут иметь одну и ту же длину. При создании записей, которые предполагается записывать в файлы, поля строкового типа следует объявлять либо как короткие строки, либо как массивы символов (array of Char). Более подробно об этом говорится в разделе «Обработка двоичных данных».

После того как тип записи объявлен, можно работать с переменными – экземплярами:

var

CD : TCDRecord;

Теперь можно присваивать значения полям переменной CD:

CD.Number :=1;

CD.Title :=’Aftermath’;

CD.Artist :=’The Rolling Stones’;

CD.Year := 1986;

CD.Recorded:=’ABCKO Music and Records,Inc’;

CD.Price := 80;

CD.Market := ’Горбушка’;

Здесь мы видим что поле, относящееся к переменной–записи, обозначается идентификатором, состоящим из имени переменной, точки и имени поля.

Ниже дан пример присваивания значения поля записи свойству надписи, размещенной на некоторой форме:

Label1.Caption := CD.Recorded;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]