Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
95.doc
Скачиваний:
6
Добавлен:
30.04.2022
Размер:
784.9 Кб
Скачать

Лабораторная работа № 9 Работа с массивами в среде программирования «Delphi»

Цель: научиться вводить, выводить и обрабатывать массивы.

1. Теоретическая часть Реакция на события от мыши и клавиатуры

При перемещении указателя мыши по экрану он может менять свою форму в зависимости от свойства Cursor компонента, над которым он расположен в данный момент:

property Cursor: TCursor;

type TCursor = -32768..+32767;

В Delphi предопределены стандартные курсоры, показанные на рисунке 5.

crNone

crSizeNWSE

crVSplit

crArrow

crSizeWE

crMultiDrag

crCross

crUpArrow

crSQLWait

crIBeam

crHourGlass

crNo

crSize

crDrag

crAppStart

crSizeNESW

crNoDrop

crHelp

crSizeNS

crHSplit

crHandPoint

Рисунок 5 - Стандартные курсоры Delphi

Для большинства видимых элементов определен набор обработчиков событий, связанных с мышью:

type

TMouseButton = (mbLeft, mbRight, mbMiddle);

T

20

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

TMouseEvent = procedure (Sender: TObject; Button: TMouseButton;

Shift; TShiftState; X, Y: Integer) of object;

TMouseMoveEvent = procedure (Sender: TObject;

Shift: TShiftState; X, Y: Integer) of object;

TNotifyEvent = procedure (Sender: TObject) of object;

property OnMouseDown: TMouseEvent;

property OnMouseUp: TMouseEvent;

property OnMouseMove: TMouseMoveEvent;

p

22

roperty OnClick: TNotifyEvent;

property OnDblClick: TNotifyEvent;

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

20

(mbLefl), правую (mbRigth) и среднюю (mbMiddle).

Тип TShiftState содержит признаки, уточняющие обстоятельства возникновения события: ssShift - нажата клавиша Shift; ssAlt - нажата клавиша Alt; ssCtrl - нажата клавиша Ctrl; ssLeft - нажата левая кнопка мыши; ssRight - нажата правая кнопка; ssMiddle - нажата средняя кнопка; ssDouble - нажаты одновременно левая и правая кнопки.

Обработчики OnMouseDown и OnMouseUp определяют реакцию программы на соответственно нажатие и отпускание кнопки мыши, OnMouseMove - на перемещение указателя мыши над компонентом, OnClick и OnDblClick - соответственно на щелчок и двойной щелчок левой кнопки. Во всех обработчиках параметр Sender содержит ссылку на компонент, который вызвал событие, а Х и Y определяют координаты указателя мыши в момент возникновения события (в системе координат клиентской области родительского компонента). Следует отметить, что событие OnClick возникает после OnMouseDown, но перед OnMouseUp, а событие OnDblClick возникает после OnMouseUp.

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

Обработка событий связана со следующими свойствами этих компонентов:

type

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

TKeyEvent = procedure (Sender: TObject; var Key; Word;

Shift: TShiftState) of object;

TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;

property OnKeyDown: TKeyEvent;

property OnKeyUp: TKeyEvent;

property OnKeyPress: TKeyPressEvent;

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

В

22

иртуальные коды клавиш определены константами VK_XXX в файле SOURCE\RTL\ WIN\ WINDOWS.PAS каталога размещения Delphi. Фактически виртуальный код - это просто уникальный числовой идентификатор клавиши. К сожалению, уникальность кода не обеспечивается для клавиши Enter в зоне дополнительных числовых клавиш, которой присвоен код 13 - как и аналогичной клавише в основной зоне, а также для правых и левых сдвиговых клавиш Shift, Alt и Ctrl. Кроме того, клавиши 0...9 и Del в зоне дополнительной клавиатуры сопровождаются уникальным кодом только при активном переключателе NumLock, в противном случае они повторяют коды соответствующих управляющих клавиш. Все остальные клавиши стандартной клавиатуры (за исключением Print Screen, клавиш смещения курсора и Tab, нажатие на которые не передаются в обработчики TKeyEvent) имеют постоянно закрепленные за ними числовые коды, позволяющие легко

21

установить факт нажатия или отпускания любой из них.

Поскольку параметр Key в каждом обработчике определен как параметр-переменная, программист может изменить фактический код клавиши на нужный. Такая возможность может оказаться полезной для фильтрации нажатия каких-либо клавиш. При этом изменение кода происходит в обработчике ф

24

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

property KeyPreview: Boolean;

формы значение True.

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

procedure SetFocus;

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

property Focused: Boolean;

Если элемент запрещен к выбору или невидим, его свойство

property CanFocus: Boolean;

имеет значение False.

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

property TabStop: Boolean;

Порядок выбора элемента определяется свойством

property TabOrder: Integer;

Delphi следит за уникальностью и непрерывностью значений этого свойства у всех помещенных на форму компонентов. С помощью метода

procedure GetTabOrderList (List: TList);

можно получить список всех дочерних элементов, выбираемых клавишей Tab.

При получении компонентом фокуса ввода возникает событие OnEnter, а при потере - OnExit. Программист может предусмотреть необходимую реакцию на эти события, если разместит в свойствах

property OnEnfcer: TNotifyEvent;

property OnExit: THotifyEvent;

ссылки на соответствующие обработчики.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]