Вывод записи в
файл
Рассмотрим
программу, которая записывает в файл введенные пользователем данные о
результатах соревнований, формируя, таким образом, простую базу данных. Исходные
данные вводятся в поля диалогового окна (рис. 8.1) и сохраняются в файле,
компонентами которого являются записи типа TMedal.
Рис. 8.1.
Окно программы Добавление записи в файл
Для ввода
фамилии спортсмена применяется поле редактирования (компонент Edit). Для ввода
названия вида спорта и страны используются компоненты ComboBox (комбинированный
список).
Компонент
ComboBox, значок которого находится на вкладке Standard (рис. 8.2), дает
возможность ввести данные либо непосредственно в поле ввода-редактирования, либо
путем выбора из списка, который появляется в результате щелчка на кнопке
раскрывающегося списка.
Рис. 8.2.
Значок компонента ComboBox В табл. 8.1 перечислены свойства компонента
ComboBox.
Таблица
8.1. Свойства компонента ComboBox
Свойство |
Определяет | ||
Name |
Имя компонента.
Используется для доступа к свойствам компонента | ||
Text |
Текст, находящийся в поле
ввода-редактирования | ||
Items |
Элементы раскрывающегося
списка | ||
DropDownCount |
Количество отображаемых
элементов в раскрытом списке | ||
Left |
Расстояние от левой
границы компонента до левой границы формы | ||
Top |
Расстояние от верхней
границы компонента до верхней границы формы | ||
Height |
Высоту компонента (поля
ввода-редактирования) | ||
Width |
Ширину
компонента | ||
Font |
Шрифт, используемый для
отображения элементов списка | ||
ParentFont |
Признак наследования
свойств шрифта родительской формы | ||
Список, который
появляется в результате щелчка на кнопке раскрытия списка, может быть
сформирован как в процессе разработки формы приложения, так и во время работы
программы. Чтобы сформировать список во время разработки формы, нужно в окне
Object Inspector выбрать свойство Items, щелкнуть на кнопке
активизации редактора списка строк (кнопка с тремя точками) и ввести элементы
списка (рис. 8.3).
Рис. 8.3.
Ввод списка для компонента ComboBox2 во время создания формы
приложения
Полный текст
программы приведен в листинге 8.1.
Листинг
8.1. Добавление записей в файл
unit
аррrес_;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm) Label1: TLabel;
Label2: TLabel; Label3:
TLabel;
Edit1: TEdit; // спортсмен
ComboBoxl: TComboBox; // страна
ComboBox2: TComboBox; // вид спорта
RadioGroup1: TRadioGroup; // медаль
Buttonl: TButton; // кнопка Добавить
Labels:
TLabel;
Label4:
TLabel;
procedure
FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action:
TCloseAction)
procedure ButtonlClick(Sender: TObject);
private
{ Private declarations
} public
{ Public declarations }
end;
// тип медали
TKind = (GOLD, SILVER,
BRONZE);
// запись файла
TMedal=record
country: string[20]; // страна
sport: string[20];
// вид спорта
person: string[40]; // спортсмен
kind: TKind; // медаль
end;
var
Form1:
TForm1;
f: file of TMedal; // файл
записей — база данных
implementation
{$R *.DFM}
// активизация формы
procedure
TForm1.FormActivate(Sender: TObject);
var
resp : word; // ответ пользователя
begin
AssignFile(f,
'a:\medals.db');
{$I-}
Reset (f); // открыть
файл
Seek(f, FileSize(f)); //
указатель записи в конец файла
{$I!+}
if lOResult =
0
then buttonl.enabled:=TRUE // теперь кнопка Добавить доступна
else
begin
resp:=MessageDlg('Файл базы данных не найден.'
+ 'Создать новую БД?', mtlnformation,[mbYes,mbNo],0);
if resp = mrYes
then begin {$I-}
rewrite(f); {$!+}
if lOResult =
0
then
buttonl.enabled:=TRUE
else ShowMessage('Ошибка создания файла БД.');
end;
end;
end;
// щелчок на кнопке
Добавить
procedure
TForml.Button1Click(Sender: TObject);
var
medal: TMedal;
begin
with medal do
begin
country := ComboBox1.Text;
sport := ComboBox2.Text;
person := Edit1.Text;
case RadioGroup1.Itemlndex of
0: kind := GOLD;
1: kind := SILVER;
2: kind := BRONZE;
end;
end;
write(f,medal); // записать содержимое полей записи в файл
end;
// завершение работы
программы
procedure TForm1.FormClose(Sender: TObject;
var
Action: TCloseAction);
begin
CloseFile(f); // закрыть файл
end;
end.
В
представленной программе процедура TForm1.FormActivate открывает файл базы
данных для добавления. Здесь следует обратить внимание на то, как это
реализовано. Процедуру AppendFile, которая открывает файл для добавления в
конец, использовать нельзя, т. к. файл не является текстовым. Поэтому файл
сначала открывается процедурой Rewrite в режиме перезаписи, а затем процедура
Seek устанавливает указатель чтения/записи в конец файла. Параметром процедуры
seek является функция Fiiesize, значение которой равно размеру файла (в
байтах).
Процедура
TForm1.Button1Click, которая запускается нажатием кнопки Добавить
(Buttoni), выполняет непосредственное добавление записи в файл. Поля country
и sport добавляемой записи заполняются из свойства Text комбинированных списков
Страна (comboBoxi) и Вид спорта (ComboBox2).
Поле person
формируемой записи заполняется из поля ввода Спортсмен (компонент Editi),
а содержимое поля medal определяется выбранной кнопкой компонента
RadioGroupl.
Процедура
TForm1. FormClose закрывает файл базы данных поскольку тип TMedal
используется двумя процедурами (TForm1.FormActivate и TForm1.Button1Сlick), то его
описание помещено в раздел type модуля формы. Объявление файловой переменной f
по этой же причине помещено в раздел объявления переменных модуля
формы.
В приведенном
варианте программы предполагается, что списки стран и названий видов спорта
формируются при помощи редактора списка строк во время разработки формы. Вместе
с тем, список можно сформировать во время разработки программы. Для этого надо к
свойству items применить метод Add. Например, список стран может быть
сформирован при помощи следующих инструкций (их нужно поместить в процедуру
Tform1.FormActivate):
Form1.ComboBox1.Item.Add('Россия');
Form1.ComboBox1.Item.Add('Австрия');
Form1.ComboBox1.Item.Add('Германия');
Form1.ComboBox1.Item.Add('Франция');