Рассмотрим программу, которая записывает в файл введенные пользователем данные о результатах соревнований, формируя, таким образом, простую базу данных. Исходные данные вводятся в поля диалогового окна (рис. 8.1) и сохраняются в файле, компонентами которого являются записи типа TMedai.

Рис. 8.1. Окно программы Добавление записи в файл

Для ввода фамилии спортсмена применяется поле редактирования (компонент Edit). Для ввода названия вида спорта и страны используются компоненты comboBox (комбинированный список).

Рис. 8.2. Значок компонента СотЬоВох

Компонент comboBox, значок которого находится на вкладке Standard (рис. 8.2), дает возможность ввести данные либо непосредственно в поле ввода-редактирования, либо путем выбора из списка, который появляется в результате щелчка на кнопке раскрывающегося списка.

В табл. 8.1 перечислены свойства компонента comboBox.

Таблица 8.1. Свойства компонента ComboBox

Свойство Определяет

Name Имя компонента. Используется для доступа к свойствам компонента

Text Текст, находящийся в поле ввода-редактирования

items Элементы раскрывающегося списка

DropDownCount Количество отображаемых элементов в раскрытом списке

Left Расстояние от левой границы компонента до левой границы формы

Таблица 8.1 (окончание)

Свойство

Определяет

Тор

Расстояние от верхней границы компонента до верхней границы формы

Height

Высоту компонента (поля ввода-редактирования)

Width

Ширину компонента

Font

Шрифт, используемый для отображения элементов списка

ParentFont

Признак наследования свойств шрифта родительской формы

Список, который появляется в результате щелчка на кнопке раскрытия списка, может быть сформирован как в процессе разработки формы приложения, так и во время работы программы. Чтобы сформировать список во время разработки программы, нужно в окне Object Inspector выбрать свойство Items, щелкнуть на кнопке активизации редактора списка строк и ввести элементы списка.

Текст программы приведен в листинге 8.1.

Листинг 8.1. Добавление записей в файл

unit apprec_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForml = class(TForm) Label1: TLabel;
Label2: TLabel;
Label3: TLabel;

Editl: TEdit; // спортсмен

ComboBoxl: TComboBox; // страна

ComboBox2: TComboBox; // вид спорта

RadioGroupl: TRadioGroup; // медаль Buttonl: TButton; // кнопка Добавить

Label5: 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
Forml: TForml;

f: file of TMedal; // файл записей - база данных implementation

{$R *.DFM} // активизация формы

procedure TForml.FormActivate(Sender: TObject); var
resp : word; // ответ пользователя begin
AssignFile(f, 'a:\medals.db');
{$14

Reset(f); // открыть файл

Seek( f, FileSize(f)); // указатель записи в конец файла {$!+} if IOResult = 0

then buttonl.enabled:=TRUE // теперь кнопка Добавить доступна else begin resp:=MessageDlg('Файл базы данных не найден.'+ 'Создать новую БД?', mtInformation,[mbYes,mbNo],0); if resp = mrYes then begin {$14

rewrite(f); {$!+} if IOResult = О

then buttonl.enabled:=TRUE
else ShowMessage('Ошибка создания файла БД.');
end;
end;
end;

// щелчок на кнопке Добавить

procedure TForml.ButtonlClick(Sender: TObject); var
medal: TMedal;
begin
with medal do begin
country := ComboBoxl.Text;
sport := ComboBox2.Text;
person := Editl.Text;
case RadioGroupl.Itemlndex of
0: kind := GOLD;
1: kind := SILVER;
2: kind := BRONZE;
end;
end;
write(f, medal); // записать содержимое полей записи в файл end;

// завершение работы программы

procedure TForml.FormClose(Sender: TObject; var Action: TCloseAction); begin CloseFile( f); // закрыть файл

end;
end.

В представленной программе процедура TForml.FormActivate открывает файл базы данных для добавления. Здесь следует обратить внимание на то, как это реализовано. Процедуру AppendFile, которая открывает файл для добавления в конец, использовать нельзя, т. к. файл не является текстовым. Поэтому файл сначала открывается процедурой Rewrite в режиме перезаписи, а затем процедура seek устанавливает указатель чтения-записи в конец файла. Параметром процедуры seek является функция Fiiesize, значение которой равно размеру файла (в байтах).

Процедура TForml.Buttoniciick, которая запускается нажатием кнопки Добавить (Buttonl), выполняет непосредственное добавление записи в файл.

Поля country и sport добавляемой записи заполняются из свойства Text комбинированных списков Страна (comboBoxi) и Вид спорта (сотЬоВох2).

( Примечание J

Во время создания формы приложения нужно установить значение свойства items компонентов ComboBoxi и ComboBox2 - названия стран и видов спорта.

Поле person заполняется из поля Спортсмен (Editi). Значение поля medal определяется выбранной кнопкой компонента RadioGroupl.

Процедура TFormi. Formciose закрывает файл базы данных.

Поскольку тип TMedal используется двумя процедурами (TForml.FormActivate и TForml.Buttonlciick), то сю описание помещено в раздел type модуля формы. Объявление файловой переменной f по этой же причине помещено в раздел объявления переменных модуля формы.

В приведенном варианте программы предполагается, что списки стран и названий видов спорта формируются при помощи редактора списка строк во время разработки формы. Вместе с тем, список можно сформировать во время разработки программы. Для этого надо к свойству items применить метод Add. Например, список стран может быть сформирован при помощи следующих инструкций (их нужно поместить в процедуру Tforml. FormActivate):

Forml.ComboBoxi.Item.Add('Россия');
Forml.ComboBoxi.Item.Add('Австрия');
Forml.ComboBoxi.Item.Add('Германия');
Forml.ComboBoxi.Item.Add('Франция');

Ввод и вывод записей в файл || Оглавление || Ввод записи из файла


Delphi 6. Программирование на Object Pascal



Новости за месяц

  • Ноябрь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс