КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Обработка щелчка мышиУправление большинством программ Windows осуществляется с помощью мыши. Помимо стандартных действий с элементами управления, мышь также используется для самых разных дополнительных операций (например, для вызова контекстного меню при щелчке правой кнопкой). В системе Delphi 7 имеется возможность обработки фактического щелчка мышкой на объекте. Такая возможность используется, когда важно просто среагировать на щелчок, не анализируя координаты указателя. Для этого обрабатывают событие OnClick, которое чаще всего используют в таких объектах, как кнопка или переключатель, где знание точных координат указателя мыши не обязательно. Такой подход далеко не всегда устраивает разработчика, поэтому в Delphi 7 имеются еще два события: OnMouseOown (При нажатии кнопки мыши) и OnMouseUp( При отпуска- нии кнопки мыши). Они содержат подробную информацию о параметрах щелчка: координаты указателя в рамках клиентской области объекта, на котором был выпол- нен щелчок, тип щелчка (одинарный или двойной), какая кнопка мыши была нажата/ отпущена и состояние системных клавиш SHIFT, ALT и CTRL Обработчики этих событий отличаются только названиями, списки их параметров полностью совпадают. procedure TMyForm.ButtonlMouseDown ( Sender : TObject ; Button : TMouseButton ; Shift: TShiftState,- X, Y: Integer); Tип TMouseButton является перечислимым типом и содержит три значения: mbLeft,mbRight, mbMiddle (признаки использования, соответственно, левой, правой и средней кнопок мыши). Тип TShiftState представляет собой множество: так как можно выполнить, например, двойной щелчок, одновременно удерживая нажатыми клавиши ALT и SHIFT, необходимо проверять комбинации допустимых значений (табл. 2.1). type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble) ;
ssShift Нажата клавиша SHIFT ssAlt Нажата клавиша ALT ssCtrl Нажата клавиша CTRL ssLeft Нажата левая кнопка мыши ssRight Нажата правая кнопка мыши ssMiddle Нажата средняя кнопка мыши ssDouble Выполнен двойной щелчок
При обработке щелчка мыши правильнее анализировать событие OnMouseUp, а не событие OnMouseDown. При отпускании кнопки соответствующее событие генерируется всегда один роз, а при нажатии кнопки Windows генерирует сообщение о нажатии непрерывно, что приводит к многократному вызову обработчика события OnMouseDown.
Компонент Контекстное меню (TPopupMenu) Контекстное меню, вызываемое в любом грамотно сделанном приложении Windows по щелчку правой кнопки мыши, является стандартной и удобной возможностью многих программ. Компонент TPopupMenu (Всплывающее меню) предназначен для создания именно таких контекстных меню. После того как компонент TPopupMenu размещен на форме (он почти не отличается от компонента TMainMenu и также является невизуальным), структура будущего меню формируется способом, описанным при создании строки меню. Единственное отличие состоит в том, что в контекстном меню не может быть нескольких разделов верхнего уровня, так как все его пункты располагаются в одном вертикальном столбце.
Вызов осуществляется с помощью метода Popup() с двумя параметрами — координатами верхнего левого угла меню. Только указываются эти координаты в экранной системе отсчета, а не в границах клиентской области программы. Чтобы указать корректное значение координат, надо добавить к ним смещение, определяющее начало клиентской части формы. К сожалению, использовать свойства формы Left и Тор, определяющие ее левую и верхнюю границы па экране (значения эгим свойствам задаются автоматически при перемещении формы на экране в Проектировщике форм) не удастся, потому что верхняя граница не учитывает дополнительной высоты строки заголовка и панели командных кнопок. Правильный подход состоит в том, чтобы пересчитать экранные координаты точки щелчка в координаты клиентской области с помощью метода формы GetClientOrigin. Эта функция обращается к стандартным функциям Windows и возвращает корректное значение смещения. Результирующее значение имеет тип TPoint (Координатная точка), представляющий собой запись из двух элементов: X и Y. Итак, чтобы в рассматриваемом примере вызвать меню и показать его в месте щелчка мышкой (рис. 2.8), надо предварительно определить сдвиг клиентской области относительно верхнего левого углаэкрана. проверить, была ли нажата правая кнопка мыши, и обратиться к методу Popup:
procedure TMyForm. FormMouseUp (Sender : TObject; Button; TMouseButton; Shift: TShiftState; X, Y: Integer); var P: TPoint; begin P := GetClientOrigin; if Button = mbRight then PopupMenul.Popup(P.X+X,P.Y+Y); end;
|