Вывод
записи в файл
Рассмотрим программу,
которая записывает в файл введенные пользователем данные о результатах соревнований,
формируя, таким образом, простую базу данных. Исходные данные вводятся в поля
диалогового окна (рис. 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('Франция');