Типы событий компонентов — Delphi(Делфи)

Типы событий компонентов.

Все события условно можно разделить на три категории: события мыши, события клавиатуры и системные события.

После того как программа для Windows загрузилась в память и выполнила некий код инициализации, она ничего не делает. Здесь нет «следующего шага». Ничего не происходит, пока не возникнет некоторое событие (event) — только в этом случае будет реакция программы. Вместо списка команд она содержит набор алгоритмов, определяющих ее действия для различных событий.

В Delphi эти планы носят название обработчиков событий (event handlers) и призваны реагировать на множество различных событий.

1.События мыши

1.1 OnClik — отвечает событие, которое происходит при одном нажатии левой кнопки мыши. Событие OnClick является самым популярным событием мыши. Для компонента событие OnClick будет иметь место при освобождении левой кнопки мыши, когда указатель находится над компонентом. Кроме того, многим компонентам при их активизации с клавиатуры Delphi также сообщает о событии OnClick.

1.2 OnDblClik — отвечает за двойное нажатие левой кнопки мыши.

1.3. OnMouseUp — отвечает за одно нажатие левой кнопки мыши. Можно также использовать это событие вместо OnClick, если необходимо отличить действительный щелчок мышью от нажатия клавиши мнемонического доступа.

1.4. OnMouseDown — событие происходящее при освобождении левой кнопки мыши.

1.5. OnDragOver — событие компонента имеет место, когда пользователь перетаскивает над ним другой компонент. Обычно это событие устанавливает свойство Accept в True или False, указывающее, можно ли на данный компонент опустить перетаскиваемый объект. С другой стороны, перетаскиваемый компонент обрабатывает и генерирует событие OnStartDrag в начале операции перетаскивания. Подобно этому перетаскиваемый компонент обрабатывает и генерирует событие OnEndDrag, независимо от того, был опущен компонент или нет.

1.6. OnDragDrop — Событие компонента генерируется, когда пользователь опускает на него другой компонент.

Итак, OnEndDrag и OnStartDrag — это события, предназначенные для перетаскиваемого компонента. Событие OnStartDrag генерируется в момент начала операции перетаскивания, а OnEndDrag — в момент ее окончания, независимо от того, был один компонент опущен на другой или нет. События OnDragOver и OnDragDrop предназначены для компонента, на который опускается другой компонент. Эти события предназначены для реализации технологии перетащить и опустить (drag and drool, применяемой во всех современных программах.

2 События клавиатуры

2.1. OnKeyDown — обработка сообытия, происходящая при нажатии клавиши.

2.2. OnKeyUp — обработка сообытия, происходящая при отпускании клавиши.

2.3 OnKeyPress — обработка сообытия, происходящая при нажатии клавиши.

Чем данное событие отличается от OnKeyDown ши OnKeyUp? OnKeyPress срабатывает после нажатия клавиши, и система идентифицирует ее как клавишу с простым символом, например <А> или <!>, а не как клавишу управления курсором, функциональную клавишу, комбинацию <Аlt+клавиша> и т.д.

Пример: If UpCase(Key) =’Q’ THEN Close (Если нажать клавишу <Q>, программа завершит работу)

Функция UpCase встроена в Delphi. При передаче ей буквы алфавита она возвращает эту букву как прописную. При передаче любого другого символа функции возвращает символ без изменения.

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

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

Таблица: Основные системные события

Событие

Ситуация

Реакция пользователя

OnActive

Форма только что стала активным окном программы

Обновление любой информации, отображенной в форме

OnClose

Имело место событие OnCloseQuery, в результате форма закрывается

Последняя возможность отменить закрытие формы

OnCloseQuery

Windows запрашивает форму, не намерена ли она закрыться

Пользователю предлагается сохранить все изменения данных или отменить закрытие

OnCreate

Создание формы

Выполнение необходимой инициализации

OnDeactivate

Форма только что перестала быть активным окном программы

Отмена всех действий, выполняемых в обработчике события OnActivate

OnDestroy

Форма готова исчезнуть навсегда

Очистка всех ресурсов, выделенных программой

OnPaint

Форму необходимо отобразить заново, так как она, например, была только что открыта или восстановлена из пиктограммы

Рисование линии или простейшей графической фигуры непосредственно в форме

OnResize

Размеры формы были изменены

Приведение в порядок размеров или расположения компонентов после изменения размеров формы

Многие программы Windows способны пресечь попытку пользователя прекратить их работу, задав вопрос, уверен ли он, что это именно то, что ему нужно. Программы Delphi могут запрашивать такое подтверждение из обработчика события OnCloseQuery.

Вставьте в обработчик события OnCloseQuery новой формы следующие строки:

CanClose := MessageDIg (‘Are you sure?’, mtConfirmation, [mbYes, mbNo], 0) = IDYES

При попытки закрыть форму появится диалоговое окно с сообщением, как на, требующее вашего подтверждения. Если ответить No, программа не прекратит работу.

Пример1: Написать программу, которая при очередном щелчке по форме левой кнопкой мыши будет менять форму курсора, используя по порядку все формы курсора от crDefault до crVSplit

Решение:

1) Создать новый проект
2) В обработчик события OnClick формы Form1 ввести следующий код
If cursor=crDefault then
cursor:=crVSplit
else
cursor:=succ(cursor);

3) Откомпилировать программу
4) Проверить работу программы
5) Сохранить программу в рабочей папке

Пояснение: Если при щелчке по форме курсор мыши имеет обычную форму (crDefault), то ему присваивается форма crVSplit, которая является самой последней формой курсора в списке значений свойства cursor. Если при щелчке по форме курсор мыши имеет форму отличную от crDefault, то применяется встроенная функция succ, которая возвращает следующую форму курсора. Оператор “=” проверяет равенство левой и правой частей условия.

Пример2: Написать программу, которая будет перемещать форму по экрану вправо и влево с помощью соответствующих клавиш управления курсором.

Решение:

1) Создать новый проект
2) В обработчик события OnKeyDown формы Form1 ввести следующий код:

if key=vk_left then left:=left-80;
if key=vk_right then left:=left+80;

3) Откомпилировать программу
4) Проверить работу программы
5) Сохранить программу в рабочей папке

Пояснение: vk_left-обозначение клавиши  , vk_right-обозначение клавиши  .

Пример3: Написать программу, которая при закрытии формы выдает диалоговое окно, спрашивающее пользователя действительно ли он хочет закрыть форму.

Решение:

1) Создать новый проект
2) В обработчик события OnCloseQuery формы Form1 ввести код:
    canclose:=messagedlg(‘Вы действительно хотите выйти ?’, mtconfirmation, [mbyes, mbno, mbcancel], 0)=idyes;
3) Откомпилировать программу
4) Проверить работу программы
5) Сохранить программу в рабочей папке

Пояснение: messagedlg является функцией, которую предоставляет Delphi для организации диалога с пользователем. Ей надо передать четыре элемента информации, которые называются параметрами или аргументами. Первый параметр-сообщение, которое надо отобразить на экране, оно должно быть заключено в апострофы. Второй параметр-константа, определяющая тип диалогового окна (от этого зависит какой будет специальная пиктограмма и заголовок диалогового окна), другие возможные значения- константы mtError, mtWarning и другие. Третий параметр-множество констант, определяющих какие константы будут присутствовать в диалоговом окне. Четвертый параметр-тема справки, которая появляется при щелчке на кнопке Help диалогового окна (при условии, что такая кнопка присутствует). Функция messagedlg возвращает константу, определяющую какую кнопку нажал пользователь. Если функция возвращает не Idyes, программа не завершает своей работы.

Самостоятельная работа

1. Усовершенствовать пример2 так, чтобы форма могла двигаться в четырех направлениях с помощью соответствующих кланизвиш управления курсором, если известно, что vk_up-обозначает клавишу <вверх >, а vk_down-клавишу <вниз >.(для измененния кординаты формы по вертикали необходимо изменять значение параметра «Top»)
2. При нажатии на клавиши 4(влево), 6(вправо), 8(вверх), 2(вниз) по форме перемещается компонент Button.
3. При нажатии на клавиши 4(влево), 6(вправо), 8(вверх), 2(вниз) меняется размер формы.
4. При щелчке мыши по форме, меняется цвет формы.
5. При закрытии формы, вывести диалоговое окно с единственной кнопкой «Yes».
6. При нажатии на клавиши 4(влево), 6(вправо), 8(вверх), 2(вниз) по форме перемещается компонент Button. При достижении края формы, вернуть кнопку на середину формы.
7. При нажатии на клавиши 4(влево), 6(вправо), 8(вверх), 2(вниз) меняется размер формы. При достижении формой размера всего экрана, уменьшить её размеры в два раза.
8. При изменении размеров формы, меняется цвет формы и размер компонентов на форме.
9. При закрытии формы, вывести диалоговое окно с единственной кнопкой «No».
10. При изменении размеров формы, меняется форма курсора и координаты компонент на форме
11. При щелчке мыши на форме меняются местами компоненты на форме.
12. При щелчке мыши на форме меняются цвет компонент на форме.

Поделитесь своим мнением или задайте вопрос