Для компонента формы событие OnClick наступает, если пользователь щелкнул на пустом месте формы или на недоступном компоненте. Создайте новое приложение и поместите на форму одну кнопку Button1. Откройте для нее в инспекторе объектов закладку событий Events и щелкните дважды левой кнопкой мыши на поле правее события OnClick. Откроется инспектор кодов и появится заготовка программного кода для функции обработки события OnClick, создаваемая автоматически средой разработки Borland C++ Builder 6. Она имеет вид:
void __fastcall TForm1:: Button1Click(T0bject *Sender) { } Параметр Sender данного события содержит объект, в котором произошло событие, и может быть использован для извлечения информации о том, какой компонент сформировал событие OnClick. Впишите между фигурными скобками функции обработки события OnClick для кнопки Button1 следующую программную строку: ShowMessage("Событие OnClick произошло в "+((TControl *)Sender)->Name);
Аналогичные действия выполните для формы Form1, после чего запустите приложение. В результате при возникновении события OnClick на кнопке или форме будет формироваться окно сообщения с информацией о компоненте, в котором произошло данное событие. Проверьте реакцию программы на щелчок левой кнопкой мыши по кнопке, нажатие клавиш пробел и Enter и другие действия пользователя программы.
Другое событие — OnDblClick наступает, если пользователь осуществил двойной щелчок, т. е. дважды нажал и отпустил основную кнопку мыши с коротким интервалом, когда указатель мыши находился на компоненте. К одному и тому же компоненту нельзя написать обработчики событий OnClick и OnDblClick, поскольку первый из обработчиков всегда перехватит щелчок мыши. Параметр Sender для событияOnDblClick может быть использован аналогично примеру, описанному выше.
Самым часто используемым и уже знакомым нам событием является OnClick. Обычно событие OnClickнаступает, если пользователь нажал и отпустил левую кнопку мыши в тот момент, когда указатель мыши находился на компоненте. Кроме того, это событие происходит в следующих случаях: • пользователь нажал клавишу пробела, когда кнопка или индикатор были в фокусе; • пользователь нажал клавишу Enter, а активная форма имеет кнопку по умолчанию, указанную свойствомDefault; • пользователь нажал клавишу Esc, а активная форма имеет кнопку прерывания, указанную свойством Cancel; • пользователь нажал клавиши быстрого доступа к кнопке или индикатору; • пользователь выбрал элемент в сетке, дереве, списке или выпадающем списке, нажав клавишу со стрелкой; • приложение установило в True свойство Checked кнопки RadioButton; • приложение изменило свойство Checked индикатора CheckBox; • вызван метод Click элемента меню. Как видим, данное событие может происходить в большинстве случаев, недаром оно является одним из самых распространенных.
Довольно часто в программах необходимо определять, какую клавишу на клавиатуре нажал пользователь, для того, чтобы назначить выполнение определенных действий в соответствии с нажатой клавишей. Для этих целей хорошо подходят следующие события, описываемые ниже. Событие OnKeyDown наступает, если компонент находится в фокусе при нажатии пользователем любой клавиши, включая функциональные и специальные, такие как Shift, Alt и Ctrl. В обработчик события передаются кроме обычного параметра Sender, указывающего на компонент, в котором произошло событие, такие параметры, как Key и Shift. Параметр Key позволяет определить код нажатой клавиши клавиатуры. Для большинства клавиш имеются символьные имена API Windows. Коды клавиш и соответствующих им символьных имен приведены в табл. 2. Табл.2.1 На основном поле клавиатуры Клавиша | Десят. код | HEX код | Символьное имя | F1 | 112 | 0x70 | VK_F1 | F2 | 113 | 0x71 | VK_F2 | F3 | 114 | 0x72 | VK_F3 | F4 | 115 | 0x73 | VK_F4 | F5 | 116 | 0x74 | VK_F5 | F6 | 117 | 0x75 | VK_F6 | F7 | 118 | 0x76 | VK_F7 | F8 | 119 | 0x77 | VK_F8 | F9 | 120 | 0x78 | VK_F9 | F10 | 121 | 0x79 | VK_F10 | пробел | 32 | 0x20 | VK_SPACE | Backspace | 8 | 0x8 | VK_BACK | Tab | 9 | 0x9 | VK_TAB | Enter | 13 | 0x0D | VK_RETURN | Shift | 16 | 0x10 | VK_SHIFT | Ctrl | 17 | 0x11 | VK_CONTROL | Alt | 18 | 0x12 | VK_MENU | CapsLock | 20 | 0x14 | VK_CAPITAL | Esc | 27 | 0x1B | VK_E5CAPE | Insert | 45 | 0x2D | VK_INSERT | PageUp | 33 | 0x21 | VK_PRIOR | PageDown | 34 | 0x22 | VK_NEXT | End | 35 | 0x23 | VK_END | Home | 36 | 0x24 | VK_HOME | Стрелка ← | 37 | 0x25 | VK_LEFT | Стрелка ↑ | 38 | 0x26 | VK_UP | Стрелка → | 39 | 0x27 | VK_RIGHT | Стрелка ↓ | 40 | 0x28 | VK_DOWN | Delete | 46 | 0x2E | VK_DELETE | PrintScreen | 44 | 0x2C | VK_SNAPSHOT | ScrollLock | 145 | 0x91 | VK_SCROLL | 0 ) | 48 | 0x30 | --- | 1 ! | 49 | 0x31 | --- | 2 @ | 50 | 0x32 | --- | 3 # | 51 | 0x33 | --- | 4 $ | 52 | 0x34 | --- | 5 % | 53 | 0x35 | --- | 6 ^ | 54 | 0x36 | --- | 7 & | 55 | 0x37 | --- | 8 * | 56 | 0x38 | --- | 9 ( | 57 | 0x39 | --- | ` ~ | 192 | 0xС0 | --- | - _ | 189 | 0xBD | --- | = + | 187 | 0xBB | --- | [ { | 219 | 0xDB | --- | ] } | 221 | 0xDD | --- | ; : | 186 | 0xBA | --- | ' " | 222 | 0xDE | --- | \ | | 220 | 0xDC | --- | , < | 188 | 0xBC | --- | . > | 190 | 0xBE | --- | / ? | 191 | 0xBF | --- | a A | 65 | 0x41 | --- | b B | 66 | 0x42 | --- | с С | 67 | 0x43 | --- | d D | 68 | 0x44 | --- | e E | 69 | 0x45 | --- | f F | 70 | 0x46 | --- | g G | 71 | 0x47 | --- | h H | 72 | 0x48 | --- | i I | 73 | 0x49 | --- | j J | 74 | 0x4A | --- | k K | 75 | 0x4B | --- | l L | 76 | 0x4C | --- | m M | 77 | 0x4D | --- | n N | 78 | 0x4E | --- | o O | 79 | 0x4F | --- | p P | 80 | 0x50 | --- | q Q | 81 | 0x51 | --- | r R | 82 | 0x52 | --- | s S | 83 | 0x53 | --- | t T | 84 | 0x54 | --- | u U | 85 | 0x55 | --- | v V | 86 | 0x56 | --- | w W | 87 | 0x57 | --- | x X | 88 | 0x58 | --- | y Y | 89 | 0x59 | --- | z Z | 90 | 0x5A | --- | Win (Л) | 91 | 0x5B | VK_LWIN | Win (Пр) | 92 | 0x5C | VK_RWIN |
Табл.2.2 На дополнительном поле клавиатуры при выключенном индикаторе NumLock Клавиша | Десят. код | HEX код | Символьное имя | 0 | 96 | 0x60 | VK_NUMPAD0 | 1 | 97 | 0x61 | VK_NUMPAD1 | 2 | 98 | 0x62 | VK_NUMPAD2 | 3 | 99 | 0x63 | VK_NUMPAD3 | 4 | 100 | 0x64 | VK_NUMPAD4 | 5 | 101 | 0x65 | VK_NUMPAD5 | 6 | 102 | 0x66 | VK_NUMPAD6 | 7 | 103 | 0x67 | VK_NUMPAD7 | 8 | 104 | 0x68 | VK_NUMPAD8 | 9 | 105 | 0x69 | VK_NUMPAD9 | * | 106 | 0x6A | VK_MULTYPLY | + | 107 | 0x6B | VK_ADD | - | 108 | 0x6C | VK_SUBTRACT | . | 109 | 0x6D | VK_DECIMAL | / | 110 | 0x6E | VK_DIVIDE | n N | 78 | 0x4E | --- | o O | 79 | 0x4F | --- |
Параметр Shift является множеством, которое может быть пустым или включать символьные значения, описываемые в табл. 3. Таблица 3Символьное значение
| Назначение
| ssShift | Нажата или отпущена клавиша Shift | ssAlt | Нажата или отпущена клавиша Alt | ssCtrl | Нажата или отпущена клавиша Ctrl | Другое событие — OnKeyPress наступает, если компонент находится в фокусе при нажатии пользователем клавиши символа. Параметр Key в обработчике этого события имеет тип char и соответствует символу нажатой клавиши. Функциональные клавиши и специальные клавиши типа Shift, Alt и Ctrl не вызывают этого события. Нажатие таких комбинаций клавиш как, например, Shift+A, генерирует только одно событиеOnKeyPress, при котором параметр Key равен "А". Поскольку параметр Key передается в обработчик события как переменная, его можно изменять, передавая для дальнейшей обработки другой символ. В некоторых программах этот прием полезно использовать. Для того, чтобы распознавать комбинации клавиш или клавиши, не соответствующие символам, необходимо использовать обработчики событий OnKeyDown и OnKeyUp.Продолжение следует...
|