Облака / Clouds
    Go to Copy.com
    Copy.com
    The bast cloud service
    Get 20 GB free!!!
    Support WebDav.
    Show more >>

    Go to Dropbox.com
    Dropbox.com
    time-tested cloud storage
    Support WebDav.
Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Компоненты CoolBar и ControlBar
   Категория: Компоненты
  Как получить дату создания файла
   Категория: Файловая система
  Получить список запущенных приложений
   Категория: Приложение
  Изменить пароль для Paradox
   Категория: Базы данных
  Упаковка ZIPTV
   Категория: Компоненты
  Что такое хук (hook)?
   Категория: Приложение
  Перекодировка текста DOS-Windows-Koi8
   Категория: Текст и строки
  Создание и удаление полей
   Категория: Базы данных
  Упаковка таблиц в BDE
   Категория: Базы данных

Delphi - Справочник: Record

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 Record
1 type Name = {packed} Record
Declarations ...
end;

2 type Name = {packed} record
type Name = {packed} record
Declarations ...
case {Tag :} Ordinal type of
Ordinal value {,Ordinal value...} : (Declarations);
{...}
end;
Ключевое слово (Unit )
Структурный тип данных содержащий поля данных
Описание:
Ключевое слово Record один из самых полезных, и отличительных особенностей Delphi (и языка Паскаля). Оно обеспечивает средство сбора в одну структуру набора различных типов данных.

На каждое поле в записи ссылаются следующим способом record.field.

Когда объявлено, опция Packed, Delphi минимизирует память, отведенную под запись. Эти сокращения в памяти повлиять на выполнение, где данные не выстроены, соответственно, по 2, 4 или 8 байт. По умолчанию должно выровняться, где необходимо, с заполнителями.

Есть два основных типа полей записи, как показано в двух синтаксических типах:

1. Простое объявление поля

Это стандартные объявления переменных Delphi, типа:

size : Integer;

за исключением того, что их размер должен быть определен. Например:

description : string[20];

потому, что Delphi должен знать точный объём памяти необходимый этому полю в записи.

2. Выбираемые (Различные) разделы поля

Они должны всегда следовать за любыми основными объявлениями полей (ключевое слово Case не имеет закончившего слова End;).

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

По умолчанию, поля в записи выравниваются по Byte и Word границам. Для обоих типов записи, опция packed позволяет ей быть изменённой, чтобы уменьшить требуемый объём памяти.
Пример кода: Стандартное определение записи

//Пример кода : Стандартное определение записи type // Объявление записи клиента TCustomer = Record firstName : string[20]; lastName : string[20]; address1 : string[100]; address2 : string[100]; address3 : string[100]; city : string[20]; postCode : string[8]; end; var John, Sarah : TCustomer; begin // Присвоение подробностей клиенту Джону with John do begin firstName := 'John'; lastName := 'Smith'; address1 := '7 Park Drive'; address2 := 'Branston'; address3 := 'Grimworth'; city := 'Banmore'; postCode := 'BNM 1AB'; end; // Присвоение подробностей о сестре Джона - просто копирование целой записи Sarah := John; // И затем изменение имени Sarah.firstName := 'Sarah'; // Теперь показ подробностей обоих клиентов with John do ShowCustomer([firstName, lastName, address1, address2, address3,city, postCode]); ShowMessage(''); with Sarah do ShowCustomer([firstName, lastName, address1, address2, address3,city, postCode]); end; // Процедура, которая отображает переменное число строк procedure TForm1.ShowCustomer(const fields: array of string); var i : Integer; begin // Отображение всех переданных полей - примечание: массивы начинаются с 0 for i := 0 to Length(fields)-1 do ShowMessage(fields[i]); end; //Пример кода : Определение записи с секцией Case (Variant) type // Объявление записи плода используя case, чтобы выбрать // диаметр окружности плода, или иначе длины и высоты. TFruit = Record name : string[20]; Case isRound : Boolean of // Выберите, как отобразить следующий раздел True : (diameter : Single); // Отображение той же самой памяти как длина False : (length : Single; // Отображение той же самой памяти как диаметр width : Single); end; var apple, banana, fruit : TFruit; begin // Установка яблока как окружности, с соответствующими измерениями apple.name := 'Apple'; apple.isRound := True; apple.diameter := 3.2; // Установка банан как длинный, с соответствующими измерениями banana.name := 'Banana'; banana.isRound := False; banana.length := 7.65; banana.width := 1.3; // Показ атрибутов яблока fruit := apple; if fruit.isRound then ShowMessage('Диаметр '+fruit.name +' = '+ FloatToStrF(fruit.diameter, ffFixed, 2, 1)+'"') else ShowMessage('Длина '+fruit.name +' = '+ FloatToStrF(fruit.length, ffFixed, 2, 1)+' ширина = '+ FloatToStrF(fruit.width, ffFixed, 2, 1)+'"'); // Показ атрибутов банана fruit := banana; if fruit.isRound then ShowMessage(fruit.name +' диаметр = '+ FloatToStrF(fruit.diameter, ffFixed, 2, 1)+'"') else ShowMessage(fruit.name +' length = '+ FloatToStrF(fruit.length, ffFixed, 2, 1)+'" ширина = '+ FloatToStrF(fruit.width, ffFixed, 2, 1)+'"'); end;

Результат:
John
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Sarah
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Диаметр Apple = 3.2"
Длина Banana = 7.7" Ширина = 1.3"
Примечание:
C использованием ключевого слова With, к полям записи можно обращаться без указания префикса каждый раз с названием поля.

В отличие от Объектно-ориентированных языков подобно Java, Тип Record в Delphi обеспечивает лучший механизм выполнения для передачи подобных групп данных чем классы данных.

  << Вернуться