Сохраните работу и запустите проект на выполнение.
Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и перемещаться по ним с помощью полосы прокручивания. Вызовите окно «О программе» и закройте его клавишей OK. Закончите работу командой Файл => Выход.
17. Опишите глобальные переменные и типыданныхпрограммы: тип записи телефонного справочника (info), файл записей(r), переменную типа info (r) и целую переменную количества записей (N).
Для этого перед разделом реализации implementationдобавьте такие команды:
Info = record{Тип записи}
familia, imja : string[20];
adres : string[100]; tel : string[15];
end;{Эта строка уже есть в заготовке модуля]
varPagesDlg : TPagesDlg;
F : file of info; {Файл записей}
r : info; {Одна запись}
N : integer; {Количество записей}
18.Добавьте на форму два объекта - стандартные диалоги Windows для открытия и сохранения файлов.
Кнопки (OpenDialog) и (SaveDialog) находятся на закладке Dialogs панели компонентов Delphi. На рис. 6 и 7 эти объекты расположены в правом верхнем углу формы.
Запрограммируйте процедуры открытия и сохранения файлов телефонного справочника (команды главного меню «Прочитать из файла» и «Записать в файл»).
procedure TPagesDlg.N3Click(Sender: Tobject);
{Здесь N3 - номер команды. «Прочитать из файла», у Вас может быть другой номер}
var i: integer;
Begin
{Выполнение стандартного диалога «Open file»}
if OpenDialog1.Execute then begin
{F - название выбранного диалогом файла (свойство FileName объекта OpenDialog1)}
AssignFile(F,OpenDialog1.FileName);
Reset(F);
N := 0; {Читаем с начала файла} {Считываем все записи из файла}
While not eof(F) do
begin{В переменную r считываем текущую запись}
Read(F,r);
{Фамилия - в первый столбец таблицы}
StringGridl.Cells[0, N+l] := r.familiа; {Имя - во второй столбец таблицы}
StringGridl.Cells[1,N+1] := r.imja; {Адрес - в третий столбец таблицы}.
StringGridl.Cells[2,N+l] := r.adres; {Телефон - в четвертый столбец таблицы}
StringGridl.Cells[3,N+l]:= r. tel;
N :=N + 1; {Увеличиваем общее число записей N}
end;
CloseFile(F); {Закрываем файл}
{Описанная ниже процедура заполняет поля редактирования второй страницы формы}
NewEdit(ComboBox1);
{Описанная ниже процедура заполняет комбинированный список второй страницы формы}
NewComboBox;
end; end;
procedureTpagesDlg.N4Click(Sender: TObject);
{Здесь N4 - номер команды. «Записать в файл», у Вас может быть другой номер}
var i : integer;
Begin
if SaveDialog1.Execute then
beginAssignFile(F, SaveDialog1.FileName);
Rewrite(F);
i:=1;
whileStringGrid1.Cells[3, i]<> ' ' do begin
r.familia:= StringGrid1.Cells[0, i];
r.imja := StringGrid1.Cells[l, i];
r.adres := StringGrid1.Cells[2, i];
r.tel := StringGrid1.Cells[3, i];
Write(F,r);
i:=i + l;
end;
CloseFile(F);
end; end;
Напишите процедуру создания формы.
В окне инспектора объектов активизируйте объект PagesDlg (окно формы с многостраничным блокнотом) и дважды щелкните в строке OnCreate (МоментСоздания) закладки Events этого объекта. Сформируйте процедуру создания главной формы программы:
procedure TpagesDlg.FormCreate(Sender: TObject);
begin{Заполняем заголовок таблицы}
StringGrid1.cells[0, 0] := 'Фамилия';
StringGrid1.cells[1, 0] := 'Имя';
StringGrid1.cells[2, 0] := 'Адрес';
StringGrid1.cells[3, 0] := 'Телефон';
{Создаем пустую строку в комбинированном списке}
ComboBox1. Items. Add(' ');
{Активизируем эту строку на случай создания нового справочника}
ComboBox1 .ItemIndex:=0; end;
Напишите процедуру заполнения полей редактирования NewEdit.
Вызов этой процедуры осуществляется, в частности, в момент выбора фамилии для поиска, то есть в момент смены активной строки в комбинированном списке. Поэтому для инициализации заготовки этой процедуры активизируйте на закладке Events окна Object Inspector объекта ComboBox1 строку OnChange (МоментЗамены) и в правом столбце укажите название процедуры реакции на это событие: NewEdit. Дважды щелкните мышью, указав на введенное название и заполните заготовку этой процедуры следующим образом:
procedure TPagesDlg.NewEdit(Sender: Tobject);
var i : integer;
begin
{i - номер строки данных в таблице}
i :=ComboBoxl.ItemIndex+ 1;
if i>0 then begin
{Для значащих позиций комбинированного списка}
Editl.Text := StringGrid1.Cells[0, i]; {копируем данные 1-го записи с}
Edit2.Text := StringGrid1.Cells[l, i]; {первой страницы формы в}
Edit3.Text := StringGrid1.Cells[2, i]; {соответствующие поля на второй странице}
Edit4.Text := StringGrid1.Cells[3, i];
end; end;