WWW.KNIGI.KONFLIB.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

 
<< HOME
Научная библиотека
CONTACTS

Pages:     | 1 |   ...   | 83 | 84 ||

«CVBuilder 6 СПРАВОЧНОЕ ПОСОБИЕ Книга 2 Классы и компоненты Москва ЗАО Издательство БИНОМ 2002 УДК 004.43 ББК 32.973.26-018.1 А87 Архангельский А.Я. C++Builder 6. ...»

-- [ Страница 85 ] --

Если требуется различная обработка событий в зависимости от того, какая кнопка мыши нажата или какая нажата вспомогательная клавиша, можно анализировать параметры Button и Shift. Значения параметра Button определяют, какая кнопка мыши нажата: mbLeft — левая, mbRight — правая, mbMiddle — средСобытия компонентов и классов C++Builder няя. Параметр Shift представляет собой множество, содержащее помимо обозначения нажатой кнопки еще и обозначения нажатых одновременно с этим вспомогательных клавиш Shift, Alt, Ctrl (соответствуют элементам множества ssShift, ssAlt, ssCtrl). Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender — указатель на компонент, в котором произошло событие.

Примеры 1. Обработчик события OnMouseDown может использоваться для начала процесса перетаскивания компонента, если вы решили задать какое-то дополнительное условие (например, проверка каких-то опций), по которому можно начинать перетаскивание. В этом случае в компоненте вы задаете свойство DragMode, равным dmManual, что обеспечивает управление началом перетаскивания. Обработчик события OnMouseDown может иметь вид:

проверка какого-нибудь условия) В приведенной структуре if первое условие (Button == mbLeft) можно заменить эквивалентным ему условием, проверяющим параметр Shift:

2. Если вы пишете обработчик, описанный выше, но хотите, чтобы перетаскивание начиналось только в случае, когда пользователь нажал левую кнопку мыши при нажатой клавише Alt, оператор обработки может иметь вид:

ListBoxl-BeginDrag(false,5);

OnMouseEnter, OnMouseLeave События наступают в начале и конце прохождения курсора мыши над меткой.

Класс TCustomLabel Определения Описание Событие OnMouseEnter наступает в начале, а событие OnMouseLeave — в конце прохождения курсора мыши над меткой. Обработчики этих событий могут использоваться, например, для изменения шрифта или цвета фона метки при прохождении над ней курсора мыши. Например, следующие обработчики меняют цвет надписи метки на красный при прохождении над ней курсора:

Labell-Font-Color = clRed;

void fastcall TForml::LabellMouseLeave(TObject *Sender) Labell-Font-Color = clBlack;

OnMouseMove Событие наступает при перемещении курсора мыши над компонентом.

Класс TControl Определение enum Classes 1 {ssShift, ssAlt, ssCtrl, ssLeft, typedef SetClasses 1, ssShift, ssDouble ShiftState;

property TMouseMoveEvent OnMouseMove Описание Обработчик события OnMouseMove пишется, если надо произвести какие-то операции при перемещении курсора мыши над компонентом.

Параметр Shift, являющийся множеством, содержит элементы, позволяющие определить, какие кнопки мыши и какие вспомогательные клавиши (Shift, Ctrl и Alt) нажаты в этот момент. Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender (источник события) — сам компонент.

Событие OnMouseMove возникает независимо от того, нажаты ли какие-то кнопки или клавиши. Правда, хотя это и не документировано в C++Builder, при нажатой левой кнопке мыши это событие, почему-то, не наблюдается.

Этот оператор проверяет, не нажата ли клавиша Alt во время перемещения курсора мыши над компонентом, и, если нажата, то предпринимаются какие-то действия.

OnMouseUp См. раздел «OnMouseDown и OnMouseUp».

OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown События наступают при вращении колесика мыши.

Класс TControl. до C-H-Builder 6 — TWinControl Определения typedef SetClasses 1, ssShift, ssDouble TShiftState;

int WheelDelta, const Types::TPoint SMousePos, property TMouseWheelEvent typedef void f a s t c a l l ( closure *TMouseWheelOpDownEvent) property TMouseWheelUpDownEvent OnMouseWheelDown typedef void fastcall ( closure *TMouseWheelUpDownEvent) (System::TObject* Sender, Classes::TShiftState Shift, const Types::TPoint SMousePos, bool SHandled);

property TMouseWheelUpDownEvent OnMouseWheelUp Описание События OnMouseWheel, OnMouseWheelUp и OnMouseWheelDown наступают при вращении колесика мыши, если, конечно, у вашей мыши есть колесико.

Первым наступает событие OnMouse Wheel при вращении колесика в любую сторону. Параметр Sender указывает на компонент, в котором произошло событие.

Параметр Shift, являющийся множеством, содержит элементы, позволяющие определить, какие кнопки мыши и какие вспомогательные клавиши (Shift, Ctrl и Alt) нажаты в этот момент. Параметр WheelDelta показывает, сколько раз повернулось колесико. Это положительное число при вращении вверх и отрицательное — при вращении вниз. Параметр MousePos типа TPoint определяет позицию курсора мыши. А передаваемый по ссылке параметр Handled указывает, завершена ли обработка события. Если по окончании обработки задать Handled = false, то событие далее будет обрабатываться обработчиком родительского компонента. Во многих оконных компонентах: Memo. RichEdit и других заложена обработка события OnMouseWheel по умолчанию. Учтите, что эти обработчики по умолчанию будут срабатывать только в том случае, если в компоненте заданы полосы прокрутки (собственно, это обработчики не самих элементов, а полос прокрутки).

Поскольку в компонентах имеются собственные обработчики, писать свой обработчик надо только в тех случаях, когда требуется какая-то нестандартная реакция на вращение колесика.

Если обработчик события OnMouseWheel отсутствует или если в нем задано Handled = false, то в зависимости от направления вращения колесика наступает событие OnMouseWheelUp при вращении вверх, или OnMouseWheelDown при вращении вниз. Параметры обработчиков этих событий те же, что в событии OnMouseWheel. Только отсутствует параметр WheelDelta.



Примеры Если вы зададите для формы обработчики void fastcall TForml::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint SMousePos, bool «.Handled) ScaleBy(100,101);

void fastcall TForml::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint SMousePos, bool SHandled) ScaleBy(101,100);

то при вращении колесика размеры всех компонентов формы будут плавно уменьшаться или увеличиваться. Того же результата можно добиться одним обработчиком события OnMouseWheel:

void fastcall TForml::FormMouseWheel(TObject *Sender, ScaleBy(100 + WheelDelta / 100,100);

OnNewRecord Событие, наступающее при вставке в набор данных новой записи.

Класс TDataSet Определение typedef void fastcall ( closure *TDataSetNotifyEvent) (TDataSet* DataSet);

property TDataSetNotifyEvent OnNewRecord Описание Событие OnNewRecord наступает при выполнении методов Insert и Append.

осуществляющих вставку новой записи в набор данных DataSet. Обработчик этого события может предусматривать задание начальных значений полей записи или осуществлять каскадную вставку новых записей в связанные Наборы данных.

OnPaint Событие наступает при получении сообщения Windows о необходимости перерисовать испорченное изображение.

Классы TCustomForm, TPaintBox Определение typedef void ( closure *TNotifyEvent) (System::TObject* Sender);

property Classes::TNotifyEvent OnPaint Описание Событие OnPaint наступает, когда приходит сообщение Windows о необходимости перерисовать испорченное изображение. Изображение может испортиться из-за временного перекрытия данного окна другим окном того же или стороннего приложения. Обработчик данного события должен перерисовать изображение.

При перерисовке изображения канвы Canvas можно использовать свойство ClipRect. которое указывает область канвы, внутри которой изображение испорчено.

Примеры Если копия изображения, отображаемого на канве, хранится в компоненте BitMap, то обработчик события OnPaint для формы может иметь вид:

Canvas-Draw(О,О,Bitmap);

а для компонента PaintBox PaintBoxl-Canvas-Draw(О,О,Bitmap);

Более быстрая перерисовка получается при использовании свойства ClipRect канвы, например:

Canvas-CopyRect(Canvas-ClipRect,Bitmap-Canvas, OnPostError Событие, наступающее при генерации исключения в процессе пересылки в базу данных измененной записи.