Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник лабораторных работ(Delphi).doc
Скачиваний:
33
Добавлен:
16.08.2019
Размер:
3.26 Mб
Скачать

Лабораторная работа №22 Отладка программ

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

Студент должен

знать:

уметь:

Примеры и задания.

События мыши и клавиатуры вызываются воздействиями пользователя на программу. Системные события исходят непо­средственно от Windows.

Событие OnCreate наступает, когда форма создается.

Событие OnShow происходит, когда форма отображается (показана).

Событие OnActive происходит, когда форма становится ак­тивным окном программы (событие генерируется при получе­нии формой фокуса ввода. Это происходит, когда пользователь возвращается в форму из другой формы того же приложения).

Событие OnPaint происходит, когда форму необходимо ото­бразить заново (перерисовать).

Событие OnResize происходит, когда размеры формы изме­няются.

Упражнение 1. Для демонстрации системных собы­тий напишем приложение, содержащее модальное окно.

Решение:

Создайте новый проект. Сохраните новое приложение в пап­ке Exercise8, файл модуля — под именем Main.dpr, файл про­екта — Exercise8.dpr.

Измените значения свойств формы следующим образом:

Name MainF

Caption Главная форма

Создайте обработчики событий OnCreate, OnShow и OnActivate, каждый из которых в заголовок формы выводит свое на­звание, например, в процедуре Form I. FormCreate напишите

Caption: = 'FormCreate';

В обработчике OnPaint формы напишите следующие опера­торы:

With Canvas Do

Begin

Font. Color:=rgb (Random(255),Random(255),Random(255)); Font. Size:=90; (Size=-Height*72/PixelsPerInch}

Font. Style:= [fsBold, fsUnderLine];

Brush.Color:=clBtnFace;

TextOut(30, 100, 'Delphi1)

end;

Свойство Font (шрифт), как и свойство Canvas, обладает на­бором собственных свойств и методов. Так, свойство Size задает размер символов, a Style — стиль начертания, здесь задан по­лужирный с подчеркиванием.

Добавим в проект еще одну форму, выполнив команду New Form меню File.

Измените значения свойств формы следующим образом:

Name MainF

Caption Вторая форма

Сохраните модуль формы под именем Modal.

Напишите обработчики событий OnCreate, OnShow и OnActivate, подобные тем, что написали для первой формы.

В обработчике события OnPaint второй формы напишите оператор:

Caption:=IntToStr (Random(lOOO));

при возникновении этого события в заголовке формы будет ото­бражаться случайное число из интервала от 0 до 1000.

Подключите модуль второй формы к первой, выполнив коман­ду Use unit... меню File, в появившемся диалоговом окне выбе­рите Modal. Для того чтобы вторая форма отображалась во вре­мя выполнения приложения, в обработчике события OnDblClick первой формы напишите оператор

ModalF.Show;

Приложение написано. Сохраните файлы проекты, выпол­нив команду Save All ... меню File.

Установим точки прерывания.

1-й способ. Установите точку прерывания, щелкнув мышью на левом краю окна редактирования. При этом выбранная для остановки строка выделяется красной полосой, на левом краю строчки появляется маленький значок (рис. 2.3.4.3.1).

2-й способ. Выполните команду Run/Add Breakpoint/Source Breakpoint... Появится диалоговая панель редактирования то­чек прерывания Edit Breakpoint с несколькими полями, среди которых не только координаты файла и номер строки (где бу­дет задана точка прерывания), но и некоторые другие полезные данные. Например, Вы можете задать параметр Condition, где ввести выражение, при истинности которого точка прерывания «сработает», иначе выполнение приложения не будет прервано при прохождении через эту строку. Дополнительно можно за­дать количество проходов, после которых точка прерывания переходит в активное состояние.

Рис. 1

Установите точки останова в обработчике каждого события и расположите формы и окно редактирования так, как показа­но на рис.1.

Эксперимент. Запустите приложение. Проследите за вы­полнением приложения по шагам. Первая остановка произой­дет на процедуре MainF.FormCreate (это говорит о том, что прои­зошло событие создания первой формы), продолжите выполнение приложения, выполнив команду Run меню Run.

Установите, какие события возникают при запуске прило­жения и в какой последовательности.

Попробуйте переместить форму по экрану, минимизировать и восстановить, изменить ее размеры. Какие события при этом происходят, как изменяется вид окна?

Для вызова второй формы дважды щелкните левой кнопкой мыши по форме. Поэкспериментируйте со второй формой: пе­реместите вторую форму, измените ее размеры, сверните и рас­кройте окно формы. Что при этом происходит с формами? По­пробуйте это объяснить.

Закройте приложение. Добавьте в обработчик события OnResize первой формы оператор: RePaint (метод Repaint по­рождает событие OnPaint, что заставляет форму немедленно пе­рерисоваться) .

Запустите приложение и поэкспериментируйте с ним. Какие изменения произошли в поведении формы? Попробуйте объяс­нить их. ♦

События, генерируемые операционной системой при закры­тии окна:

Событие OnDeActivate происходит, когда форма теряет фо­кус ввода.

Событие OnHide происходит, когда форма становится неви­димой.

Событие OnCloseQuery происходит при вызове метода Close, или при выборе команды Close из системного меню формы, или при щелчке на кнопке закрытия окна. Это событие использует­ся для определения условий, при которых форма может закры­ться.

procedure TMainF.FormCloseQuery (Sender: TObject; varCanClose: Boolean);

Логический параметр CanClose определяет, может ли форма закрыться или нет; его значение по умолчанию равно True.

Например, Вы можете использовать обработчик OnCloseQuery, чтобы спросить пользователя, действительно ли он хочет не­медленно закрыть форму:

procedure TMainF.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin

if MessageDlg('Вы действительно хотите завершить работу?',mtConfirmation,[mbOk,mbNo],0)=mrNo then CanClose:=False; and;

В этом фрагменте кода использована функция MessageDlg, отображающая диалоговое окно в центре экрана. Первый пара­метр этой функции — это сообщение, которое выводится в окне. Второй параметр — тип окна — может принимать следу­ющие значения: mtWarning (предупреждение), mtError (ошиб­ка), mtlnformation (информация), mtConf irmation (подтверж­дение). Третий параметр определяет, какие кнопки должны появиться в диалоговом окне, его значения — mbYes, mbNo, inbOK, mbCancel, mbAbort, mbRetry, mblgnore, mbAll, mbHelp. Четвертый параметр — для определения темы помощи, кото­рая должна появиться, когда пользователь щелкает на кнопке помощи или нажимает F1 во время отображения диалогового окна.

Событие OnClose происходит, когда имело место событие OnCloseQuery, в результате чего форма закрывается.

procedure TMainF.FormClose(Sender: TObject; var Action:

Tt: 1oseAction);

Значение параметра Action определяет, закрывается ли фор­ма фактически. Параметр может принимать следующие значе­ния:

caNone Форме не разрешается закрываться.

caHide Форма не закрывается, а просто становится

скрытой. Ваше приложение может иметь доступ к скрытой форме.

caFree Форма закрывается, и вся память, занятая

формой, освобождается.

caMinimize Форма минимизируется, прежде чем закрыться. Это значение параметра установлено по умолчанию для дочерних окон MDI-приложений.

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