
- •Методические указания
- •Часть 2
- •Лабораторна робота № 1
- •Загальні зведення про компоненти для розробки меню команд і вбудовування малюнків та значків на форму програми
- •Лабораторная работа № 2
- •Лабораторная работа № 3
- •Общие сведения о видах команд отладки для поиска
- •Лабораторная работа № 4
- •Общие сведения
- •2. Постановка задач лабораторной работы
- •Лабораторная работа № 5
- •Общие сведения о компонентах, инструментах для рисования
- •Лабораторная работа № 6 Обработка событий мышки в приложении Windows
- •1. Общие сведения о событиях мышки
- •2. Постановка задачи лабораторной работы.
- •3. Порядок действий и команд при выполнении работы.
- •Лабораторная работа № 7
- •Результат работы программы
- •Лабораторная работа № 8
- •Шаг 4. Установите на форму компоненты ListView1 и ListView2 , как это показано рис.3.
- •Лабораторная работа № 9
- •Лабораторная работа № 10
Лабораторная работа № 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) |
Файл изображения курсора |