Property OnDblClick: TNotifyEvent read FOnDblClick

write FOnDblClick;

TMousefiheelEvent «■ procedure (Sender: TObject; Shift: TShiftState;

WhealDelta: Integer; MousePos: TPoint; var Handled: Boolean) of object; TMouseWheelUpDownEvent = procedure (Sender: TObject;

Shift: TShiftState; MousePos: TPoint; var Handled: Boolean) of object; property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel

write FOnMouseWheel; property QnMouseWheolDown: TMouseWheelUpDownEvent

read FOnMouseWheelDown write FOnMouseWheelDown; property OnMouseWheelUp: TMouseWheelUpDownEvent

read FOnMouseWheelUp write FOnMouseWheelUp;

Тип TMouseButton определяет одну из трех кнопок мыши: левую (mbLef t),

правую (mbRxght) и среднюю (mbMiddle).

Тип TShiftState содержит признаки, уточняющие обстоятельства возник­новения события: ssShift - нажата клавиша Shift, asAlfc - нажата клавиша Alt, ssCtrl - нажата клавиша Ctrl, ssLef t - нажата левая клавиша мыши, ssRight - нажата правая клавиша мыши, ssMiddle - нажата средняя кла­виша мыши, ssDoubl® - нажаты одновременно левая и правая клавиши мыши.

Указатели мыши

При перемещении указателя мыши по экрану он может менять свою форму в зависимости от значения свойства Cursor компонента, над которым он расположен в данный момент: TCursor = -32768..+32767; property Cursor: TCursor;

Индекс курсора может быть любым числом от -32768 до 32767. Индексы в диапазоне от -22 до -1 включительно заняты стандартными указателями, причем индексы -5 и -1 соответствуют указателю erNone, а индекс 0 всегда связан со стандартным указателем Windows и не может переопределяться.

Чтобы изменить форму курсора для всех окон программы одновременно, используется свойство Cursor глобального объекта Screen, который автоматически создается для каждой программы:

Screen.Cursor := crHourGlass; // Курсор - песочные часы Screen.Cursor := crDefault; // Курсор - обычный

В Delphi предопределен ряд указателей мыши, но программист может создавать и собственные указатели, выполнив следующие действия.

· С помощью редактора изображений Delphi необходимо создать изображение указателя и сохранить это изображение в ресурсном файле. Имя указателя должно быть обязательно из латинских прописных символов.

· Необходимо директивой подключить полученный ресурсный файл к программе

и загрузить указатель из ресурсного файла с помощью функции LoadCursor. {$К Cursor.res)

Screen.Cursors£1) LoadCursor (Hlnstsnce, 4JEWCURSOR');

3. После выполнения предыдущих операций можно назначать нестандартный указатель свойствамCursor компонентов или экрана: Screen. Cursor :« 1.

События клавиатуры События мыши возникают в любом потомке классаTControl. В отличие от этого события клавиатуры возникают только в некоторых оконных компонентах (в потомках классаTWinControl). Обработка событий связана со следующими

свойствами этих компонентов:

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

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

property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown; property OaKeyPress: TKeyPressEvent read FOnKeyPress

write FOnKeyPress;

property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;

ПараметрShift, как и в обработчиках событий от мыши, содержит уточняющие признаки. ПараметрKey в обработчикахTKeyEvent содержит виртуальный код клавиши, а в обработчикеTKeyPressEvent - ASCII-символ. ОбработчикиOnKeyDown иOnKeyUp перехватывают нажатие большинства клавиш клавиатуры, в то время какOnKeyPress - только нажатие алфавитно- цифровых клавиш. Получаемый ими символKey учитывает выбранный язык и

нажатую клавишуShift.

Виртуальные коды клавиш определены константамиvk_XXX в файле

Source\Rtl\Win\Windows.pas, которые представляют уникальные числовые

идентификаторы клавиш. Для буквенно-цифровых символов, с некоторыми

исключениями, этот код совпадает со значением, возвращаемым функцией

©rd(ух':.

Поскольку параметрKey в каждом обработчике определен как параметр-

переменная, программист может изменить фактический ввод клавиши, например

для фильтрации каких-либо клавиш. При этом подмена должна осуществляться в

обработчике формы, чтобы в оконный элемент поступал уже измененный код.

Чтобы форма получила сообщение от клавиатуры до передачи его в элемент с

фокусом ввода, следует установить свойство формыKeyPreview вtrue.

Например, закрытие формы по нажатию клавишAlt+X:

procedure TForml.FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (key = ord ('X')) and (ssAlt in Shift) then Close end;

Фокус ввода

Поскольку клавиатура одна, а элементов, используюших ее - много, необходимо выделять элемент, которому передается клавиатурный ввод. Это достигается передачей элементу фокуса ввода через его метод: procedure SetFocus;

Компонент с фокусом ввода имеет значениеtrue в своем свойстве:

property Focused: Boolean;

Если элемент недоступен или невидим, его свойствоCanFocue имеет значениеfalse: procedure CanFocus: Boolean;

Фокус ввода передается элементу после щелчка на нем мышью или в порядке выбора его клавишейTab. Чтобы элемент можно было выбирать с помощью этой клавиши, следует установить следующее его свойство вTrue: property TabStop: Boolean;

Порядок выбора элемента определяется свойством: property TabOrder: Integer;

Delphi следит за уникальностью и непрерывностью всех помещенных на форму доступных и видимых компонентов. С помощью следующего метода можно получить список всех дочерних компонентов, выбираемых клавишейTab. procedure GetTabOrderList (List: TList);

Я

Механизм действий

В Delphi определен специальный механизм действий, дающий удобное средство централизованной реакции программы на те или иные действия пользователя. Для реализации действий на вкладке Standard палитры компонентов помещен специальный компонентTActionList, а в классTComponentвведено свойствоAction: property Action: TBasicAation;

Централизация необходима потому, что подавляющее большинство промышленных программ для Windows содержат два и более интерфейсных элемента, реализующих одно и то же действие (например, пункт меню и кнопка на панели инструментов). КомпонентTActionList содержит список имен действий и список подпрограмм, которые эти действия реализуют и позволяет осуществлять связь между этими списками. При установлении связи между именем действия и подпрограммой автоматически меняется графическое изображение и/или надпись на компоненте, а также связанная с ним подсказка Hint. Если для действия не определен обработчикOnExecute, все связанные с этим действие элементы на этапе выполнения программы будут недоступны.

Механизм перетаскивания

Операционная система Windows широко использует прием Drag&Drop - перетащи и отпусти. Этот механизм позволяет, нажав и удерживая левую клавишу мыши на определенном месте экрана «зафиксировать» некоторую информацию («груз»), и потом, не отпуская клавишу мыши перетащить этот «груз» в другое место экрана. Отпускание клавиши мыши обозначает место- приемник «груза».

В Delphi реализован свой механизм Drag&Drop, позволяющий компонентам обмениваться информацией при помощи мыши. Этот механизм определяется двумя свойствами и тремя событиями, определенными для каждого видимого компонента.

Наши рекомендации