Вывод записи в файл
Рассмотрим программу, которая записывает в файл введенные пользователем данные о результатах соревнований, формируя, таким образом, простую базу данных. Исходные данные вводятся в поля диалогового окна (рис. 8.1) и сохраняются в файле, компонентами которого являются записи типа TMedal.
Рис. 8.1. Окно программы Добавление записи в файл
Для ввода фамилии спортсмена применяется поле редактирования (компонент Edit). Для ввода названия вида спорта и страны используются компоненты ComboBox (комбинированный список).
Компонент ComboBox, значок которого находится на вкладке Standard (рис. 8.2), дает возможность ввести данные либо непосредственно в поле ввода-редактирования, либо путем выбора из списка, который появляется в результате щелчка на кнопке раскрывающегося списка.
Рис. 8.2. Значок компонента ComboBox В табл. 8.1 перечислены свойства компонента ComboBox.
Таблица 8.1. Свойства компонента ComboBox
| | | | | | | | | | Имя компонента. Используется для доступа к свойствам компонента
| | | | Текст, находящийся в поле ввода-редактирования
| | | | Элементы раскрывающегося списка
| | | | Количество отображаемых элементов в раскрытом списке
| | | | Расстояние от левой границы компонента до левой границы формы
| | | | Расстояние от верхней границы компонента до верхней границы формы
| | | | Высоту компонента (поля ввода-редактирования)
| | | | | | | | Шрифт, используемый для отображения элементов списка
| | | | Признак наследования свойств шрифта родительской формы
| | | | | |
Список, который появляется в результате щелчка на кнопке раскрытия списка, может быть сформирован как в процессе разработки формы приложения, так и во время работы программы. Чтобы сформировать список во время разработки формы, нужно в окне 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('Франция');
Источник: http://qo.do.am/index/teorija_po_programirovaniju/0-47 СОДЕРЖАНИЕ Delphi 7 |