Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_С++ Builder_2часть.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.11 Mб
Скачать

Лабораторная работа № 6 Обработка событий мышки в приложении Windows

Основная цель лабораторной работы состоит в изучении методики задания и управления событиями мышки в программах приложениях Windows. Также изучается техника работы с рисунками на форме и правила применения встроенного редактора изображений - Image Editor для создания курсора нестандартного вида и его включения в файл ресурсов проекта приложения. Одновременно рассматриваются и команды для изменения изображения курсора мыши при его перемещении по рабочему окну программы.

1. Общие сведения о событиях мышки

Во многих программах – приложениях Windows команды и действия выполняются при помощи манипулятора (мышка). Для обработки команд мышки С++ Builder имеет такие зарезервированные события:

Обозначение события

Описание события

OnClick

Щелчок мыши на компоненте и некоторые другие действия пользователя.

OnDblClick

Двойной щелчок мыши на компоненте.

OnMouseDown

Нажатие клавиши мыши над компонентом. Возможно определение нажатой кнопки и координат курсора мыши.

OnMouseMove

Перемещение курсора мыши над компонентом. Возможно определение нажатой кнопки и координат курсора мышки.

OnMouseUp

Отпускание ранее нажатой кнопки мыши над компонентом. Возможно определение нажатой кнопки и координат курсора мыши.

OnStartDrag

Начало процесса «перетаскивания» объекта. Возможно определение перетаскиваемого объекта.

OnDragOver

Перемещение «перетаскиваемого » объекта над компонентом. Возможно определение перетаскиваемого объекта и координат курсора мыши.

OnDragDrop

Отпускание ранее нажатой кнопки мыши после «перетаскивания» объекта. Возможно определение перетаскиваемого объекта и координат мыши.

OnEndDrag

Еще одно событие при отпускании ранее нажатой кнопки мыши после «перетаскивания» объекта. Возможно определение перетаскиваемого объекта и координат курсора мыши.

OnEnter

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

OnExit

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

OnMouseWheel

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

OnMouseWheelUp

Вращение колесика мыши вверх. Наступает, если вращение не обработано по событию OnMouseWheel.

OnMouseWheelDown

Вращение колесика мыши вниз. Наступает, если вращение не обработано по событию OnMouseWheel.

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

  • Пользователь выбрал элемент в сетке, дереве, списке, выпадающем списке, нажав клавишу со стрелкой;

  • Пользователь нажал клавишу пробела, когда кнопка или индикатор были в фокусе;

  • Пользователь нажал клавишу Enter , а активная форма имеет кнопку по умолчанию, указанную свойством Default;

  • Пользователь нажал клавишу Esc , а активная форма имеет кнопку прерывания, указанную свойством Cancel;

  • Пользователь нажал клавиши быстрого доступа к кнопке или индикатору. Например, если свойство Caption индикатора записано как «&Полужирный» и символ ‘П’ подчеркнут, то нажатие пользователем комбинации клавиш Alt + П вызовет событие OnClick в этом индикаторе;

  • Приложение установило в true свойство Checked радиокнопки RadioButton;

  • Приложение изменило свойство Checked индикатора CheckBox ;

  • Вызван метод Click элемента меню;

  • Для формы событие OnClick наступает, если пользователь щелкнул на пустом месте формы или на недоступном компоненте.

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

Последовательность табуляции задается свойством TabOrder компонентов. Первоначальная последовательность табуляции определяется просто той последовательностью, в которой размещались управляющие элементы на форме. Первому элементу присваивается значение TabOrder , равное 0, второму 1,и т. д. Значение TabOrder, равное нулю, означает, что при первом появлении формы на экране в фокусе будет именно этот компонент (если не задано свойство формы ActiveControl ).

Во все обработчики событий, связанных с манипуляциями мыши (как и во все другие обработчики), передается параметр Sender типа Tobject . Этот параметр содержит указатель на компонент, в котором произошло событие. Он не требуется, если пишется обработчик события для конкретного компонента. Параметр Sender можно использовать для распознования источника события. Например, оператор

if (Sender = = Image1)

……;

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

void_fastcall TForm1:: Image1MouseDown(Tobject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

Дополнительно к параметру Sender в обработчик передаются параметры Button, Shift, X, Y. Параметр Button определяет нажатую в этот момент кнопку мыши. Тип TmouseButton – перечисляемый тип, определяемый следующим образом

enum TmouseButton{ mbLeft, mbRight, mbMiddle};

Значение mbLeft соответствует нажатию левой кнопкой мыши, значение mbRight – правой, а значение mbMiddle – средней. Например, если вы хотите, чтобы обработчик реагировал на нажатие только левой кнопки мыши, можно его первым оператором написать:

if (Button ! = mbLeft) return;

В этом случае, если значение Button не равно mbLeft , т. е. была нажата не левая кнопка мыши, выполнение обработчика прервется.

Параметр Shif типа TshiftState определяет, какие вспомогательные клавиши на клавиатуре нажаты в момент нажатия кнопки мыши.

Во все события, связанные с мышью, передаются также координаты курсора X и Y. Эти параметры определяют координаты курсора в клиентской области компонента. Благодаря этому можно обеспечить различную реакцию в зависимости от того, в какой части клиентской области расположен курсор мыши.

В С++ Builder имеется встроенный редактор изображений Image Editor, который вызывается командой Tools/ Image Editor . Данный редактор позволяет создавать изображения в виде битовых матриц, пиктограмм, изображений курсоров и их сохранять не только в виде файлов, но и сразу же их включать в файл ресурсов приложения. В этом и заключается основное отличие встроенного редактора С++ Builder от других более мощных графических редакторов. Работа начинается с меню File, в котором можно выбрать раздел Open – открыть новый файл изображения или ресурсов, или раздел New – создать новый файл. Если выбрана команда New, то предварительно предлагается сделать выбор вида файла, который нужно создать:

Resource File (.res)

Файл ресурсов

Component Resource File (.dcr)

Файл ресурсов компонента

Bitmap File (.bmp)

Файл битовой матрицы

Icon File (.ico)

Файл пиктограммы

Cursor File (.cur)

Файл изображения курсора