
- •Часть 1. Лабораторная работа №1 устройства ввода Краткие теоретические сведения
- •Пример приложения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Устройства вывода. Работа с принтером Краткие теоретические сведения
- •Компонент tPrintDialog
- •Пример программы
- •Процедура печати текста из Memo
- •Процедура печати картинки из Image
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Часть 2. Практическая работа №1
- •Теоретические сведения
- •Задание для самостоятельного выполнения
- •Теоретические сведения
- •Практическая работа №2
- •Теоретические сведения
- •Практическая работа №3
«УТВЕРЖДАЮ»
зав. кафедрой ИСТ
________О.И.Наранович
Протокол №
от «___»_________2012 г
Часть 1. Лабораторная работа №1 устройства ввода Краткие теоретические сведения
Для большинства видимых компонентов определен набор обработчиков событий, связанных с мышью:
type
TMouseButton = (mbLeft, mbRight, mbMiddle) ;
TShiftState = 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;
property OnClick: TNotifyEvent;
property OnDblClick: TNotifyEvent;
Тип TMouseButton определяет одну из трех кнопок мыши: левую (mbLeft), правую (mbRigth) и среднюю (mbMiddle).
Тип TShiftState содержит признаки, уточняющие обстоятельства возникновения события: ssShift — нажата клавиша Shift; ssAlt — нажата клавиша Alt; ssctrl — нажата клавиша Ctrl; ssLeft — нажата левая кнопка мыши; ssRight — нажата правая кнопка; ssMiddle — нажата средняя кнопка; ssDouble — нажаты одновременно левая и правая кнопки.
Обработчики OnMouseDown и OnMouseUp определяют реакцию программы на соответственно нажатие и отпускание кнопки мыши, оnMouseMove — на перемещение указателя мыши над компонентом, оnClick и OnDblClick — соответственно на щелчок и двойной щелчок левой кнопки. Во всех обработчиках параметр sender содержит ссылку на компонент, над которым произошло событие, а х и y определяют координаты точки чувствительности указателя мыши в момент возникновения события в системе координат клиентской области родительского компонента. Cобытие OnClick возникает после OnMouseDown, но перед OnMouseUp, а событие OnDblClick Возникает после OnMouseUp.
События от мыши получают любые потомки TControl. В отличие от этого события от клавиатуры получают только некоторые оконные компоненты (потомки TWinControi). Обработка событий связана со следующими свойствами этих компонентов:
type
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddie, ssDoubie);
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.
Виртуальные коды клавиш определены константами vk_xxx в файле source\rtl\win\windows. pas каталога размещения Delphi. Фактически виртуальный код — это просто уникальный числовой идентификатор клавиши. Для буквенно — цифровых клавиш О...9 и A...Z виртуальный код совпадает с кодом, возвращаемым функцией ord(X), где х — соответствующий заглавный символ: ord('O'), ord( 'W') и т. д. К сожалению, уникальность кода не обеспечивается для клавиши Enter в зоне дополнительных числовых клавиш, которой присвоен код 13, — как и аналогичной клавише в основной зоне, а также для правых и левых сдвиговых клавиш Shift, Alt и Ctrl. Кроме того, клавиши О...9 и Del в зоне дополнительной клавиатуры сопровождаются уникальным кодом только при активном переключателе NumLock, в противном случае они повторяют коды соответствующих управляющих клавиш. Все остальные клавиши стандартной клавиатуры (за исключением Print Screen, клавиш смещения курсора и Tab, нажатие на которые не передается в обработчики TKeyEvent) имеют постоянно закрепленные за ними числовые коды, позволяющие легко установить факт нажатия или отпускания любой из них.
Поскольку параметр Kеу в каждом обработчике определен как параметр-переменная, программист может изменить фактический код клавиши на нужный. Такая возможность может оказаться полезной для фильтрации нажатия каких-либо клавиш. При этом изменение кода происходит в обработчике формы, а в оконный элемент с фокусом ввода будет поступать уже измененный код. Чтобы форма получила событие до передачи его в элемент с фокусом ввода, следует поместить в свойство property KeyPreview: Boolean; формы значение True.
Например, пусть «горячее сочетание» Alt+X используется в существующей программе для закрытия модального диалогового окна. Чтобы сконструированное окно закрывалось по этой команде, необходимо написать такой обработчик события OnKeyDown:
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState) ;
begin
if (Key = ord('X')) and (ssAlt in Shift) then Close
end;
Для клавиш определены виртуальные коды, приведенные в таблице 1.
Таблица 1 – Виртуальные коды клавиш
Код |
Значение |
Клавиша |
Код |
Значение |
Клавиша |
vk Back |
8 |
Backspace |
vk A..vk Z |
65..90 |
A. .Z |
vk Tab |
9 |
Tab |
vk LWin |
91 |
Левая Windows |
vk Clear |
12 |
[5] |
vk RWin |
92 |
Правая Windows |
vk Return |
13 |
Enter |
vk NumpadO.. vk Numpad9 |
96..105 |
[О]..[9] |
vk Shift |
16 |
Shift |
vk Multiply |
106 |
[*] |
vk Control |
17 |
Ctti |
vk Add |
107 |
[+] |
vk Menu |
18 |
Alt |
vk Subtract |
109 |
[-] |
vk Pause |
19 |
Pause |
vk Decimal |
110 |
[Del] |
vk Capital |
20 |
Caps Lock |
vk Divide |
111 |
[/] |
vk Escape |
27 |
esc |
vkFl..vkF12 |
112..123 |
Fl..F12 |
vk Space |
32 |
Пробел |
vk Numlock |
144 |
Num Lock |
vk Prior |
33 |
Page Up |
vk Scroll |
145 |
Scroll Lock |
vk Next |
34 |
Page Down |
|
186 |
|
vk End |
35 |
End |
|
187 |
+ |
vk Home |
36 |
Home |
|
188 |
< |
vk Left |
37 |
Курсор влево |
|
189 |
- |
vk Up |
38 |
Курсор вверх |
|
190 |
> |
vk Right |
39 |
Курсор вправо |
|
191 |
•? |
vk Down |
40 |
Курсор вниз |
|
192 |
~ |
vk Insert |
45 |
Insert |
|
219 |
[ |
vk Delete |
46 |
Delete |
|
220 |
\ |
vk 0..vk 9 |
48..57 |
0..9 |
|
221 |
] |
В квадратных скобках указаны клавиши из зоны дополнительных цифровых клавиш.
Важно, что константы vk_A. .vk_z и vk_o. .vk_9 не определены в файле source\rtl\win\ windows.pas и следовательно в модуле System, поэтому для них компилятор выдаст сообщение о неизвестном идентификаторе — в этом случае нужно использовать собственные определения констант или их числовые эквиваленты.