Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 304

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ЛР 1. Операторы и выражения Delphi

Оператор присваивания

Арифметические операторы

Оператор конкатенации строк

Логические операторы

Операторы поразрядного сдвига

Операторы отношения

Операторы множеств

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

Особенности объявления методов

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

Видимость и активность элемента управления

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream

нажатия на кнопку мыши предложен в листинге 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


Параметр

Возможные значения

Описание

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, то операция перетаскивания начинается немедленно, в противном случае