- •Лабораторная работа № 6
- •Лабораторная работа 7
- •1. Домашнее задание
- •Лабоаторная работа №8
- •Лабораторная работа № 9 Работа с массивами в среде программирования «Delphi»
- •1. Теоретическая часть Реакция на события от мыши и клавиатуры
- •Интерфейс Drag&Drop
- •2. Лабораторные задания и методические указания по их выполнению
- •Лабораторная работа № 10
- •1. Теоретическая часть
- •Доступ к файлам
- •Подпрограммы для работы с файлами
- •Текстовые файлы
- •Подпрограммы для работы с текстовыми файлами
- •Подпрограммы для работы с типизированными файлами
- •TOpenDialog и tSaveDialog
- •2. Лабораторные задания и методические указания по их выполнению
- •394026 Воронеж, Московский просп., 14
Лабораторная работа № 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
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
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
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;
ссылки на соответствующие обработчики.