Ивт-20 / САОД и др / ОЗО_2010-САОД_2 / Методический материал / События
.docСОБЫТИЯ
События от мыши
Для большинства видимых компонентов определен набор обработчиков событий, связанных с мышью:
-
OnСlick – щелчок левой кнопки;
-
OnDblClick - двойной щелчок левой кнопки;
-
OnMouseDown – нажатие кнопки
-
OnMouseUp – отпускание кнопки
-
OnMouseMove - на перемещение указателя мыши над компонентом
Cобытие OnClick возникает после OnMouseDown, но перед OnMouseUp, а событие
OnDblClick возникает после OnMouseUp.
Данные события могут иметь следующие параметры:
-
Button типа TMouseButton – определяет кнопку мыши
-
Shift типа TShiftState – определяет состояние клавиш и кнопок мыши
-
X,Y типа Integer– координаты указателя мыши при наступлении события
Тип TMouseButton определяет одну из трех кнопок мыши: левую (mbLeft), правую (mbRigth) и среднюю (mbMiddle).
TMouseButton = (mbLeft, mbRight, mbMiddle) ; - перечисляемый тип
Тип TShiftState содержит признаки, уточняющие обстоятельства возникновения события:
ssShift - нажата клавиша Shift;
ssAlt -нажата клавиша Alt;
ssСtrl - нажата клавиша Ctrl;
ssLeft - нажата левая кнопка мыши;
ssRight - нажата правая кнопка;
ssMiddle -нажата средняя кнопка;
ssDouble - нажаты одновременно левая и правая кнопки.
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); - множество
Пример 1
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
Panel1.Caption:='Dbl'; // изменение заголовка панели при двойном нажатии
end;
Пример 2
procedure TForm1.Panel3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then Panel3.Color:=clRed; // панель красная при нажатии правой кнопки
if Button = mbLeft then Panel3.Color:=clBlue; // панель синяя при нажатии левой кнопки
end;
Пример 3
procedure TForm1.Panel3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then Panel3.Color:=clRed; // панель красная при нажатии левой кнопки
end;
Пример 4
procedure TForm1.Panel3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Shift =[ ssRight,ssAlt] then Panel3.Color:=clRed; // панель красная при отпускании правой //кнопки с нажатой клавишей Alt
end;
//
Пример 5
procedure TForm1.Panel4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then Panel4.Color:=clBlue ;
if ssRight in Shift then Panel4.Color:=clRed;
Label4.Caption:='X='+IntToStr(x); //вывод координаты по X
Label5.Caption:='Y='+IntToStr(y); //вывод координаты по Y
end;
События от клавиатуры
Для большинства видимых компонентов используемых при вводе данных определен набор событий, связанных с клавиатурой:
-
OnChange – Обработка любого изменения в области ввода;
-
OnKeyDown – нажатие клавиши;
-
OnKeyUp – отпускание клавиши;
-
OnKeyPress – обработка нажатия клавиши
Событие OnKeyDown наступает при нажатии пользователем любой клавиши. Можно распознавать нажатые клавиши , включая функциональные, но нельзя распознать символ нажатой клавиши. Событие OnKeyUp наступает при отпускании пользователем любой клавиши по возможностям аналогично OnKeyDown.
Данные события содержат параметры:
-
Key типа Word – определяет десятичный код клавиши
-
Shift типа TShiftState – определяет состояние клавиш
Событие OnKeyPress наступает при отпускании пользователем любой символьной клавиши. Можно различать символы верхнего и нижнего регистров , но нельзя распознать функциональные клавиши.
Данное события содержит параметр:
-
Key типа Char – символ нажатой клавиши
Пример 6
procedure TForm1.Edit4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// обрабатывает клавишу Alt и Enter
if (ssAlt in Shift) and (Key=13) then Label6.Caption:=Edit4.Text ;
end;
Пример 7
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then Label2.Caption:=Edit5.Text;
if not (Key in ['0'..'9']) then key:=#0; // нецифровой символ не вводится
end;
Пример 8
procedure TForm1.Edit6KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case Key of
VK_INSERT: Edit6.Text:='Insert';
VK_RIGHT:Edit6.Text:='вправо';
end;
end;
Для клавиш определены следующие виртуальные коды:
Код |
Значение |
Клавиша |
Код |
Значение |
Клавиша |
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 |
Vk_Fl..vk_F12 |
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 |
] |
События связанные с формой
При запуске приложения наступают последовательно следующие события связанные с формой:
-
OnCreate – при создании формы;
-
OnShow – при выводе формы на экран (Visible = True);
-
OnPaint – при каждой прорисовке формы;
-
OnActivate – при активизации формы;
При завершении приложения наступают последовательно следующие события связанные с формой:
-
OnClose – перед закрытием формы;
-
OnDestroy – перед удалением формы из памяти;
Пример 9
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
// Обработка закрытия формы
begin
if MessageDlg('Закрыть?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort;
end;
События связанные с фокусом компонента
При работе приложения только один компонент может принимать входной сигнал ( Щелчок мыши или нажатие клавиши ). Такой компонент имеет фокус. Пользователь может переключать фокус с помощью клавиши Tab или программным путем используя метод SetFocus.
-
OnEnter – при получении объектом фокуса;
-
OnExit - при потере объектом фокуса;
Пример 10
procedure TForm1.Button2Enter(Sender: TObject);
begin
ShowMessage('OnEnter Кнопка 1'); // Сообщение при получении фокуса
end;
Пример 11
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Button3.SetFocus // установка фокуса
end;