
- •2. Визуальные компоненты
- •2.1. Свойства
- •2.2. События
- •2.3. Методы
- •If Edit1.CanFocus then Edit1.SetFocus; {перед получением фокуса производится проверка на возможность передачи фокуса компоненту}
- •3. Работа с текстом
- •3.1. Использование надписей
- •3.2. Однострочный редактор
- •3.3. Общие свойства, события и методы компонентов редактирования
- •3.4. Класс tStrings
- •3.5. Многострочный редактор
- •3.6. Использование списков
- •3.7. Таблица String Grid
- •4. Кнопки и переключатели
- •4.1. Работа с кнопками
- •4.1.1. Стандартная кнопка
- •4.1.2. Кнопка с рисунком
- •4.2. Работа с переключателями
- •4.2.1. Переключатель с независимой фиксацией
- •If CheckBox1.Checked then MessageDlg ('Время истекло! ', mtError, [mbОк], 0);
- •4.2.2. Переключатель с зависимой фиксацией
- •4.3. Объединение элементов управления
- •5. Использование форм
- •5.1. Свойства, методы и события форм
- •5.2. Организация взаимодействия форм
- •5.3. Особенности модальных форм
- •5.4. Шаблоны форм
- •5.5. Процедуры и функции, реализующие диалоги
- •5.6. Стандартные диалоги
- •If OpenDialog1.Execute then // при отмене диалога открытие файла не происходит
- •If SaveDialog1.Execute then { Получить имя файла }
- •6.Главное и контекстное меню, панели инструментов
- •6.1. Класс tMenuItem
- •6.2. Cоздание главного и контекстного меню
- •6.3. Динамическая настройка меню
- •6.4. Панели инструментов
- •7. Создание графических изображений
- •7.1. Классы для работы с графикой
- •7.2. Основные компоненты для размещения изображений
- •7.3. Типы графических объектов
- •7.4. Создание диаграмм
- •8. Печать объектов
- •8.1. Класс tPrinter
- •8.2. Печать текста
- •Var fPrn: Text; // объявлена переменная типа Text.
- •8.3. Диалоговые окна для работы с принтером
- •8.4. Печать графических изображений
- •8.4.1. Печать форм
- •8.4.2. Печать диаграмм
- •9. Работа с датами
- •9.1. Преобразование даты
- •9.2. Компоненты для ввода дат
- •10. Сохранение параметров программы.
- •Ini : tIniFile; //объявляем переменную типа inifile
- •Ini : tIniFile; //объявляем переменную типа inifile
- •11. Обработка исключительных ситуаций
- •Var f: File; begin AssignFile(f, 'Somefile.Ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом finally CloseFile(f) end;
2.2. События
Визуальные компоненты генерируют и обрабатывают достаточно большое число событий различных видов. Большинство событий носят нотификационный (уведомляющий) характер и принадлежат типу TNotifyEvent, описанному следующим образом:
type TNotifyEvent = procedure (Sender: TObject) of Оbject;
Нотификационные события содержат только источник события, на который указывает параметр Sender, и больше никакой информации не несут. Существуют и более сложные события, требующие передачи дополнительных параметров, например событие, связанное с перемещением указателя мыши, передает координаты указателя.
Событие OnClick типа TNotifyEvent возникает при выборе компонента. Событие OnClick одно из наиболее часто используемых.
Пример процедуры обработки события выбора элемента Edit1:
procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.Color := Random($FFFFFF); { при щелчке мышью в поле Edit1 случайным образом изменяется цвет его фона}
end;
Для некоторых компонентов событие OnClick может возникать и при других способах нажатия на управляющий элемент, находящийся в фокусе ввода, например, для компонента Button – с помощью клавиши <Пробел> или <Enter>, а для компонента CheckBox – клавиши <Пробел>.
При щелчке любой кнопкой мыши генерируются еще два события: OnMouseDown типа TMouseEvent, возникающее при нажатии кнопки мыши, и OnMouseUp типа TMouseEvent, возникающее при отпускании кнопки.
Cобытие OnDblClick типа TNotifyEvent генерируется при двойном щелчке левой кнопкой мыши в области компонента. События возникают в следующем порядке: OnMouseDown, OnClick, OnMouseUp, OnDblClick, OnMouseDown, OnMouseUp.
Cобытие OnMouseMove типа TMouseMoveEvent непрерывно вырабатывается при перемещении указателя мыши над визуальным компонентом. Последний описан следующим образом:
type TMouseMoveEvent=procedure(Sender: TObject; Shift:TShiftState; Х,Y: Integer) of Оbject;
где параметр Sender указывает, над каким элементом управления находится указатель мыши, а параметры X и Y определяют координаты (позицию) указателя. Координаты указываются относительно элемента управления, определяемого параметром Sender. Параметр Shift указывает на состояние клавиш <Alt>, <Ctrl> и <Shift> клавиатуры и кнопок мыши:
• ssShift – нажата клавиша <Shift>;
• ssAlt – нажата клавиша <Alt>;
• ssCtrl – нажата клавиша <Ctrl>;
• ssLeft – нажата левая кнопка мыши;
• ssMiddle – нажата средняя кнопка мыши;
• ssDouble – выполнен двойной щелчок мышью.
При нажатии любой из указанных клавиш к параметру Shift добавляется соответствующее значение. Например, если нажата комбинация клавиш <Shift>+<Ctrl>, то значением параметра Shift является [ssShift, ssCtrl]. Если не нажата ни одна клавиша, то параметр Shift принимает пустое значение [].
Пример отображения координат указателя мыши:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Sender);
begin
Form1.Caption := 'Координаты указ. мыши: '+IntToStr(X)+' и '+IntToStr(Y);
end;
При перемещении указателя мыши в пределах формы его координаты отображаются в заголовке формы. Позиция указателя мыши отображается, если указатель находится в свободном месте формы, а не расположен над каким-либо управляющим элементом. Координаты X и Y отсчитываются в пикселях от левого верхнего угла формы, начиная с 0.
События OnKeyPress и OnKeyDown генерируются при нажатии клавиши, а событие OnKeyUp возникает при отпускании клавиши. При нажатии клавиши возникновение событий происходит в следующем порядке: OnKeyDown, OnKeyPress, OnKeyUp. Событие OnKeyDown непрерывно генерируется при удерживании клавиши нажатой, событие OnKeyUp возникает однократно после отпускания клавиши.
Событие ОnKeуРrеss типа ТKеуРrеssЕvеnt генерируется при каждом нажатии одной из алфавитно-цифровых клавиш. Описание типа TKeyPressEvent:
type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
Параметр Kеу содержит код ASCII нажатой клавиши, который может быть проанализирован и при необходимости изменен. Если параметру Key задать значение ноль (#0), то это соответствует отмене нажатия клавиши.
Обработчик события OnKeyPress не реагирует на нажатие управляющих клавиш, тем не менее, параметр Key содержит код символа с учетом регистра, который определяется состоянием клавиш <Caps Lock> и <Shift>.
Пример обработчика события OnKeyPress редактора
procedure TForm1.Edit1KeyPress(Sender: TObject; var Кеу: Char);
begin
if Кеу = '!' then Кеу := #0; // пользователю запрещен ввод символа ! в редактор Edit1
end;
Для обработки управляющих клавиш, не имеющих ASCII-кодов, можно программно использовать события OnKeyDown и OnKeyUp типа TKeyEvent, возникающие при нажатии на любую клавишу. Тип TKeyEvent описан как
type TKeyEvent = procedure (Sender: TObject; var Кеу: Word; Shift: TShiftState) of Оbject;
Указанные события часто используются для анализа состояния управляющих клавиш <Shift>, <Ctrl>, <Alt> и других. Состояние этих клавиш и кнопок мыши указывает параметр Shift, который может принимать ранее рассмотренные значения. В отличие от события OnKeyPress, параметр Key имеет тип Word, а не Char, поэтому для преобразования находящегося в Key кода клавиши в символ можно использовать функцию Chr () .
В обработчиках событий, связанных с нажатием клавиш, можно также обрабатывать комбинации управляющих и алфавитно-цифровых клавиш, например, <Alt>+<8>.
Пример обработки нажатий управляющих и алфавитно-цифровых клавиш:
procedure TForm1.Edit2KeyDown(Sender: TОbject; var Key: Word; Shift: TShiftState)
begin
if (Shift = [ssCtrl]) and (chr(Key) = ‘1’ ) then
MessageDlg('Нажaты клавиши <Ctrl> + <1> ', mtConfirmata,on, [mbOK], 0);
end;
При нахождении в фокусе ввода компонента Edit2 нажатие комбинации клавиш
<Ctrl>+<1> вызывает диалоговое окно Confirm с соответствующим сообщением.
Отдельные клавиши имеют особенности, например, при нажатии на клавишу <Таb> не возникают события OnKeyPress и OnKeyUp.
Windows виртуальным кодам клавиши соответствуют символьные константы с префиксом vk_.
Например, vk_alt - это виртуальный код клавиши <Alt>.
Событие OnEnter типа TNotifyEvent возникает при получении фокуса оконным элементом управления любым способом, например, щелчком мыши или с помощью клавиши <Таb>. В случае потери фокуса ввода оконным элементом управления возникает событие OnExit типа TNotifyEvent.
Пример обработки событий получения и потери фокуса элементом управления:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Label1.Caption := (Sender as TControl).Name + ' активен';
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Label1.Caption : =TEdit(Sender).Nаmе + ' не активен';
end;
В заголовке надписи Label1 отображается активность (наличие или отсутствие фокуса) компонента Edit1. Доступ к свойству Name параметра Sender в процедурах обработки выполнен двумя способами. В первом случае параметр Sender с помощью конструкции as неявно приводится к типу TControl. Во втором случае параметр Sender явно приводится к типу TEdit.
Cобытие OnHint типа TNotifyEvent возникает, если указатель некоторое время неподвижен в области компонента. Его можно использовать для написания обработчиков, связанных с выводом контекстной помощи.