Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к экзамену по Делфи.docx
Скачиваний:
7
Добавлен:
21.04.2019
Размер:
141.62 Кб
Скачать

24. Составные имена в программах – когда они возникают, как формируются и с помощью каких средств можно сократить длину таких имен. (например, оператор With)

Инструкция доступа служит для удобной и быстрой работы с   составными  частями объектов, в том числе с полями записей. Напомним, что для обращения к полю записи необходимо указывать  имя  записи и  имя  этого поля, разделенные точкой. Аналогичным путем образуется  имя   составной  части какого-либо объекта, например, формы или кнопки.

Инструкция доступа имеет следующий основной формат:

Формат инструкции доступа

   

  1. with < Имя  объекта> do <Инструкция>

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

Вот пример двух вариантов обращения к  составным  частям объекта:

Формат инструкции доступа

   

  1. //  Составные   имена  пишутся полностью

  2. Form1.Canvas.Pen.Color := clRed;

  3. Form1.Canvas.Pen.Width := 5;

  4. Form1.Canvas.Rectangle(10, 10, 100, 100);

  5. // ИЛИ

  6. // Использование инструкции доступа

  7. with Form1. Canvas do

  8. begin

  9. Pen.Color := clRed;

  10. Pen.Width := 5;

  11. Rectangle(10, 10, 100, 100);

  12. end;

В обоих вариантах в форме красным карандашом толщиной в пять пикселов рисуется прямоугольник. Для обращения к свойствам и методу (процедуре) поверхности рисования формы удобно использовать инструкцию доступа (второй вариант).

В инструкции доступа допускается указывать несколько  имен  объектов.

Формат инструкции доступа

   

  1. with < Имя  объекта1>,..., < Имя  объектаЫ> do <Инструкция>

  2. // Такой формат эквивалентен следующей конструкции:

  3. with < Имя  объекта1> do

  4. with < Имя  объекта2> do

  5. ...

  6. with < Имя  объектаN> do

  7. <Инструкция>

В этом случае для  составной  части  имени  объекта, если возможно, применяется < имя  объектаN>, иначе — < Имя  объектаN-1> и т. д. до < Имя  объекта1>.

ПРИМЕР ИСПОЛЬЗОВАНИЯ СОСТАВНЫХ ИМЕН В ПРОГРАММЕ:

Begin Memo1.Text:=’Учиться в МГУПИ мне интересно’;

Memo1.Lines.Add(t2); Memo1.Lines.Add(t1); Memo1.Lines.Add(t3);

Edit1.Text:=IntToStr(Memo2.Lines.Count)

ПРИМЕР ИСПОЛЬЗОВАНИЯ ИНСТРУКЦИИ ДОСТУПА:

With Memo2.Lines do

Begin

Add(t2); Add(t1); Add(t3);

Edit1.Text(Count)

End;

25. Запись как тип данных, их определение, назначение, структура. Обращение к полям записей: составные имена, оператор With. Примеры применения в программах.

Запись (англ. record) - это сложный тип данных, позволяющие объединить данные разных типов. Запись можно назвать наиболее общим сложным типом данных. Название "запись" появилось из тех соображений, что данные разного типа можно встретить в таблицах: в каждой строке записаны сразу несколько разных значений. Таким образом, одна запись соответствует одной строке данных: она имеет несколько полей, каждое из которых хранит своё значение.

Допустим, мы хотим хранить информацию о людях, заполнивших анкету на поступление на работу. Нас интересуют: ФИО человека, возраст, образование (среднее/высшее), владение компьютером, владение иностранными языками. Все эти данные мы можем объединить в запись. Дальнейшее повествование будет основываться на этом примере.

Чтобы работать в программе с записями, нужно сначала описать соответствующий тип данных. Запись описывается следующим образом:

type

имя_типа_записи = record

{поля записи}

end;

В блоке полей описание идёт точно так же, как описание переменных: указывается имя поля, далее через двоеточие тип данных этого поля. Сами поля разделяются точкой с запятой.

Для нашего примера:

type

TPerson = record

Name: String;

Age: Byte;

Education,PC: Boolean;

Foreign: set of TForeignLanguages;

end;

Итак, общая форма записи:

with запись do

{обращение к полям записи}

А теперь на нашем примере:

with L do

begin

X:=StrToFloat(X1Edit.Text);

Y:=StrToFloat(Y1Edit.Text);

X2:=StrToFloat(X2Edit.Text);

Y2:=StrToFloat(Y2Edit.Text);

end;

Что же мы имеем? А вот что: мы нашу запись "вынесли за скобку", и далее напрямую обращаемся к её полям. Удобно, не правда ли? Этот код абсолютно эквивалентен тому, что был написан нами ранее, только он более эффективен.

Несложно догадаться, что использование with для единичного обращения к записи бессмысленно/

Записи объединяют фиксированное число элементов данных других типов. Отдельные элементы записи имеют имена и называются полями. Имя поля должно быть уникальным в пределах записи. Различают фиксированные и вариантные записи.

Фиксированная запись состоит из конечного числа полей, ее объявление имеет формат:

Фиксированная запись

   

  1. Record

  2. <Имя поля1> : <Тип поля1>;

  3. ...

  4. <Имя поляN> : <Тип поляN>;

  5. end;

Вариантная запись, как и фиксированная, имеет конечное число полей, однако предоставляет возможность по-разному интерпретировать области памяти, занимаемые полями. Все варианты записи располагаются в одном месте памяти и позволяют обращаться к ним по различным именам. Отметим, что в данном случае термин «вариантный» не имеет ничего общего с вариантным типом (variant).  Формат объявления вариантной записи:

Вариантная запись

   

  1. Record

  2. case <Признак> : <Тип признака> of

  3. <Вариант1> : (<Описание варианта1>);

  4. <ВариантN> : (<Описание вариантаN>);

  5. end;

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

Пример использования записи:

Пример использования записи

   

  1. var

  2. Man: record

  3. Name: string;

  4. Salary: real;

  5. Note: string;

  6. end;

  7. Man.Name: = 'Иванов M.P.';

  8. Man.Salary:=500;

Переменная Man является фиксированной записью и имеет поля имени (Name), оклада (Salary) и примечания (Note), каждое своего типа.

Система Delphi предоставляет также большое количество уже описанных типов записей, например:

Пример использования записи

   

  1. type

  2. TPoint = record

  3. X: Longint;

  4. Y: Longint;

  5. end;

  6. TRect = record

  7. case Integer of

  8. 0: (Left, Top, Right, Bottom: Integer);

  9. 1: (TopLeft, BottomRight: TPoint);

  10. end;

Здесь тип TPoint является фиксированной записью, а тип TRect вариантной записью.