Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 1 Delphi7.doc
Скачиваний:
12
Добавлен:
04.11.2018
Размер:
1.03 Mб
Скачать

4.3.2. Виды событий для элементов управления

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

Элементы управления могут обрабатывать различные события, но по умолчанию обработчики событий пустые (ничего не делают). Для каждого элемента управления определено событие по умолчанию. Эти события создаются при двойном щелчке на элементе управления в дизайнере форм. Например, для кнопки (Button) по умолчанию создается событие Click на нажатие кнопки; для формы – это событие Create, возникающее при ее открытии. Другие события элементу управления можно задать в инспекторе объектов на вкладке событий (Events). Для создания обработчика событий надо сделать двойной щелчок в области рядом с названием события.

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

type TNotifyEvent=procedure (Sender: TObject) of object;

Единственный параметр Sender указывает объект-источник события. Некоторые обработчики события кроме Sender предусматривают параметры, передаваемые в метод обработки события. В этом случае автоматически формируемая процедура обработки события будет содержать список этих параметров и их тип, например событие, связанное с нажатием символьной клавиши, передает ее код:

type TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;

Так как события являются свойствами, их значения можно изменять во время выполнения приложения, то есть изменять реакцию объекта на одно и то же событие. При этом разрешается назначать обработчик события одного объекта, событию другого объекта. Обязательное условие – совпадение типов событий. Такая возможность обеспечивается неявным параметром Self, который всегда передает методу указатель на вызвавший его экземпляр класса.

Некоторые события приведены в табл. 4.5 (т.к. событий много, то они разделены на группы по соответствующей функциональности).

Таблица 4.5. Основные события

Событие

Описание

События, возникающие при манипулировании мышью

OnClick

Событие, возникающее при нажатии левой кнопки мыши на элементе управления (нажимается и отпускается левая клавиша мыши, когда курсор находится над элементом управления)

OnDblClick

Событие, возникающее при двойном нажатии левой кнопки мыши на элементе управления (когда ее курсор указывает на компоненту)

OnMouseDown

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

TMouseEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;

где Sender – компонента, над которой находится курсор мыши; Button – нажатая клавиша мыши (mbLeft – левая, mbRight – правая, mbMiddle – средняя или колесико); Shift – состояние клавиш <Alt>, <Ctrl> и <Shift> клавиатуры и клавиш мыши (тип-множество, элементы которого: ssShift – нажата клавиша <Shift>, ssAlt – нажата клавиша <Alt>, ssCtrl – клавиша <Ctrl>, ssLetf – левая клавиша мыши, ssRight – правая клавиша мыши, ssMiddle – средняя клавиша мыши, ssDouble – двойное нажатие клавиши мыши); X, Y – локальные координаты курсора мыши внутри компоненты Sender

OnMouseMove

Событие, возникающее при перемещении мыши, когда ее курсор находится над элементом управления и нажата клавиша мыши. Обработчик события имеет тип TMouseMoveEvent:

TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState; X,Y: Integer) of

Продолжение табл. 4.5

object;

где Sender – компонента, над которой находится курсор мыши; Shift – состояние клавиш <Alt>, <Ctrl> и <Shift> клавиатуры и клавиш мыши (тип-множество, элементы которого: ssShift – нажата клавиша <Shift>, ssAlt – нажата клавиша <Alt>, ssCtrl – клавиша <Ctrl>, ssLetf – левая клавиша мыши, ssRight – правая клавиша мыши, ssMiddle – средняя клавиша мыши, ssDouble – двойное нажатие клавиши мыши); X, Y – локальные координаты курсора мыши внутри компоненты Sender

OnMouseUp

Событие, возникающее при отпускании клавиши мыши, когда курсор находится над элементом управления. Обработчик события имеет тип TMouseEvent (см. выше событие OnMouseDown)

События, возникающие при работе с клавиатурой

OnKeyDown

Событие, возникающее при нажатии клавиши на клавиатуре. Обработчик события имеет тип TKeyEvent:

TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of object;

где Sender – активный элемент управления; Key – код нажатой клавиши; Shift – состояние клавиш <Alt>, <Ctrl> и <Shift> клавиатуры и клавиш мыши (тип-множество, элементы которого: ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble)

OnKeyPress

Событие, возникающее, когда нажимается символьная клавиша. Обработчик события имеет тип TKeyPressEvent:

TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;

где Sender – активный элемент управления; Key – ANSI-код нажатой клавиши, который может быть проанализирован и при необходимости изменен: если параметру Key задать значение ноль (#0), то это будет соответствовать отмене нажатия клавиши

OnKeyUp

Событие, возникающее, когда на клавиатуре отпускается нажатая клавиша. Обработчик события имеет тип TKeyEvent (см. выше событие OnKeyDown)

Продолжение табл. 4.5

События, обеспечивающие операции перетаскивания

OnDragDrop

Событие, возникающее, когда на элемент управления опускается другой, перетаскиваемый элемент управления. Обработчик события имеет тип TDragDropEvent:

TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;

где Sender – объект, на который опускается перетаскиваемый элемент управления; Source – перетаскиваемый элемент управления; X, Y – глобальные координаты курсора мыши во время опускания элемента управления Source. Событие возникает только тогда, когда действительно можно опустить элемент управления Source на объект Sender (компонентом готов принять перетаскиваемый компонент или данные)

OnDragOver

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

TDragOverEvent = procedure(Sender: TObject; Source: TDragDockObject; X,Y: Integer; State: TDragState; var Accept: Boolean) of object;

где Sender – объект, над которым перетаскивается элемент управлении; Source – перетаскиваемый элемент управления; X, Y – глобальные координаты курсора мыши; State – состояние режима перетаскивания (dsDragEnter – перетаскиваемый объект попадает на элемент управления, через который допустимо его перемещать; dsDragLeave – перетаскиваемый объект покидает этот элемент управления; dsDragMove – перетаскиваемый объект перемещается по такому элементу управления); Accept – параметр, которому обработчик событий должен дать значение true, если объект Sender может принять перетаскиваемый; элемент управления, и false в противном случае

OnEndDrag

Событие, возникающее, когда завершается перетаскивание трущего элемента управления. Обработчик события имеет тип TEndDragEven:

TEndDragEven = procedure(Sender, Target:

Окончание табл. 4.5

TObject; X, Y: Integer) of object;

где Sender – перетаскиваемый элемент управления; Target – объект, над которым находится перетаскиваемый элемент управления; X, Y – глобальные координаты курсора мыши во время прекращения перетаскивания. Событие возникает при любом прекращении перетаскивания: и когда объект Target может принять элемент управления Sender, и когда не может. В последнем случае перетаскиваемый элемент управления остается на старом месте

OnStartDrag

Событие, возникающее, когда начинается перетаскивание текущего элемента управления. Обработчик события имеет тип TStartDragEven:

TStartDragEven = procedure(Sender: TObject; var DragObject: TDragObject) of object;

Sender – перетаскиваемый элемент управления; DragObject – специальный объект, используемый для формирования изображения элемента управления во время перетаскивания

События, формируемые самим элементом управления

OnEnter

Событие, возникающее, когда элемент управления становится активным (получает фокус ввода)

OnExit

Событие, возникающее, когда элемент управления престает быть активным (теряет фокус ввода)

Примечание. При использовании клавиатуры генерируются события OnKeyPress, OnKeyDown, OnKeyUp. Событие OnKeyDown происходит при нажатии любой клавиши, когда элемент находится в фокусе ввода. При отпускании нажатой клавиши возникает событие OnKeyUp. Если была нажата символьная клавиша, то вслед за событием OnKeyPress до события OnKeyUp генерируется событие OnKeyDown. При удерживании клавиши нажатой, непрерывно генерируется событие OnKeyDown, событие OnKeyUp возникает однократно после отпускания клавиши. Обработчик события OnKeyPress не реагирует на нажатие управляющих клавиш, однако параметр Key содержит код символа с учетом регистра, который определяется состоянием клавиш <Caps Lock> и <Shift>.

В качестве примера рассмотрим обработчик события OnKeyPress компонента Edit, запрещающий ввод знака минус:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if Key = '-'

then Key:=#0;

end;

Для обработки управляющих клавиш, не имеющих ASCII-кодов (<Shift>, >Ctrl>, <Alt> и др.), можно программно использовать события OnKeyDown и OnKeyUp типа TKeyEvents.

Пример. Изменить цвет формы при нажатии <Ctrl>+<Alt>.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if Shift=[ssAlt, ssCtrl] then Form1.Color:=clAqua

end;

Рассмотрим пример обработчика сообщений, полученных от мыши, в котором предусмотрим вывод строки текста в том месте, где была нажата кнопка мыши.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

Canvas.TextOut(x,y,'Текст');

end;

События, поступающие от мыши генерируются в следующем порядке: OnMouseDown, OnClick, OnMouseUp, OnDblClick, OnMouseDown, OnMouseUp.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]