Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы Delphi / Лабораторная работа 3

.doc
Скачиваний:
31
Добавлен:
17.04.2015
Размер:
89.09 Кб
Скачать

Лабораторная работа № 3

Системные события

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

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

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

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

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

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

Для демонстрации этих событий напишем небольшое приложение.

Создайте новый проект. Сохраните новое приложение в каталоге c:\User\lab3\Exercise1, файл модуля – под именем Main1, файл проекта – exercise1.

Создайте обработчики событий OnCreate, OnShow и OnActivate, каждый, из которых в заголовок формы выводит свое название, например, в процедуре Form1.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,'Delphi')

End;

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

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

Напишите обработчики событий OnCreate, OnShow и OnActivate подобные тем, что написали для первой формы. В обработчике события OnPaint второй формы напишите оператор: Caption:=IntToStr(Random(1000)); при возникновении этого события в заголовке формы будет отображаться случайное число из интервала от 0 до 1000.

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

Приложение написано.

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

Рисунок 1. Установка точек прерывания в Delphi.

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

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

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

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

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

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

Рассмотрим еще несколько системных событий.

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

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

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

Procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

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

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

Procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

Begin

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

End;

В этом фрагменте кода использована функция MessageDlg, отображающая диалоговое окно в центре экрана. Первый параметр этой функции – это сообщение, которое выводится в окне. Второй параметр – тип окна, может принимать следующие значения: mtWarning (предупреждение), mtError (ошибка), mtInformation (информация), mtConfirmation (подтверждение). Третий параметр определяет, какие кнопки должны появится в диалоговом окне, его значения - mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbHelp. Четвертый параметр – для определения темы помощи, которая должна появиться, когда пользователь щелкает по кнопке помощи или нажимает F1 время отображения диалогового окна.

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

Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

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

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

caHide Форма не закрывается, а просто становится скрытой. Ваше приложение может иметь доступ к скрытой форме.

caFree Форма закрывается и вся память, занятая формой освобождается.

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

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

Изучите, в какой последовательности происходят перечисленные выше события, установив в соответствующих обработчиках событий точки останова.

Задания для самостоятельного выполнения

  1. Напишите приложение, в заголовке окна которого описан его размер (высота и ширина), а в окне изображен прямоугольник, стороны которого расположены на расстоянии 10 пикселей от границ окна, независимо от размеров окна.

  2. Создайте приложение с заставкой. Приложение должно состоять из двух форм. На первой форме появляется сообщение о создателе приложения и о том, что при двойном щелчке по форме появится заставка. Окно заставки черного цвета, без заголовка, занимает весь экран (изучите свойства формы BorderStyle и WindowState). В окне заставки в произвольном месте формы должны появляться попеременно эллипсы и прямоугольники разного цвета и размера (можно воспользоваться компонентом Timer, расположенным на странице System). Приложение должно закрываться при нажатии любой клавиши клавиатуры, предварительно выдав сообщение, уточняющее, точно ли пользователь хочет закрыть приложение.

  3. Вернемся к приложению из лабораторной работы 1, в котором мы рисовали отрезки. При восстановлении формы после минимизации изображение исчезает. Устраните этот недочет.