Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа БД.doc
Скачиваний:
66
Добавлен:
20.05.2015
Размер:
3.07 Mб
Скачать

Лабораторная работа № разработка интерфейса пользователя программной системы

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

Задачи лабораторной работы:

• Изучить наборы компонентов «Additional», «Win32» и «Dialogs».

• Отработать технологию передачи данных между окнами приложения.

• Научиться работать со стандартными диалогами Windows.

Указания по выполнению работы

Многооконное приложение в среде Delphi 7 представляет собой набор форм, взаимодействующих между собой и, как правило, с некоторым набором данных (которые хранятся в оперативной или дисковой памяти). Основная задача данной работы–изучить технологию передачи данных между несколькими формами.

Условным примером будет служить программа–ежедневник. Основные задачи:

− записать, удалить или отредактировать событие;

− просмотреть список событий.

Порядок выполнения работы:

1.Запустите Delphi7:Пуск\Программы\Borland Delphi 7\Delphi7.

2.Создайте новый проект. Сохраните его в новую папку на Вашем диске под именем Lab4.

3.На первой форме расположим главное меню приложения. На панели компонент Standard выберите компоненту TMainMenu и расположите ее на форме. Дважды нажмите на ней левую кнопку мыши. В меню верхнего уровня создайте два пункта: Файл и Событие. В меню Файл создайте подпункты Сохранить, Загрузить и Выход. В меню Событие создайте подпункты Добавить, Удалить и Корректировать (см. Рис. 1).

4.Нажмете два раза на подпункт Выход созданного главного меню. В открывшейся процедуре TForm1.N5Click напишите оператор close. Запросите у пользователя подтверждение на выход из программы, для этого обработайте событие закрытия формы (событие OnClose для формы Form1). Нажмите на событие OnClose в инспекторе объектов и далее клавишу F1. Изучите справку по событию OnClose и обратите внимание, что если возвращаемая переменная Action примет значение caNone, то форма не будет закрыта. Следовательно, если пользователь не подтвердит закрытие формы, то в обработчике события OnClose необходимо выполнить присвоение переменной Action значения caNone. Напишите обработчик. Результат–см. рис. 2.

Рис. 1. Создание главного меню приложения

Рис. 2. Процедура TForm1.FormClose

5.Запустите программу. Проверьте работу написанного вами обработчика, попробовав закрыть форму через главное меню окна или через меню Файл\Выход.

6.Отключите возможность пользовательского изменения размера экрана. Для этого у формы Form1 установите свойство BorderIcons\biMaximize в false и BorderStyle в bsSingle.

7.Создайте еще одну новую форму (File\New Form). Для первой формы (Form1) запишите в свойство CaptionЕжедневник (Фамилия Автора) рис.6.3., а для второй (Form2) – Просмотр Событий рис.4.

Рис. 3. Вид формы Form1

Рис. 4. Вид формы Form2

8.На панели компонент выберите дополнительные компоненты (закладка Additional). Разместите на форме Form2 компонент TBitBtn. Установите для его свойства Kind значение bkОК – это будет кнопка закрытия формы. Разместите на форме Form2 еще одну такую же кнопку. Установите для ее свойства Kind значение bkCancel – это будет кнопка отмены закрытия формы. Исправьте надпись на кнопке с «Cancel» на «Отмена».

9. Перейдите в конструкторе форм к форме Form1 и в главном меню нажмите на пункт Событие\Добавить. В процедуре TForm1.N6Click впишите оператор модального вызова второй формы:

Form2.ShowModal; (модальный вызов означает, что в данном приложении активным может быть только модально вызванное окно).

Здесь же, в тексте первого модуля (Unit1) перейдите выше в раздел Uses после зарезервированного слова implementation и допишите там: Unit2. Это необходимо для того, чтобы из первой формы мы могли вызывать вторую.

10.Отключите возможность пользовательского изменения размера и закрытия окна формы Form2 (скорректируйте свойства BorderIcons и BorderStyle у формы Form2).

11.Сохраните, запустите проект и проверьте его работу.

12.Разместите на форме Form1 компонент TStringGrid(набор компонент Additional). Установите для нее свойства ColCount3, RowCount1, FixedCols0, FixedRows0, DefaultRowHeight16, Options\goRowSelect-true. Возможный вид формы приведен на рис. 3.

13.Сформируйте заголовок таблицы событий. Для этого в обработчике событий OnCreate формы Form1 (это событие генерируется при создании формы) запишите заголовок в таблицу следующими операторами:

StringGrid1.cells[0,0]:='Дата'; StringGrid1.cells[1,0]:='Время'; StringGrid1.cells[2,0]:='Событие';

14.Сохраните, запустите проект и проверьте его работу.

15. Разместите на форме Form2 компоненты (см. рис. 4.):

− две компоненты TLabel (надписи Время и Событие),

TMemo,

TMonthCalendar и TDateTimePicker (закладка Win32 панели компонент). При этом для TDateTimePicker в свойстве Kind установите значение dtkTime.

16. Скорректируйте процедуру TForm1.N6Click в модуле Unit1 следующим образом:

procedure TForm1.N6Click(Sender: TObject);

begin

if Form2.ShowModal=mrOK then

{Если Form2 закрыта кнопкой OK}

begin

StringGrid1.cells[0,StringGrid1.RowCount]:=

DateToStr(Form2.MonthCalendar1.Date);

{Получить дату из Form2}

StringGrid1.cells[1,StringGrid1.RowCount]:=

TimeToStr(Form2.DateTimePicker1.Time);

{Получить время из Form2}

StringGrid1.cells[2,StringGrid1.RowCount]:=

{Получить текст события из Form2}

Form2.Memo1.Text;

{Увеличить число строк в таблице}

StringGrid1.RowCount:=StringGrid1.RowCount+1;

StringGrid1.FixedRows:=1;

end;

end;

17.Сохраните, запустите проект и проверьте его работу. Ежедневник должен заполняться записями.

18.Организуйте удаление записей. Схема удаления представ-лена на Рис.5.

Рис. 5. Схема удаления строк

19.Зайдите в процедуру, вызываемую по нажатию пункта Событие\Удалить (TForm1.N7Click) и откорректируйте обработчик события следующим образом:

procedure TForm1.N7Click(Sender: TObject); var i: integer; begin

for i:=StringGrid1.Row to StringGrid1.RowCount-1 do StringGrid1.Rows[i]:=StringGrid1.Rows[i+1]; if StringGrid1.RowCount>1

then StringGrid1.RowCount:=StringGrid1.RowCount-1; end;

20.Сохраните, запустите проект и проверьте его работу.

21.Следующий этап создания программы–коррекция событий в ежедневнике. Для этого перед вызовом формы Form2 необходимо присвоить начальные значения ее полям из редактируемой строчки. Далее–аналогично добавлению. Зайдите в процедуру, вызываемую по нажатию пункта Событие\Корректировать(TForm1.N8Click) и откорректируйте ее следующим образом:

procedure TForm1.N8Click(Sender: TObject); begin if StringGrid1.Row<>0 then

{если в таблице более 1 строки}

begin

Form2.Memo1.Text:= StringGrid1.cells[2,StringGrid1.Row]; Form2.MonthCalendar1.Date:= StrToDate(StringGrid1.cells[0,StringGrid1.Row]);

Form2.DateTimePicker1.Time:= StrToTime(StringGrid1.cells[1,StringGrid1.Row]); if Form2.ShowModal=mrOK then

{если Form2 закрыта кнопкой OK}

begin

StringGrid1.cells[0,StringGrid1.Row]:= DateToStr(Form2.MonthCalendar1.Date); StringGrid1.cells[1,StringGrid1.Row]:=

TimeToStr(Form2.DateTimePicker1.Time); StringGrid1.cells[2,StringGrid1.Row]:= Form2.Memo1.Text; end; end; end;

22. Сохраните, запустите проект и проверьте его работу рис.6.

Рис. 6. Работа пункта меню Событие\Корректировать

23. Последний этап работы – научиться сохранять и считывать файлы.

Сохранять результаты работы будем в типизированный файл следующей структуры:

DateS -string [8] дата;

TimeS -string [5] время; 1 – е событие

EvenS -string [200] событие;

______________________________________________________________________________________________

DateS -string [8] дата;

TimeS -string [5] время; 2 – е событие и т.д.

EvenS -string [200] событие;

25.В начало модуля Unit1 в раздел Type после описания класса формы TForm1 добавьте описание типов записи и файла, как это показано на Рис. 6.7.

Рис. 7. Объявление типов записи и файла

26.Откройте закладку Диалоги (Dialogs) на панели компонент. Добавьте на форму Form1 два диалога: TSaveDialog и TOpenDialog.

27.Откройте процедуру, выполняемую по нажатию пункта Файл\Сохранить -TForm1.N3Click. Измените ее в соответствии с рис. 8.

28.Сохраните, запустите проект и проверьте его работу. Добавьте в ежедневник несколько событий и сохраните результат. Откройте созданный вами файл какой–либо программой просмотра (например, F3 в Far). Попробуйте найти фрагменты сохраненного вами события.

Рис. 8. Текст процедуры записи в файл

29.Откройте на редактирование процедуру, выполняемую по нажатию пункта Файл\Загрузить-TForm1.N4Click. Измените ее в соответствии с Рис.9.

30.Сохраните, запустите проект и проверьте его работу.

32.Для компоненты StringGrid1 формы Form1 выберите событие OnDblClick и из выпадающего списка выберите N8Click. Таким образом, по двойному нажатию на элемент списка будет происходить то же самое, что и при нажатии пункта меню Событие\Корректировать.

33.Сохраните, запустите проект и проверьте его работу.

Рис. 9. Процедура чтения событий из файла