Висновок запису в файл

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