Главная страница

Методичка по лабораторным Delphi. Протокол 11 Зав кафедрой А. А. Прихожий содержание лабораторная работа 1


Скачать 0.58 Mb.
НазваниеПротокол 11 Зав кафедрой А. А. Прихожий содержание лабораторная работа 1
АнкорМетодичка по лабораторным Delphi.doc
Дата04.09.2018
Размер0.58 Mb.
Формат файлаdoc
Имя файлаМетодичка по лабораторным Delphi.doc
ТипПротокол
#24057
страница10 из 10
1   2   3   4   5   6   7   8   9   10

Теоретические сведения

Многостраничный блокнот (PageControl) находится на форме особого вида Tabbed Pages (объект PagesDlg, заголовок "Tabbed Notebook Dialog"). Форму создают командами File => New...=> Закладка Forms => Tabbed Pages => Ok. После её создания ненужную форму "Forml" в случае необходимости можно удалить с помощью кнопки (Remove unit) окна менеджера проекта (Project Manager). Вызов окна менеджера проекта осуществляется командами View => Project Manager. В данной работе активизацию объектов PageControl и PagesDIg можно осуществлять с помощью инспектора объектов. Свойства объекта PagesDIg совпадают со свойствами обычной формы Form. Рассмотрим новые свойства блокнота PageControl:

Свойство

Описание свойства

Примеры значений

ActivePage

Имя активной страницы

TabSheet7

MultiLine


Возможность размещать закладки страниц в не­сколько строк

True (закладки в несколько строк), False (закладки в одну строку)


Свойства отдельной страницы блокнота (объекта TabSheet) аналогичны описанным в предыдущих разделах.

Объект ComboBox предназначен для создания раскрывающегося списка. Его новые свойства такие:


Свойство

Описание свойства

Примеры значений

DropDownCount

Количество строк в раскрывающемся списке, которые видимы без использования полос прокручивания

73

Sorted

Сортировка списка по алфавиту

True (список сортируется), False (не сортируется)

Style

Стиль оформления и использование списка

csOwnerDrawVariable (за­данный программистом), csDropDown (стандартный)

Стандартные диалоги открытия (объект OpenDialog) и сохранение файлов (объект SaveDialog) - это невидимые на форме объекты, предназначенные для создания стандартных в Windows 9х окон: "Open file" и "Save File as" в момент вызова их из про­граммного кода проекта командой OpenDialog1.Execute или SaveDialog1.Execute. Имя выбранного файла возвращается в программу свойством FileName этих объектов.
Ход работы

  1. Загрузите среду визуального программирования Delphi.

2. Откройте новую форму с многостраничным блокнотом.

File => New...=>Other\Закладка Forms => Tabbed Pages = > OK.

3. Выделите и удалите клавишей Delete панель (Panel2) с кнопками OK, Cancel и Нelp в нижней части открытой формы.

4. Поменяйте заголовок формы с «Tabbed Notebook Dialog» на «Телефонный справочник» и поменяйте стиль границы окна (BorderStyle) на Sizeable (способный менять размер).

Для этого сначала в окне Object Inspector в списке компонентов текущей формы выберите объект PagesDlg (окно формы с многостраничным блокнотом). Только теперь можно поменять его заголовок и стиль.

5. Выделите (щелкнув внутри страницы мышью) и удалите (Delete) третью страницу блокнота TabSbeet3.

Будьте внимательны и не удалите весь многостраничный блокнот - объект PageControl1. В случае необходимости вы можете отказаться от неправильного действия командой Edit => Undelete. Добавить новую страницу в блокнот можно командой New Page контекстного меню объекта PageCоntrol (блокнот) или TabSheet (страница блокнота )

6.Замените заголовки (свойство Caption) первой ивторой страниц блокнота

(объектов TabSheetl и TabSbeet2) на «Список всех записей» и «Редактирование и поиск записей» соответственно.

7. Заполните обе страницы формы визуальными объектами так, как это показано на рис. 6 и рис. 7.

Для создания объекта «Комбинированный Список» воспользуйтесь кнопкой (ComboBox) на закладке Standard палитры компонентов. Кнопки «Предыдущий» - «Следующий» называются Button1 - Button4 соответственно. Очистите поля свойства Text объектов Editl - Edit5 и ComboBox1. Установите свойство Style объекта ComboBox1 в csDropDownList (раскрывающийся список)! Задайте следующие значения свойств объекта StringGrid1:

Свойство

Значения

ColCount

4

FixedCols

0

RowCount

100

FixedRows

1

Options => goEditing

True

8. Сохраните выполненную на данный момент форму в своей папке.

9. С помощью мыши задайте ширину столбцов таблицы, например, так, как показано на рис. 6.

Для этого мышью передвиньте границу между двумя столбцами первой (серой) строки таблицы StringGrid1. Не допускайте появления горизонтальной полосы прокручивания в таблице.

10. Добавьте на форму главное меню и введите названия его команд, как показано на рис. 6 и рис. 7.

Для того чтобы провести линию-разделитель, между командами меню «Записать в файл» и «Выход» создайте дополнительный пункт с заголовком «-» (символ «минус»).

Замечание. Подменю «А→Я» и «Я→А» команды «Упорядочить по алфавиту» создают с помощью комбинации клавиш Сtrl+<стрелка вправо> или используют контекстное меню Create Submenu этой команды. Удаление ненужной команды выполняют клавишей Delete.

11. Создайте окно формы «О программе» (см. рис. 8).

Прибавьте к проекту новое окно формы типа About box (File => New... => Other=>Закладки Forms => About box =>> OK). Поменяйте тексты и заголовок формы, указав свою фамилию, например, так, как показано на рис. 8. Поменяйте изображения в окне по своему усмотрению, сменив свойство Picture объекта ProgramIcon.

12. Запрограммируйте команду «О программе» главного меню окна «Телефонный справочник» так, чтобы в момент ее выполнения на экране появлялось только что спроектированное окно.

В заготовку процедуры обработки этой команды введите строку для вызова метода Show (показать) объекта AboutBox:

AboutBox.Show

13. Запрограммируйте кнопку Ok окна «О программе».

Для этого возвратитесь к форме «О программе» и в процедуре OKButtonCIick кнопки OK введите команду закрытия активной формы: Close

Замечание. Окно формы «О программе» находится под другими окнами Delphi.

14. Удалите ненужную пустую форму Form1 из проекта.

Для этого вызовите менеджер проекта командой View => Project Manager. Выделите строку со значением Form1 в поле Form и нажмите клавишу Delete. He сохраняйте эту форму (No). Закройте окно менеджера проекта.

15. Запрограммируйте команду Файл => Выход главной формы.

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

Убедитесь в правильности работы закладок, комбинированного списка, наличия возможности редактировать поля таблицы и перемещаться по ним с помощью полосы прокручивания. Вызовите окно «О программе» и закройте его клавишей OK. Закончите работу командой Файл => Выход.

17. Опишите глобальные переменные и типы данных программы: тип записи телефонного справочника (info), файл записей (r), переменную типа info (r) и целую переменную количества записей (N).

Для этого перед разделом реализации implementation добавьте такие команды:

Info = record {Тип записи}

familia, imja : string[20];

adres : string[100]; tel : string[15];

end; {Эта строка уже есть в заготовке модуля]

var PagesDlg : TPagesDlg;

F : file of info; {Файлзаписей}

r : info; {Одна запись}

N : integer; {Количество записей}

18.Добавьте на форму два объекта - стандартные диалоги Windows для открытия и сохранения файлов.

Кнопки (OpenDialog) и (SaveDialog) находятся на закладке Dialogs панели компонентов Delphi. На рис. 6 и 7 эти объекты расположены в правом верхнем углу формы.

19. Запрограммируйте процедуры открытия и сохранения файлов телефонного справочника (команды главного меню «Прочитать из файла» и «Записать в файл»).

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;

procedure TpagesDlg.N4Click(Sender: TObject);

{Здесь N4 - номер команды. «Записать в файл», у Вас может быть другой номер}

var i : integer;

begin

if SaveDialog1.Execute then

begin AssignFile(F, SaveDialog1.FileName);

Rewrite(F);

i:=1;

while StringGrid1.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;

20. Напишите процедуру создания формы.

В окне инспектора объектов активизируйте объект 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;

21. Напишите процедуру заполнения полей редактирования 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;

22. Напишите процедуру заполнения комбинированного списка NewComboBox.

Сначала к описанию типа класса (объекта) TPagesDlg (многостраничной формы) в разделе interface добавьте декларацию:

type

{Эта запись уже есть в заготовке модуля}

TPagesDlg = class(TForm)

{Необходимо вставить}

procedure NewComboBox;

В раздел implementation добавьте описание этой процедуры:

Procedure TPagesDlg.NewComboBox;

var i, j : integer;

begin {Запоминаем активную позицию комбинированного списка }

j :=ComboBox1.ItemIndex; {Очищаем комбинированный список}

ComboBox1.Clear;

for i:=1 to N do {Длявсех N запись I..}

{В обновленный комбинированный список добавляем все фамилии из первого столбца таблицы}

ComboBox1.Items.Add(StringGrid1.Cells[0, i]);

{Переходим на позицию j}

ComboBox1.ItemIndex :=j; end;

23. Сохраните работу, запустите программу, заполните таблицу данными и убедитесь в том, что программа правильно записывает на диск и считывает с диска файлы телефонных справочников.

24. Запрограммируйте команду главного меню «Сохранить изменения в списке записей».

procedureTPagesDlg.N6Click(Sender: Tobject);

{Здесь N6 - номер команды «Записать в файл», у Вас может быть другой)

var i : integer;

begin

{Определяем номер активной записи}

i :=ComboBox1.ItemIndex+1;

if PageControl1.ActivePage=TabSheet2 then

begin {Если активная вторая страницa}

StringGrid1.Cells[0, i] :=Editl.Text;

{то вносим изменения в первую }

StringGrid1.Cells[l, i] :=Edit2.Text;

StringGridl. Cells[2, i] := Edit3.Text;

StringGrid1.Cells[3, i] := Edit4.Text; end;

{Иначе - вносим изменения во вторую страницу}

else NewEdit(ComboBox1);

{В обоих случаях обновляем комбинированный список}

NewComboBox; end;

25. Запрограммируйте кнопку перехода на предыдущую запись «Предыдущий».

procedure TpagesDlg.ButtonlClick(Sender; Tobject);

begin

if ComboBox1.Itemindex = 0 then {Зацикливаемсписок}

ComboBox1.Itemindex :=N-1 else

{В середине списка показатель уменьшается на единицу}

ComboBox1.Itemindex := ComboBox1.Itemindex -1; {Обновляем панель «Найдена запись»}

NewEdit(ComboBox1); end;

26. Аналогично запрограммируйте кнопку «Следующий».

Программный код созданной процедуры запишите в отчет.

27.Сохраните программу и убедитесь в правильности ее работы.

Запустите программу, считайте с диска файл телефонного справочника, выберите какую-то фамилию в комбинированном списке и поменяйте ее в поле редактирования «Фамилия». Убедитесь в том, что синхронные изменения происходят и в комбинированном списке. Сохраните изменения и используйте кнопки «Предыдущий» и «Следующий» для навигации по записям, убедитесь в зацикливании списка. Удалите одну запись кнопкой «Стереть», сохраните изменения и перейдите на первую страницу. Отредактируйте данные в таблице, сохраните справочник в файле на диске, просмотрите окно «О программе», закончите работу с программой.
Задания:

1. Запрограммируйте кнопку «Удалить» так, чтобы после нажатия на нее удалялись данные из панели «Найдена запись» и из комбинированного списка.

2. Запрограммируйте кнопку «Найти» так, чтобы на панели «Найдена запись» отображалась информация о лице, фамилия которого указана в поле редактирования Edit5 «Введите фамилию». Если такой фамилии нет, то выведите сообщения об этом в отдельном окне.

3. Запрограммируйте команды подменю «А→Я» и «Я→А» пункта главного меню «Сортировать» так, чтобы фамилии в таблице и комбинированном списке были отсортированы в алфавитном или обратном порядке.

4. Удалите команду «Сохранить изменения в списке записей» из главного меню и обеспечьте сохранение изменений в момент редактирования таблицы и полей на панели «Найдена запись».

5. В случае попытки открыть несуществующий файл телефонного справочника обеспечьте появление окна с соответствующим сообщением.

6. В момент выхода из программы обеспечьте появление окна для сохранения файла телефонного справочника в случае, если в нем были сделаны изменения.

Рис.6 Рис.7



Рис. 8

1   2   3   4   5   6   7   8   9   10


написать администратору сайта