Сохраните работу и запустите проект на выполнение.

Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и перемещаться по ним с помощью полосы прокручивания. Вызовите окно «О программе» и закройте его клавишей 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;

Наши рекомендации