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