Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Компоненты CoolBar и ControlBar
Категория: Компоненты
Категория: Компоненты
Как получить дату создания файла
Категория: Файловая система
Категория: Файловая система
Получить список запущенных приложений
Категория: Приложение
Категория: Приложение
Изменить пароль для Paradox
Категория: Базы данных
Категория: Базы данных
Упаковка ZIPTV
Категория: Компоненты
Категория: Компоненты
Что такое хук (hook)?
Категория: Приложение
Категория: Приложение
Перекодировка текста DOS-Windows-Koi8
Категория: Текст и строки
Категория: Текст и строки
Создание и удаление полей
Категория: Базы данных
Категория: Базы данных
Упаковка таблиц в BDE
Категория: Базы данных
Категория: Базы данных
Получить первую и последнюю видимую строку в TRichEdit
Категория: Текст и строки
Категория: Текст и строки
Delphi - Справочник: Record
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 обеспечивает лучший механизм выполнения для передачи подобных групп данных чем классы данных. |