Russian Belarusian English German Japanese Ukrainian

События

Событие - это какое-либо действие, которое позволяет классу или объекту уведомлять другие классы или объекты о возникновении каких-либо ситуаций.
Класс, отправляющий или вызывающий событие, называется издателем, а классы, принимающие или обрабатывающие событие, называются подписчиками.
В C++ в стандартном приложении Windows Forms или веб-приложении пользователь подписывается на события, вызываемые элементами управления, такими как кнопки и поля со списками.

OnChange

Описание

Событие OnChange наступает после изменения изображения на канве. При вызове любого метода рисования осуществляется следующая последовательность операций:
1. наступает событие OnChanging;
2. вызванный метод канвы TCanvas делает изменения в изображении;
3. наступает событие OnChange.
Событие канвы OnChange наступает при изменении именно самого изображения, а не свойств канвы. Такие свойства канвы, как объекты Font - шрифт, Brush - кисть и Реn - перо имеют свои собственные события OnChange.
 
Классы

TCanvas
 

typedef void (__closure *TNotifyEvent)(System::TObject* Sender);
__property Classes::TNotifyEvent OnChange

OnChanging

Описание

Событие OnChanging происходит сразу после изменения изображения на канве.
 
Классы

TCanvas
 
Определение

typedef void (__closure *TNotifyEvent)(System::TObject* Sender);
__property Classes::TNotifyEvent OnChange

OnClick

Описание

Обычно событие OnClick наступает, если пользователь нажал и отпустил основную кнопку мыши, когда указатель мыши находился на компоненте. Это событие происходит если:
1. Пользователь выбрал элемент в таблице, дереве, списке, выпадающем списке, нажав клавишу со стрелкой.
2. Пользователь нажал клавишу пробела, когда кнопка или индикатор были в фокусе.
3. Пользователь нажал клавишу Enter, а активная форма имеет кнопку по умолчанию, указанную свойством Default.
4. Пользователь нажал клавишу Esc, а активная форма имеет кнопку прерывания, указанную свойством Cancel.
5. Пользователь нажал клавиши быстрого доступа к кнопке или индикатору. Например, если свойство Caption индикатора записано как «Полужирный» и символ «П» подчеркнут, то нажатие пользователем комбинации клавиш Alt-П вызовет событие OnClick в этом индикаторе.
6. Приложение установило в true свойсто Checked радиокнопки RadioButton.
7. Приложение изменило свойство Checked индикатора CheckBox.
8. Вызван метод Click элемента меню.

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

TControl
 
Определение

typedef void (__closure *TNotifyEvent)(System:: TObject* Sender);
__property Classes::TNotifyEvent OnClick
 
Пример

Один обработчик события OnClick может использоваться для обработки событий в различных компонентах. Если при этом требуется различать, в каком компоненте произошло событие, можно использовать параметр Sender, как в приведенном чисто демонстрационном примере, отображающем сообщение о том, в каком компоненте произошло событие.
В реальной программе, аналогичным образом проанализировав имя компонента, вы можете предусмотреть для разных компонентов разную реакцию.
ShowMessage("OnClick в "+((TControl *)Sender)->Name);

OnCreate

Описание

Событие OnCreate возникает в момент создания формы и может использоваться для выполнения каких-то процедур настройки ее самой или содержащихся на ней компонентов. Если в обработчике этого события создаются какие-то объекты они должны разрушаться, освобождая память, в обработчике события OnDestroy.
Последовательность событий при создании формы, имеющей значение свойства Visible, равное true: OnCreate, OnShow, OnActivate, OnPaint.
 
Классы

TCustomForm
 
Определение

typedef void (__closure *TNotifyEvent)(System::TObject* Sender);
__property Classes::TNotifyEvent OnCreate

OnDblClick

Описание

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

TControl
 
Определение

typedef void (__closure *TNotifyEvent)(System::TObject* Sender);
__property Classes::TNotifyEvent OnDblClick

OnDragDrop

Описание

Событие OnDragDrop наступает в момент отпускания перетаскиваемого компонента над данным компонентом. В обработчике события надо описать, что в этот момент должно произойти. Параметр Source соответствует перетаскиваемому объекту, а параметр Sender - объекту, над которым объект был отпущен. Параметры X и Y содержат координаты позиции курсора мыши над компонентом в системе координат клиентской области этого компонента.
 
Классы

TControl
 
Определение

typedef void (__closure *TDragDropEvent)(System:TObject* Sender, System::TObject* Source, int X, int Y);
__property TDragDropEvent OnDragDrop
 
Пример

Пусть на форме имеется несколько списков типа TListBox и вы хотите позволить пользователю перемещать строки из одного списка в другой. Это можно сделать следующим образом.
Во всех списках задаются значения свойств DragMode равные dmAutomatic. Это обеспечивает автоматическое начало перетаскивания.
Далее для одного из списков пишется обработчик события OnDragOver:
void __fastcall TForm1::ListBox1DragOver(TObject *Sender,TObject *Source, int X, int Y, TDragStatS State, bool SAccept)
{
Accept = Source->ClassNameIs("TListBox");
}
 
Этот обработчик указывает, что на данный компонент можно перетаскивать объекты типа TListBox.
Во всех остальных списках в событии OnDragQver указывается этот же обработчик.
Далее для одного из списков пишется обработчик события OnDragDrop:
void __fastcall TForm1::ListBox1DragDrop(TObject *Sender,TObject *Source, int X, int Y)
{
TListBox *S = (TListBox *)Source;
((TListBox*)Sender)->Items->Add(S->Items->Strings[S->ItemIndex]);
S->Items->Delete(S->ItemIndex);
}
 
Первые два оператора обработчика добавляют в список строку, выделенную в списке-источнике. Если пишется не универсальный обработчик, а предназначенный только для данного компонента, то первый оператор можно удалить, а во втором ((TListBox*)Sender) и S заменить на имя компонента ListBox1. Третий оператор удаляет перенесенную строку из источника (если требуется не перенос, а только копирование строк из одного списка в другой, то этот оператор не нужен).
Во всех остальных списках в событии OnDragDrop указывается этот же обработчик. После этого, заполнив списки, можно запускать приложение. Пользователь сможет перетаскивать строки между любыми имеющимися списками.

OnDragOver

Описание

Событие OnDragOver начинается в момент, когда перетаскиваемый объект пересек границу данного компонента и оказался внутри его контура. Заканчивается событие, когда объект, покидая компонент, пересек его границу. Обработчик события OnDragOver используется для того, чтобы дать сигнал о готовности компонента принять перетаскиваемый объект в случае, если пользователь отпустит его над данным компонентом. Если компонент готов принять объект, в обработчике надо задать значение параметра Accept, равное true. Впрочем, это значение по умолчанию равно true, так что его можно не задавать. Вообще в предельном случае обработчик может быть пустым, что будет означать готовность компонента принять любой объект. Но даже пустой обработчик нужен, так как иначе сообщения о приеме компонента приложение не получит.
Во время перетаскивания над компонентом объекта, который может быть принят, форма курсора мыши может изменяться, сигнализируя пользователю о готовности компонента принять объект. Чтобы это было так, надо до момента события OnDragOver (а обычно - во время проектирования) задать соответствующее значение свойства компонента DragCursor.
Параметр Source определяет перетаскиваемый объект, параметр Sender - сам компонент, параметры X и Y - координаты точки экрана в пикселах. Параметр State типа TDragState определяет состояние перетаскиваемого объекта по отношению к другим объектам.
 
Классы

TControl
 
Определение

typedef void (__closure *TDragOverEvent)(System::TObject* Sender, System::TObject* Source, int X, int Y, TDragState State, bool &Accept);
__property TDragOverEvent OnDragOver
 
Таблица состояния:
Значение Описание
dsDragEnter Курсор мыши входит в пределы компонента.
dsDragMove Курсор мыши перемещается в пределах компонента.
dsDragLeave Курсор мыши выходит за пределы компонента.
 
Пример

Обработчик события OnDragOver сигнализирует о том, что компонент готов принять перетаскиваемый объект, если это компонент ListBox1.
void __fastcall TForm1::ListBox1DragOver (TObject *Sender,TObject *Source, int X, int Y, TDragState State, bool SAccept)
{
Accept  = (((TControl*)Sender)->Name == "ListBox1");
}

OnEndDrag

Описание

Событие OnEndDrag наступает при любом окончании процесса перетаскивания компонента - успешном (компонент перетащен в приемник) или безуспешном (компонент отпущен над формой или компонентом, не способным его принять). Событие наступает в перетаскиваемом компоненте.
Обработка этого события не требуется для осуществления процесса перетаскивания. Соответствующий обработчик может быть написан, если требуется какое-то действие или сообщение, подтверждающее результат перетаскивания, или какая-то реакция в перетаскивавшемся компоненте.
Параметр Sender - это сам объект перетаскивания. Параметр Target - это компонент-приемник, если объект был им принят, или NULL, если перетаскивание закончилось неудачей. Параметры X и Y - координаты экрана в пикселах.
 
Классы

TControl
 
Определение

typedef void (__closure *TEndDragEvent)(System::TObjeot* Sender, System::TObject* Target, int X, int Y);
__property TEndDragEvent OnEndDrag
 
Пример

В примере просто отображается сообщение о результатах перетаскивания типа «Перенесение объекта ListBox1 прервано» или «ListBox1 перенесен в ListBox2». Но, конечно, аналогичным образом можно предусмотреть любые действия.
void __fastcall TForm1::ListBox1EndDrag(TObject *Sender,TObject *Target, int X, int Y)
{
if (Target == NULL)
ShowMessage("Перенесение объекта " + ((TControl*)Sender)->Name + " прервано");
else
ShowMessage(((TControl*)Sender)->Name + " перенесен в " + ( (TControl*)Target)->Name);
}

OnEnter

Описание

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

TWinControl
 
Определение

typedef void(__closure *TNotifyEvent)(System::TObject* Sender);
__property Classes::TNotifyEvent OnEnter
 
Пример

Пусть форма имеет кнопку ОК и групповую панель, включающую три радиокнопки. Пусть в начальный момент активна кнопка ОК. Когда пользователь щелкнет на одной из раднокнопок, в кнопке ОК наступит событие OnExit, затем наступит событие OnEnter групповой панели, и только затем наступит событие OnEnter той кнопки, по которой щелкнули. Если после этого пользователь щелкнет на кнопку ОК, то сначала наступит событие OnExit радиокнопки, затем событие OnExit групповой панели, а затем событие OnEnter кнопки ОК.

OnExit

Описание

Событие OnExit наступает в момент потери элементом фокуса, в момент его переключения на другой элемент. Это событие не наступает при переключениях между формами или между приложениями.
Значение свойства ActiveControl изменяется прежде, чем происходит событие OnExit.
При переключениях между элементами, расположенными в разных контейнерах, например, на разных панелях, событие OnExit сначала наступает для элемента, а потом для содержащего его контейнера.
 
Классы

TWinControl
 
Определение

typedef void (__closure *TNotifyEvent) (System::TObject* Sender);
__property Classes::TNotifyEvent OnExit
  • 1
  • 2