ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.01.2024
Просмотров: 304
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ЛР 1. Операторы и выражения Delphi
Управление жизненным циклом объекта
Ограничение видимости членов класса
Особенности объявления методов
Принадлежность к родительскому контейнеру
Размещение и размеры элемента управления
Видимость и активность элемента управления
ЛР5. Обработка клавиатурных событий и событий мышки
нажатия на кнопку мыши предложен в листинге 5.2.
Листинг 5.2. Обработка события нажатия кнопки мыши
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (ssAlt in Shift) //если удерживается клавиша
and (Button=mbRight) //и пользователь нажимает правую кнопку мыши
then
//реакция на нажатие кнопки
end;
В момент попадания указателя мыши в клиентскую область элемента управления генерируется событие
property OnMouseEnter: TNotifyEvent;
Выход указателя за пределы области сопровождается событием
property OnMouseLeave: TNotifyEvent;
При малейшем перемещении указателя мыши над поверхностью объекта у элемента управления генерируется событие:
property OnMouseMove: TMouseMoveEvent;
type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState;
X, Y: Integer) of object;
Параметры события вам уже знакомы (см. табл. 5.1), аргумент Shift контролирует состояние служебных клавиш, координаты указателя в рамках клиентской области элемента управления доступны благодаря аргументам X и Y.
Все современные мыши снабжены одним или несколькими колесиками, вращение которых позволяет пользователю управлять процессом перемещения по документу, сменой слайдов, переключением элементов управления и т. п. При повороте колесика мыши над элементом управления вызывается обработчик события
property OnMouseWheel: TMouseWheelEvent;
type TMouseWheelEvent = procedure(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean) of object;
Параметры события описаны в табл. 5.2.
Таблица5.2.ОписаниепараметровTMouseWheelEvent
Листинг 5.3 демонстрирует один из вариантов управления полосой прокрутки
ScrollBar1:TScrollBar1 при посредничестве события OnMouseWheel() формы.
Листинг 5.3. Управления полосой прокрутки с помощью колесика мыши
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
begin
if WheelDelta>0 then ScrollBar1.Position:=ScrollBar1.Position-1;
else
if WheelDelta<0 then ScrollBar1.Position:=ScrollBar1.Position+1; Handled:=true;
end;
В листинге 5.3 мы разобрались с направлением вращения колесика мыши за счет исследования знака значения возвращаемого параметром WheelDelta. Создатели Delphi решили еще более упростить работу программиста с колесиком мыши. Для этого были реализованы два события
, каждое из которых соответствует своему направлению вращения:
property OnMouseWheelUp: TMouseWheelUpDownEvent; //вращение вверх property OnMouseWheelDown: TMouseWheelUpDownEvent; //вращение вниз type TMouseWheelUpDownEvent = procedure(Sender: TObject;
Shift: TShiftState; MousePos: TPoint;
var Handled: Boolean) of object;
Параметры событий аналогичны представленным в табл. 5.2.
Класс TControl обеспечивает поддержку очень популярного действия drag and drop (перетащить и опустить). Эта операция позволяет реализовать операцию перетаскивания в пределах приложения, а при использовании разделяемой памяти — и между разными приложениями Delphi. Обычно перемещение происходит между двумя элементами управления, называемыми источником и приемником. Источник инициирует перетаскивание и содержит сам перетаскиваемый объект (клиент). Приемник принимает перетаскиваемый объект. Классическим примером реализации операции drag and drop служит Проводник Windows, предоставляющий услуги переноса файлов и папок при помощи операций перетаскивания.
Первым шагом на пути создания интерфейса перетаскивания должна стать настройка свойства
property DragKind: TDragKind;
type TDragKind = (dkDrag, dkDock);
В случае, если свойство находится в состоянии dkDrag — при перетаскивании реализуется технология drag and drop, в противном случае — drag and dock (операция буксировки элементов управления).
Способ работы с технологией перетаскивания:
property DragMode: TDragMode;
type TDragMode = (dmManual, dmAutomatic);
В ситуации, когда свойство переведено в автоматический режим (dmAutomatic) за старт процесса перетаскивания несет ответственность сама среда разработки Delphi. Несколько сложнее работать в режиме ручного управления (dmManual). В таком случае программист обязан самостоятельно инициировать процесс перетаскивания, вызвав метод
procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
Метод рассчитан на то, что пользователь утопит кнопку мыши над объектом-клиентом и, удерживая эту кнопку в нажатом состоянии, "потащит" объект. Если параметр Immediate установлен в true, то операция перетаскивания начинается немедленно, в противном случае
Листинг 5.2. Обработка события нажатия кнопки мыши
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (ssAlt in Shift) //если удерживается клавиша
and (Button=mbRight) //и пользователь нажимает правую кнопку мыши
then
//реакция на нажатие кнопки
end;
Перемещение указателя мыши
В момент попадания указателя мыши в клиентскую область элемента управления генерируется событие
property OnMouseEnter: TNotifyEvent;
Выход указателя за пределы области сопровождается событием
property OnMouseLeave: TNotifyEvent;
При малейшем перемещении указателя мыши над поверхностью объекта у элемента управления генерируется событие:
property OnMouseMove: TMouseMoveEvent;
type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState;
X, Y: Integer) of object;
Параметры события вам уже знакомы (см. табл. 5.1), аргумент Shift контролирует состояние служебных клавиш, координаты указателя в рамках клиентской области элемента управления доступны благодаря аргументам X и Y.
Вращение колесика мыши
Все современные мыши снабжены одним или несколькими колесиками, вращение которых позволяет пользователю управлять процессом перемещения по документу, сменой слайдов, переключением элементов управления и т. п. При повороте колесика мыши над элементом управления вызывается обработчик события
property OnMouseWheel: TMouseWheelEvent;
type TMouseWheelEvent = procedure(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean) of object;
Параметры события описаны в табл. 5.2.
Таблица5.2.ОписаниепараметровTMouseWheelEvent
Параметр | Возможные значения | Описание |
Sender | Ссылка | Ссылка на источник сообщения |
Shift | ssShift | Удерживается в нажатом состоянии клавиша |
| ssAlt | Удерживается в нажатом состоянии клавиша |
ssCtrl | Удерживается в нажатом состоянии клавиша | |
ssLeft | Нажата левая кнопка мыши | |
ssRight | Нажата правая кнопка мыши | |
ssDouble | Двойной щелчок любой кнопкой | |
WheelDelta | integer | Отрицательное значение — вращение вниз, положительное — вверх |
MousePos | TPoint | Местоположение указателя мыши |
Handled | Boolean | False — если обработкой события занимается родительский объект, иначе True |
Листинг 5.3 демонстрирует один из вариантов управления полосой прокрутки
ScrollBar1:TScrollBar1 при посредничестве события OnMouseWheel() формы.
Листинг 5.3. Управления полосой прокрутки с помощью колесика мыши
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
begin
if WheelDelta>0 then ScrollBar1.Position:=ScrollBar1.Position-1;
else
if WheelDelta<0 then ScrollBar1.Position:=ScrollBar1.Position+1; Handled:=true;
end;
В листинге 5.3 мы разобрались с направлением вращения колесика мыши за счет исследования знака значения возвращаемого параметром WheelDelta. Создатели Delphi решили еще более упростить работу программиста с колесиком мыши. Для этого были реализованы два события
, каждое из которых соответствует своему направлению вращения:
property OnMouseWheelUp: TMouseWheelUpDownEvent; //вращение вверх property OnMouseWheelDown: TMouseWheelUpDownEvent; //вращение вниз type TMouseWheelUpDownEvent = procedure(Sender: TObject;
Shift: TShiftState; MousePos: TPoint;
var Handled: Boolean) of object;
Параметры событий аналогичны представленным в табл. 5.2.
Операция перетаскивания drag and drop
Класс TControl обеспечивает поддержку очень популярного действия drag and drop (перетащить и опустить). Эта операция позволяет реализовать операцию перетаскивания в пределах приложения, а при использовании разделяемой памяти — и между разными приложениями Delphi. Обычно перемещение происходит между двумя элементами управления, называемыми источником и приемником. Источник инициирует перетаскивание и содержит сам перетаскиваемый объект (клиент). Приемник принимает перетаскиваемый объект. Классическим примером реализации операции drag and drop служит Проводник Windows, предоставляющий услуги переноса файлов и папок при помощи операций перетаскивания.
Первым шагом на пути создания интерфейса перетаскивания должна стать настройка свойства
property DragKind: TDragKind;
type TDragKind = (dkDrag, dkDock);
В случае, если свойство находится в состоянии dkDrag — при перетаскивании реализуется технология drag and drop, в противном случае — drag and dock (операция буксировки элементов управления).
Способ работы с технологией перетаскивания:
property DragMode: TDragMode;
type TDragMode = (dmManual, dmAutomatic);
В ситуации, когда свойство переведено в автоматический режим (dmAutomatic) за старт процесса перетаскивания несет ответственность сама среда разработки Delphi. Несколько сложнее работать в режиме ручного управления (dmManual). В таком случае программист обязан самостоятельно инициировать процесс перетаскивания, вызвав метод
procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
Метод рассчитан на то, что пользователь утопит кнопку мыши над объектом-клиентом и, удерживая эту кнопку в нажатом состоянии, "потащит" объект. Если параметр Immediate установлен в true, то операция перетаскивания начинается немедленно, в противном случае