Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Листинг 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 комбинированных списков Страна (comboBox1) и Вид спорта (ComboBox2). Поле person формируемой записи заполняется из поля ввода Спортсмен (компонент Edit1), а содержимое поля 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('Франция');
|