Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Тема 4.8 События компонентов, их сущность и назначение



Визуальные компоненты способны генерировать и обрабатывать достаточно большое число (несколько десятков) событий различных видов. К наиболее общим группам событий можно отнести следующие:

• выбор управляющего элемента;

•перемещение указателя мыши;

• вращение колеса мыши;

• нажатие клавиш клавиатуры;

• получение и потеря управляющим элементом фокуса ввода;

• перемещение объектов методом drag-and-drop.

В языке Object Pascal, который лежит в основе Delphi, события также являются свойствами и принадлежат к соответствующему типу. Большинство событий носят нотификационный (уведомляющий) характер и принадлежат типу TNotifyEvent, описанному следующим образом:

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

Как видно из описания, нотификационные события содержат только источник события, на который указывает параметр Sender, и больше никакой информации не несут. Существуют и более сложные события, требующие передачи дополнительных параметров, например событие, связанное с перемещением указателя мыши, передает координаты указателя. Рассмотрим наиболее часто используемые события.

При выборе управляющего элемента возникает событие onclick типа TNotifyEvent, которое также называют событием нажатия. Обычно оно возникает при щелчке мышью на компоненте. При разработке приложений событие Onclick является одним из наиболее часто используемых.

Пример. Процедура обработки события выбора элемента Editl.

procedure TForml.EditlClick(Sender: TObject);

begin

Editl.Color:= Random($FFFFFF);

end;

Здесь при щелчке мышью в поле редактирования Editl случайным образом изменяется цвет его фона.

Для некоторых компонентов событие onclick может возникать и при других способах нажатия на управляющий элемент, находящийся в фокусе ввода, например, для компонента Button — с помощью клавиш <Пробел> или <Enter>, а для компонента спесквох — клавишей <Пробел>.

При щелчке любой кнопкой мыши генерируются еще два события:

OnMouseDown типа TMouseEvent, возникающее при нажатии кнопки мыши, и OnMouseUp типа TMouseEvent, возникающее при отпускании кнопки.

При двойном щелчке левой кнопкой мыши в области компонента, кроме того, генерируется событие OnDbiciick типа TNotifyEvent. События возникают В следующем ПОрЯДКе: OnMouseDown, OnClick, OnMouseUp, OnDblClick,

OnMouseDown, OnMouseUp.

При перемещении указателя мыши над визуальным компонентом непрерывно вырабатывается событие onMouseMove типа TMouseMoveEvent. Последний описан следующим образом:

type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X,

Y: Integer) of object;

В обработчике события параметр Sender указывает, над каким элементом управления находится указатель мыши, а параметры х и Y типа integer определяют координаты (позицию) указателя. Координаты указываются относительно элемента управления, определяемого параметром Sender. Параметр shift указывает на состояние клавиш <Alt>, <Ctrl> и <Shift> клавиатуры и кнопок мыши и может принимать комбинации следующих значений:

• ssSnift — нажата клавиша <Shift>;

• ssAit — нажата клавиша <Alt>;

• ssctri — нажата клавиша <Ctrl>;

• ssLeft — нажата левая кнопка мыши;

• ssMiddie — нажата средняя кнопка мыши;

• ssDoubie — выполнен двойной щелчок мышью.

При нажатии любой из указанных клавиш к параметру shift добавляется соответствующее значение. Например, если нажата комбинация клавиш <Shift>+<Ctrl>, то значением параметра shift является [ssshift, s s c t r i ].

Если не нажата ни одна клавиша, то параметр shift принимает пустое значение [ ].

Пример. Отображение координат указателя мыши.

procedure TForml.FormMouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer);

begin

Forml.Caption:= 'Координатыуказ. мыши: ' + IntToStr(X) + ' и' + IntToStr(Y);

end;

При перемещении указателя мыши в пределах формы его координаты отображаются в заголовке формы. Позиция указателя мыши отображается, если указатель находится в свободном месте формы, а не расположен над каким либо управляющим элементом. Координаты х и Y отсчитываются в пикселах от левого верхнего угла формы, начиная с нуля.

При работе с клавиатурой генерируются события onKeyPress и onKeyDown, возникающие при нажатии клавиши, а также событие OnKeyUp, возникающее при отпускании клавиши. При нажатии клавиши возникновение событий ПРОИСХОДИТ В Следующем ПОрЯДКе: OnKeyDown, OnKeyPress, OnKeyUp.

При удерживании клавиши нажатой непрерывно генерируется событие OnKeyDown, событие OnKeyUp возникает однократно после отпускания клавиши.

Событие OnKeyPress типа TKeyPressEvent генерируется при каждом нажатии алфавитно-цифровых клавиш. Обычно оно обрабатывается, когда требуется реакция на нажатие одной клавиши. Тип TKeyPressEvent описан следующим образом:

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

object;

Параметр Key содержит код ASCII нажатой клавиши, который может быть проанализирован и при необходимости изменен. Если параметру Key задать значение ноль (#о), то это соответствует отмене нажатия клавиши.

Замечание.

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

Пример. Обработчик События OnKeyPress редактора.

procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);

Begin

if Key = '! ' then Key := #0;

end;

Здесь при изменении содержимого редактора Editi пользователю запрещен ввод символа!.

Для обработки управляющих клавиш, не имеющих ASCII-кодов, можно программно использовать события OnKeyDown И OnKeyUp ТИПаTKeyEvent,

возникающие при нажатии на любую клавишу. ТипTKeyEvent описанкак

type TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift:

TShiftState) of object;

Указанные события часто используются для анализа состояния управляющих клавиш <Shift>, <Ctrl>, <Alt> и других. Состояние этих клавиш и кнопок мыши указывает параметр shift, который может принимать ранее рассмотренные значения. В отличие от события OnKeyPress, параметр Key имеет тип word, а не char, поэтому для преобразования находящегося в Key кода клавиши в символ можно использовать функцию chr о.

В обработчиках событий, связанных с нажатием клавиш, можно также обрабатывать комбинации управляющих и алфавитно-цифровых клавиш, например, <Alt>+<S>.

Пример. Обработка нажатий управляющих и алфавитно-цифровых клавиш.

procedure TForml.Edit2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (Shift = [ssCtrl]) and (chr(Key) = '1') then

MessageDlg('Нажатыклавиши<Ctrl> + <1> ', mtConfirmation, [mbOK], 0);

end;

Здесь при нахождении в фокусе ввода компонента Edit2 нажатие комбинации клавиш <Ctrl>+<l> вызывает диалоговое окно Confirm с соответствующим сообщением.

Отдельные клавиши имеют особенности, например, при нажатии на клавишу <ТаЬ> не возникают события OnKeyPress И OnKeyUp.

При получении фокуса оконным элементом управления возникает событие onEnter типа TNotifyEvent. Оно генерируется при активизации управляющего элемента любым способом, например, щелчком мыши или с помощью клавиши <ТаЬ>. В случае потери фокуса ввода оконным элементом управления возникает событие OnExit типа TNotifyEvent.

Пример. Процедуры обработки событий получения и потери фокуса элементом управления.

procedure TForml.EditlEnter(Sender: TObject);

begin

Labell.Caption:= (Sender as TControl).Name + ' активен';

end;

procedure TForml.EditlExit(Sender: TObject);

begin

Labell.Caption:= TEdit(Sender).Name + ' неактивен';

end;

В заголовке надписи Labell отображается активность (наличие или отсутствие фокуса) компонента Editi. Доступ к свойству Name параметра Sender в процедурах обработки выполнен двумя способами. В первом случае параметр sender с помощью конструкции as неявно приводится к типу TControl. Во втором случае параметр sender явно приводится к ТИПУ TEdit.

Если указатель некоторое время неподвижен в области компонента, то возникает событие onHint типа TNotifyEvent, которое можно использовать для написания обработчиков, связанных с выводом контекстной помощи.





Дата публикования: 2015-02-18; Прочитано: 2749 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.017 с)...