Розглянемо програму, демонструє процес читання і обробки записів файлу. Програма Читання записів з файлу, діалогове вікно якої представлено на рис. 8.4, а текст – в лістингу 8.2, відкриває файл, сформований програмою Додавання запису в файл, і, в залежності від того, який з перемикачів всі або вибрати – встановлений, виводить список медалей, виграних відповідно представниками всіх країн або країни, назва якої введено в поле Країна. Для виведення результату читання з файлу використовується компонент Memol.
У табл. 8.2 наведені значення властивостей компонентів форми.
Так як компонент Memol призначений тільки для перегляду інформації, то властивості Readonly (тільки читання, перегляд) присвоєно значення True. Властивість scroiiBars (смуги прокрутки) компонента Memo дозволяє задавати відображаються смуги прокрутки. За замовчуванням властивості scroiiBars присвоєно значення ssNone, т. е. смуги прокрутки не відображаються. У розглянутому прикладі виводиться вертикальна смуга, тому властивості ScroiiBars присвоєно значення ssVertical.
Таблиця 8.2. Значення властивостей компонентів
Властивість | Значення |
RadioButton1. Checked | True |
Label1 .Enabled | False |
ComboBox1. Enabled | False |
Memo1. Readonly | True |
Memo1. ScroiiBars | ssVertical |
Для введення назви країни використовується компонент ComboBox1, що дозволяє задавати ім’я не тільки прямим введенням назви, але і вибором зі списку. Список країн потрібно сформувати під час створення форми шляхом присвоєння значення властивості items.
Щоб відразу після запуску програми список вибору країни був недоступний (т. к. обраний перемикач всі групи Показати), властивості Enabled компонентів ComboBox1 і Label1 під час створення форми потрібно присвоїти значення False.
Список введення-вибору назви країни (ComboBox1) стає доступним в результаті вибору під час роботи програми перемикача вибрати. Процедура обробки події Onclick на перемикачі RadioButton2 робить доступним поле ComboBox1.
Рис. 8.4. Вікно програми Читання записів з файлу
Лістинг 8.2. Читання записів з файлу
unit rdrec_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = Class (TForm) RadioButton1: TRadioButton; // перемикач Все RadioButton2: TRadioButton; // перемикач Вибрати // текст Країна Button1: TButton; GroupBox1: TGroupBox; Label1: TLabe1; procedure Button1Click (Sender: TObject); procedure RadioButton2Click (Sender: TObject); procedure RadioButton1Click (Sender: TObject); ComboBox1: TComboBox; // комбінований список // для введення назви країни Memol: TMemo; // поле виведення записів, які відповідають // умові запиту private { Private declarations} public { Public declarations} end; var Form1: TForm1; implementation {$ R * .DFM} procedure TForm1.Button1Click (Sender: TObject); type // тип медалі TKind = (GOLD, SILVER, BRONZE); // запис файлу TMedal = record country: string [20]; sport: string [20]; person: string [40]; kind: TKind; end; var f: file of TMedal; // файл записів rec: TMedal; // запис, прочитана з файлу n: integer; // кількість записів, які відповідають запиту st: string [80]; begin AssignFile (f, 'a: \ medals.db'); {$ I-} Reset (F); // відкрити файл для читання {$ I-} if IOResult <> 0 then begin ShowMessage ( 'Помилка відкриття файлу БД. '); Exit; end; // обробка БД if RadioButton2.Checked then Memo1.Lines.Add ( '*** '+ ComboBox1.Text +' *** '); n: = 0; Memol.Clear; // очистити список поля Memo while not EOF (f) do begin read (f, rec); // прочитати запис if RadioButton1.Checked or (rec.country = ComboBoxl.Text) then begin n : = N + 1; st : = Rec.person + ',' + rec.sport; if RadioButtonl.Checked then st : = St + ',' + rec.country; case rec.kind of GOLD: st: = st + ', золото'; SILVER: st : = St + ', срібло'; BRONZE: st : = St + ', бронза'; end; Memo1.Lines.Add (st); end; end; CloseFile (f); if n = 0 then ShowMessage ( 'В БД немає запитуваної інформації. '); end; // перемикач Вибрати procedure TForm1.RadioButton2Click (Sender: TObject); begin Label1.Enabled : = True; ComboBox1.Enabled : = True; // тепер поле Країна є ComboBox1.SetFocus; // курсор в поле Країна end; // перемикач Все procedure TForm1.RadioButton1Click (Sender: TObject); begin Label1.Enabled : = False; ComboBox1.Enabled : = False; // тепер поле Країна не є end; end.
Процедура TForm1.Button1Click відкриває файл і послідовно зчитує знаходяться в ньому записи. вміст записи додається в поле Memol, якщо прочитана запис задовольняє умові запиту, т. е. вміст поля country збігається з назвою країни, введеним користувачем в поле редагування компонента ComboBox1, або якщо обраний перемикач RadioButton1.
Інформація в поле Memo додається інструкцією Memo1.Lines.Add (st), яка є інструкцією застосування методу Add (Додати) до компоненту Memo1.
Примітка
Поняття “метод” буде детально розглянуто далі, в розділі, присвяченому об’єктно-орієнтованому програмування. Зараз тільки скажемо, що метод-це процедура, інструкція виклику якої записується особливим чином з метою показати, що одним з її параметрів є об’єкт.