Составители:
Рубрика:
21
property OnKeyUp: TKeyEvent;
eyEvent = procedure(Sender: TObject; var Key: Word;
Shift: TShiftState) of object;
Генерация этих событий встроена в обработчики сообщений Windows WMJCEYDOWN,
WMJSYSKEYDOWN и WM_KEYUP, WM_SYSKEYUP соответственно. Обработчику передаются:
Sender — источник сообщения;
Shift — состояние специальных клавиш и кнопок мыши во время нажатия (отпускания);
Key — код нажатой клавиши, представляющий собой виртуальный код клавиши Windows (кон-
станты вида VK_XX, например, VK_F1, VK_ESCAPE и т. п.). Обратите внимание, что Key является
var-параметром; т. е. его значение
может быть изменено программистом.
Другое событие, возникающее вследствие нажатия клавиши:
property OnKeyPress :. TKeyPressEvent;
TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;
Это событие возникает при вводе с клавиатуры символа ASCII, т. е. оно не генерируется, на-
пример, при нажатии функциональных клавиш или <CapsLock>. Обработчик события вызывается при
нажатии буквенных (в т. ч. вместе с <Shift>), цифровых клавиш, комбинаций <Ctri>+<A> .. <Ctd>+<Z>
(коды ASCII #1..#26), <Enter>, <Esc>, <Backspace>, <Ctrl>+<Break> (код #3) и некоторых других.
Так-
же код ASCII можно сгенерировать, нажав <А11>+<десятичньш код символа> на числовой клавиатуре
(Numeric Pad).
Событие OnKeyPress соответствует сообщению Windows WM_CHAR.
Все сообщения клавиатуры поступают тому элементу управления, который в данный момент
имеет фокус ввода. Однако из этого правила возможно одно исключение. Если у формы, которая со-
держит этот элемент управления, свойство
(Pb) property KeyPreview: boolean;
установлено в True, то
сначала все три вида сообщений поступают к ее обработчикам, и только потом
— к элементу управления. Если при этом в них обнулить параметр Key, то в элемент сообщение не по-
ступит вообще. В приведенном ниже примере клавиша <F5> резервируется для изменения состояния
формы:
procedure TFormI.FormCreate(Sender: TObject);
begin
KeyPreview := True;
end;
procedure TFonnl.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_F5 then
begin
if ssCtrl in Shift then WindowState := wsNormal
else if Shift = [] then
WindowState := wsMaximized;
Key : = 0 ;
end;
end;
2.8. Фокус ввода
Будучи окнами Windows, TWinControl и его потомки должны управлять фокусом ввода (со-
стоянием, когда они получают и обрабатывают входные сообщения). Они имеют предназначенные для
этого методы:
Поскольку оконные и неоконные элементы управления фактически находятся в разных спи-
сках, эти операции касаются только элементов соответствующего списка. Оконные элементы всегда
имеют приоритет над неоконными: вы
можете поместить первый над вторым, наоборот — никогда.
property OnKeyUp: TKeyEvent;
eyEvent = procedure(Sender: TObject; var Key: Word;
Shift: TShiftState) of object;
Генерация этих событий встроена в обработчики сообщений Windows WMJCEYDOWN,
WMJSYSKEYDOWN и WM_KEYUP, WM_SYSKEYUP соответственно. Обработчику передаются:
Sender — источник сообщения;
Shift — состояние специальных клавиш и кнопок мыши во время нажатия (отпускания);
Key — код нажатой клавиши, представляющий собой виртуальный код клавиши Windows (кон-
станты вида VK_XX, например, VK_F1, VK_ESCAPE и т. п.). Обратите внимание, что Key является
var-параметром; т. е. его значение может быть изменено программистом.
Другое событие, возникающее вследствие нажатия клавиши:
property OnKeyPress :. TKeyPressEvent;
TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;
Это событие возникает при вводе с клавиатуры символа ASCII, т. е. оно не генерируется, на-
пример, при нажатии функциональных клавиш или . Обработчик события вызывается при
нажатии буквенных (в т. ч. вместе с ), цифровых клавиш, комбинаций + .. +
(коды ASCII #1..#26), , , , + (код #3) и некоторых других. Так-
же код ASCII можно сгенерировать, нажав <А11>+<десятичньш код символа> на числовой клавиатуре
(Numeric Pad).
Событие OnKeyPress соответствует сообщению Windows WM_CHAR.
Все сообщения клавиатуры поступают тому элементу управления, который в данный момент
имеет фокус ввода. Однако из этого правила возможно одно исключение. Если у формы, которая со-
держит этот элемент управления, свойство
(Pb) property KeyPreview: boolean;
установлено в True, то сначала все три вида сообщений поступают к ее обработчикам, и только потом
— к элементу управления. Если при этом в них обнулить параметр Key, то в элемент сообщение не по-
ступит вообще. В приведенном ниже примере клавиша резервируется для изменения состояния
формы:
procedure TFormI.FormCreate(Sender: TObject);
begin
KeyPreview := True;
end;
procedure TFonnl.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_F5 then
begin
if ssCtrl in Shift then WindowState := wsNormal
else if Shift = [] then
WindowState := wsMaximized;
Key : = 0 ;
end;
end;
2.8. Фокус ввода
Будучи окнами Windows, TWinControl и его потомки должны управлять фокусом ввода (со-
стоянием, когда они получают и обрабатывают входные сообщения). Они имеют предназначенные для
этого методы:
Поскольку оконные и неоконные элементы управления фактически находятся в разных спи-
сках, эти операции касаются только элементов соответствующего списка. Оконные элементы всегда
имеют приоритет над неоконными: вы можете поместить первый над вторым, наоборот — никогда.
21
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »
