Вывод записи в файл

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


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: