Лекция № 7 delphi (конспекты лекций)
События в Delphi
-
События в Delphi
Одна из ключевых целей среды визуального программирования - скрыть от пользователя сложность программирования в Windows. Delphi предоставляет полный доступ к подструктуре событий, предоставляемой Windows. С другой стороны, Delphi упрощает программирование обработчиков таких событий.
Объекты из библиотеки визуальных компонент (VCL) Delphi, равно как и объекты реального мира, имеют свой набор свойств и свое поведение - набор откликов на события, происходящие с ними. Список событий для данного объекта, на которые он реагирует, можно посмотреть, например, в Инспекторе Объектов на странице событий. (На самом деле, на этой странице представлен список свойств, которые имеют тип вроде TMouseMoveEvent и представляют из себя процедуры-обработчики событий.
Существует соглашение по названиям данных свойств. Например, OnDblClick соответствует двойному щелчку мыши, а OnKeyUp - событию, когда нажатая клавиша была отпущена.) Среди набора событий для различных объектов из VCL есть как события, портируемые из Windows (МouseMove, KeyDown), так и события, порождаемые непосредственно в программе (DataChange для TDataSource).
Поведение объекта определяется тем, какие обработчики и для каких событий он имеет. Создание приложения в Delphi состоит из настройки свойств используемых объектов и создания обработчиков событий.
Простейшие события, на которые иногда нужно реагировать - это, например, события, связанные с мышкой (они есть практически у всех видимых объектов) или событие Click для кнопки TButton.
Предположим, что вы хотите перехватить щелчок левой кнопки мыши на форме.
Чтобы сделать это - создайте новый проект, в Инспекторе Объектов выберите страницу событий и сделайте двойной щелчок на правой части для свойства OnClick. Вы получите заготовку для обработчика данного события:
procedure TForm1.FormClick(Sender: TObject);
begin
MessageDlg('Hello', mtInformation, [mbOk], 0);
end;
Каждый раз, когда делается щелчок левой кнопки мыши над формой, будет появляться окно диалога.
Синтаксис функции MessageDlg.
function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
Значения аргумента Buttons: TMsgDlgBtn перечисляются через запятую в квадратных скобках.
Значения аргумента Buttons: TMsgDlgBtn |
Возвращаемые значения |
mbOk |
mrOk |
mbCancel |
mrCancel |
mbYes |
mrYes |
mbNo |
mrNo |
mbAbort |
mrAbort |
mbRetry |
mrRetry |
mbIgnore |
mrIgnore |
При возникновении события, операционная система передает не только уведомление о нем, но и некоторую связанную с ним информацию. Например, при возникновении события “нажата левая кнопка мыши” программа информируется о том, в каком месте это произошло. Если вы хотите получить доступ к такой информации, то должны вернуться в Инспектор Объектов и создать обработчик события OnMouseDown:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Canvas.TextOut(X, Y, 'X='+IntToStr(X)+' Y='+IntToStr(Y));
end;
Используются аргументы следующих типов:
type TMouseButton = (mbLeft, mbRight, mbMiddle); // Нажатая клавиша мыши.
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); // Нажатая клавиша клавиатуры или кнопка мыши.
ssLeft Нажата левая кнопка мыши.
ssRight Нажата правая кнопка мыши.
ssMiddle Нажата средняя кнопка мыши.
ssDouble Двойной щелчок кнопкой мыши.