•  

ГлавнаяЛитература по DelphiРазработка приложений в системе Delphi → 4.2. Общие события управляющих элементов

Создано: 04.09.2010 3:26:32 · Исправлено: 04.09.2010 3:31:08 · Прочтений: 972

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

  • выбор элемента управления;
  • перемещение указателя мыши;
  • вращение колеса мыши;
  • нажатие клавиш клавиатуры;
  • получение или потеря элементом фокуса ввода;
  • перемещение объектов методом перетаскивания.

Событие OnClick – выбор элемента управления; возникает при щелчке по управляющему элементу левой кнопкой мыши. Для некоторых компонентов это событие может возникнуть и при других способах нажатия элемента управления. Например, для кнопки Button, находящейся в фокусе ввода, событие OnClick можно задать с помощью клавиш «пробел» или Enter. При разработке приложений это событие используется чаще других.

При щелчке любой кнопкой мыши генерируются еще два события: OnMouseDown и OnMouseUp. Первое возникает при нажатии кнопки мыши, когда курсор находится на компоненте, а второе – при отпускании кнопки.

Событие OnDbClick – двойной щелчок по компоненте левой кнопкой мыши.

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


type TMouseMoveEvent=procedure(Sender:TObject;Shift:TShiftState; x,y:Integer);

Параметр Sender указывает, над каким элементом управления находится указатель мыши, а параметры х и y определяют координаты указателя относительно этого элемента управления. Параметр Shift в зависимости от использования клавиш Alt, Ctrl, Shift и кнопок мыши может принимать значения:

  • ssShift – нажата клавиша Shift;
  • ssAlt – нажата клавиша Alt;
  • ssCtrl – нажата клавиша Ctrl;
  • ssLeft –- нажата левая кнопка мыши;
  • ssMiddle – нажата средняя кнопка мыши;
  • ssDouble – выполнен двойной щелчок мышью.

При нажатии любой из указанных клавиш к параметру Shift добавляется соответствующее значение. Например, если нажата комбинация клавиш Shift+Ctrl, то значением параметра Shift является [ssShift, ssCtrl]. Если не нажата ни одна клавиша, то Shift принимает пустое значение [].

Для примера поместим на форму компоненты Label и Shape. С помощью компоненты Shape нарисуем окружность, задав свойству Shape значение stCircl. Для компоненты Shape определим событие OnMouseMove и в обработчике этого события сформируем надписи, соответствующие четверти, над которой перемещается указатель мыши. Для вывода результата будем использовать свойство Caption компонента Label. Если же действия выполняются при нажатой клавише Ctrl, то выведем текст «Окружность».


procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Shift= [ssCtrl] then Label1.Caption:='Окружность' else
begin
if (xand (y< Shape1.Height div 2)
then Label1.Caption:='Вторая четверть';
if (x>Shape1.Width div 2) and (y< Shape1.Height div 2)
then Label1.Caption:='Первая четверть';
if (xand (y> Shape1.Height div 2)
then Label1.Caption:='Третья четверть';
if (x>Shape1.Width div 2) and (y> Shape1.Height div 2)
then Label1.Caption:='Четвёртая четверть';
end;
end;

События OnMouseWheel, OnMouseWheelDown, OnMouseWheelUp связаны с вращением колеса мыши. При вращении колеса мыши вперед и назад генерируются соответственно события OnMouseWheelDown и OnMouseWheelUp. В процессе вращения колёсика при расположении указателя мыши над визуальным компонентом непрерывно вырабатывается событие OnMouseWheel.

Событие OnEnter – получение компонентом фокуса ввода. При потере фокуса ввода генерируется событие OnExit. Эти события не возникают при переключении между формами и приложениями. Поместим на форму редактор Edit и метку Label, для которой в свойстве Visible установим значение false. При получении компонентой Edit фокуса ввода будем выводить метку на экран, а при потере фокуса – делать её невидимой.


procedure TForm1.Edit1Enter(Sender: TObject);
begin
Label2.Visible:=true;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Label2.Visible:=false;
end;

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

Обработка события OnKeyPress выполняется для формирования реакции на нажатую клавишу. Это событие имеет тип TKeyPressEvent:


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

Параметр Key содержит код ASCII нажатой клавиши, который может быть проанализирован и при необходимости изменен. Если параметру Key задать значение ноль (#0), то это будет соответствовать отмене нажатия клавиши. Обработчик события OnKeyPress не реагирует на нажатие управляющих клавиш, однако параметр Key содержит код символа с учетом регистра, который определяется состоянием клавиш Caps Lock и Shift. В качестве примера создадим обработчик события OnKeyPress редактора Edit, запрещающий ввод знака минус:


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = '-' then Key:=#0;
end;

События OnStartDrag, OnDragOver, OnDragDrop, OnEndDrag используются для осуществления перетаскивания компонентов. Реализованная в Delphi технология drag-and-drop позволяет перемещать различные объекты, например, элементы одного списка в другой. При этом используются два элемента управления: источник и приемник. Источник содержит перемещаемый объект, а приемник – элемент управления, на который помещается элемент-источник.