Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки 1-6 по Delphi.pdf
Скачиваний:
39
Добавлен:
08.04.2015
Размер:
1.09 Mб
Скачать

Языки программирования

функций. Необязательный формальный параметр DragObject применяется наиболее подготовленными программистами для создания собственного экземпляра класса TDragObject, позволяющего осуществлять более тонкую настройку операций перетаскивания.

Как мы уже говорили, событие OnDragOver возникает в то время, когда курсор мыши с перетаскиваемым клиентом движется над элементом-приемником, а также в момент отпускания кнопки мыши. Обработчик события уведомляет о готовности элемента-получателя принять клиента.

property OnDragOver: TDragOverEvent;

TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;

Параметры события приведены в табл. 5.4.

 

 

Таблица 5.4. Параметры события OnDragOver()

 

 

 

 

Параметр

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

Описание

 

 

 

 

 

Sender

Любой потомок класса

Ссылка на приемник

 

 

TObject

 

 

Source

Ссылка на источник

 

 

 

X, Y

integer

Координаты указателя над приемником

 

State

dsDragEnter

Указатель появился над приемником

 

 

dsDragLeave

Указатель убран с поверхности приемника

 

 

dsDragMove

Указатель движется над приемником

 

Accept

Boolean

Результат решения на прием клиента:

 

 

 

true — готовность к приему клиента;

 

 

 

false — отказ от приема

 

Задачей программиста является информирование приложения (через параметр Accept) о готовности или отказе приема операции drag and drop. В случае положительного решения при отпускании кнопки мыши возникает событие

property OnDragDrop: TDragDropEvent;

type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;

Вне зависимости от готовности элемента-приемника к получению клиента, в финале перетаскивания элемент-источник генерирует событие:

property OnEndDrag: TEndDragEvent;

type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;

В рамках обработчика события допускается освободить захваченные ранее ресурсы или выполнить какие-то другие действия, определяемые программистом.

Обработка событий клавиатуры

Благодаря умению получать фокус ввода потомки класса TWinControl способны реагировать на события клавиатуры. Клавиатурных событий всего три, и они возникают в строгой последовательности:

1.В момент опускания клавиши у находящегося в фокусе ввода оконного элемента управления генерируется событие OnKeyDown().

2.В момент фиксации клавиши в нажатом положении вызывается событие OnKeyPress().

53

СКФУ Кафедра компьютерной безопасности

Языки программирования

3. Подъем клавиши сопровождается событием OnKeyUp().

События опускания и подъема клавиши (первое и третье в нашем списке) описываются идентичным набором параметров:

property OnKeyDown: TKeyEvent;

property OnKeyUp: TKeyEvent;

type TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of object;

Здесь: Sender — ссылка на элемент управления, в котором возникло событие; Shift — индикатор состояния служебных клавиш <Shift>, <Ctrl> и <Alt>; Key — код клавиши (табл. 5.5).

 

 

 

 

 

Таблица 5.5. Коды клавиш

 

 

 

 

 

 

 

Код клавиши

 

Клавиша

Код клавиши

Клавиша

 

 

 

 

 

 

 

VK_CANCEL

 

<Ctrl>/<Break>

VK_PRIOR

<Page Up>

VK_BACK

 

<Backspace>

VK_NEXT

<Page Down>

VK_TAB

 

<Tab>

VK_END

<End>

VK_RETURN

 

<Enter >

VK_HOME

<Home>

VK_SHIFT

 

<Shift >

VK_LEFT

<←>

VK_CONTROL

 

<Ctrl >

VK_UP

<↑>

VK_MENU

 

<Alt >

VK_RIGHT

<→>

VK_PAUSE

 

<Pause >

VK_DOWN

<↓>

VK_CAPITAL

 

<CapsLock >

VK_INSERT

<Ins>

VK_ESCAPE

 

<Esc >

VK_DELETE

<Del >

VK_SPACE

 

<Пробел >

VK_NUMLOCK

<Num Lock>

VK_SNAPSHOT

 

<Print Screen>

VK_SCROLL

<Scroll Lock>

Цифровые и символьные клавиши основной клавиатуры

 

 

 

 

 

 

 

 

 

VK_0, ..., VK_9

 

<0>, ..., <9>

 

VK_A, ..., VK_Z

<A>, ..., <Z>

Функциональные клавиши

 

 

 

 

 

 

 

 

 

 

 

 

VK_F1, ..., VK_F12

 

 

<F1>, ..., <F12>

 

 

Дополнительная цифровая клавиатура (Num Lock включен)

 

 

 

 

 

 

 

VK_NUMPAD0, ..., VK_NUMPAD9

 

<0>, ..., <9>

 

 

VK_MULTIPLY

 

<*>

 

VK_SUBTRACT

 

<–>

VK_ADD

 

<+>

 

VK_DIVIDE

 

</>

VK_DECIMAL

 

 

<.>

 

 

В момент фиксации клавиши в нажатом состоянии генерируется событие:

property OnKeyPress: TKeyPressEvent;

type TKeyPressEvent = procedure(Sender: TObject;

var Key: Char) of object;

Обратите внимание на то, что на этот раз параметр-переменная Key в обработчике отслеживает не код клавиши, а выбранный пользователем символ. Благодаря этому можно проверять корректность вводимого текста (листинг 5.4).

54

СКФУ Кафедра компьютерной безопасности