коды клавиш c builder
Код клавиши Enter на калькуляторе
и нажать ентер, то Edit выдает число 13.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Подскажите аски код клавиши ENTER
Хотел написать программу, которая вводит строки из файла и выводит их потом построчно, но для.
Нажатие клавиши enter
Нужно, чтобы по нажатию клавиши Enter цикл завершался, и началаось действие, что находится под.
Добавлено через 1 минуту
да в RAD уже WORD &Key
Добавлено через 6 минут
вот это условие почему то работает. нажимаю «*» на калькуляторе, все выполняется.
Добавлено через 1 минуту
Добавлено через 1 минуту
хм, точняк. странно, до этого писал так :
Помощь в написании контрольных, курсовых и дипломных работ здесь.
нажатии клавиши Enter
всем с новым годом нажатии клавиши Enter на форма1 есть поля2 хочу чтоб после ввода.
Имитация клавиши Enter
Добрый день Товарищи программисты. Пишу скрипт с модулем Device::SerialPort. Простая программа.
Нажатие клавиши ENTER
Всем привет! ____________ Возможно ли реализовать имитацию нажатия клавиши в другом приложении.
как в C++ Builder 6 программно нажать какуюнибудь кнопку цифру или букву?
можно
1.Как программно сымитировать нажатие клавиш CTRL+V
// Напишите следующий код:
BYTE keys[256];
GetKeyboardState(keys);
keys[17] = 128;
SetKeyboardState(keys);
keybd_event(86, 0, 0, 0);
// ПРИМЕЧАНИЕ: с помощью это примера можно сымитировать
// и нажатие других комбинации, надо знать только код клавиш
FAQ с сайта Borland X Portal
2.Нажатие клавиши «а»
// Напишите следующий код:
keybd_event(‘A’, 0,0,0);
keybd_event(‘A’, 0,KEYEVENTF_KEYUP,0);
3.Минимизация всех окон (Win+M)
// Напишите следующий код:
keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(‘M’, 0, 0, 0);
keybd_event(‘M’, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
4.Имитация нажатия Alt+Tab
// Напишите следующий код:
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(VK_TAB, 0, 0, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0);
5.Имитация нажатия CapsLock
// Напишите следующий код:
keybd_event(VK_CAPITAL, 0, 0, 0);
keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP,0);
6.Имитация нажатия PrintScreen
// Напишите следующий код:
keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP,0);
7.Имитация нажатия PrintScreen только для формы
// Напишите следующий код:
keybd_event(VK_SNAPSHOT, 1, 0, 0);
keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP,0);
Событие OnKeyDown
Для большинства клавиш имеются также символьные имена API Windows. Коды клавиш и соответствующих им символьных имен приведены в табл. 22.2.
Таблица 22.2. Коды клавиш и соответствующих им символьных имен
На основном поле клавиатуры
Клавиша | Десятичное значение кода | Шестнадцатеричное значение кода | Символьное имя | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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_ESCAPE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | 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_MULTIPLY | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ | 107 | 0x6B | VK_ADD | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
— | 108 | 0x6C | VK_SUBTRACT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
. | 109 | 0x6D | VK_DECIMAL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/ | 110 |
Событие | Когда происходит событие |
OnActivate | При активизации объекта |
OnCanResize | При изменении размеров |
OnContextPopup | При вызове контекстного меню |
OnClick | По щелчку мыши на компоненте и при другой активизации компонента |
OnClose | При закрытии |
OnDblClick | По двойному щелчку мыши на компоненте |
OnChanqe | После изменения графического объекта |
OnDragDrop | В момент отпускания перетаскиваемого компонента над данным компонентом |
OnDragOve | Когда пользователь перемещает перетаскиваемый объект над компонентом |
OnEndDraq | В момент прерывания или окончания перетаскивания компонента |
OnEnter | В момент получения элементом Фокуса |
OnExit | В момент потери элементом фокуса |
OnKeyDown | При нажатии пользователем любой клавиши |
OnKeyPress | При нажатии пользователем клавиши символа |
OnKeyUp | При отпускании пользователем любой клавиши |
OnMouseUp | В момент нажатия пользователем клавиши мыши над компонентом |
OnMouseMove | При перемещении курсора мыши над компонентом |
OnPaint | При получении сообщения Windows о необходимости перерисовать изображение |
OnProgress | Во время медленных процессов изменения графического изображения |
OnStartDraq | Когда пользователь начал перетаскивание объекта |
OnEnter | При вводе |
OnExit | При выходе |
ShowMessage(«Событие OnClick произошло в «+((TControl *)Sender)->Name);
Табл.2.1 На основном поле клавиатуры
Табл.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.
Символьное значение | Назначение |
ssShift | Нажата или отпущена клавиша Shift |
ssAlt | Нажата или отпущена клавиша Alt |
ssCtrl | Нажата или отпущена клавиша Ctrl |
Label1->Caption = «Было событие OnClick»;
Этот код программы позволит изменять свойство Caption компонента на сообщение о возникновении события OnClick на форме приложения.
Аналогично введите для формы Form1 код обработки события KeyDown :
if(Shift.Contains(ssAlt)) Label1->Caption = «Alt»;
if(Shift.Contains(ssCtrl)) Label1->Caption = «Ctrl»;
if(Shift.Contains(ssShift)) Label1->Caption = «Shift»;
switch (Key)
<
case VK_INSERT: Label1->Caption = «Insert»; break;
case VK_CAPITAL: Label1->Caption = «CapsLock»; break; case VK_NUMLOCK: Label1->Caption = «NumLock»; break;
>
и код обработки события KeyPress :
switch (Key)
<
case ‘ ‘: Label1->Caption = «Был нажат пробел»;
break;
default : Label1->Caption = Key;
break;
>
Теперь запустите приложение на выполнение и нажимайте любые клавиши на клавиатуре, а также пощелкайте левой кнопкой мышки по форме приложения. В результате вы увидите реакцию программы на ваши действия.
Событие OnExit наступает в момент потери элементом фокуса при его переключении на другой элемент. Это событие не наступает при переключениях между формами или между приложениями. Значение свойства ActiveControl изменяется прежде, чем происходит событие OnExit. При переключениях между элементами, расположенными в разных контейнерах, например, на разных панелях, событие OnExit сначала наступает для элемента, а потом для содержащего его контейнера. Это противоположно последовательности событий OnEnter, которые при переключении из другого контейнера на компонент данного контейнера наступают сначала для контейнера, а потом для компонента.
Создайте новое приложение и поместите на него три компонента Edit из закладки Standard. Создайте обработчик события OnEnter для компонента Edit2 и вставьте в него программный код:
ShowMessage(«Фокус на элементе»);
Теперь создайте обработчик события OnExit для этого же компонента и вставьте в него программный код:
Запустите приложение и нажимайте клавишу табуляции. Фокус будет переключаться между компонентами Edit, и при переходе через Edit2 на экране будет формироваться сообщение о состоянии фокуса.
Далее рассмотрим события, связанные с работой мыши.
Событие OnMouseDown наступает в момент нажатия пользователем клавиши мыши над компонентом. Имеется также парное к нему событие OnMouseUp, наступающее при отпускании нажатой кнопки мыши над объектом.
Обработка событий OnMouseDown и OnMouseUp используется для операций, требуемых при нажатии и отпускании пользователем какой-либо кнопки мыши. Обработчики этих событий имеют параметры Sender, Shift, Button, X и Y. С первыми двумя параметрами мы уже знакомы из описания предыдущих событий. Значения параметра Button определяют, какая кнопка мыши нажата: mbLeft — левая, mbRight — правая, mbMiddle — средняя. Параметры X и Y определяют координаты указателя мыши в клиентской области компонента.
Создайте новое приложение и поместите на его форму два компонента Label. Для формы Forml создайте обработчик события OnMouseDown и введите в него следующие строки программного кода:
if(Button == mbLeft) Label1->Caption = «Нажата левая кнопка мыши»;
if(Button == mbRight) Label1->Caption = «Нажата правая кнопка мыши»;
if(Button == mbMiddle) Label1->Caption = «Нажата средняя кнопка мыши»;
Label2->Caption = «Координаты мыши: X=»+string(X)+» Y=»+String(Y);
Запустите приложение и пощелкайте разными кнопками мыши на его форме. Вы увидите сообщения программы о ваших действиях и координаты курсора мыши.
Событие OnMouseMove наступает при перемещении курсора мыши над компонентом.
Обработчик события OnMouseMove вставляется в программу, если необходимо произвести какие-то операции при перемещении курсора мыши над компонентом. Параметр Shift, являющийся множеством, содержит элементы, позволяющие определить, какие кнопки мыши и вспомогательные клавиши (Shift, Ctrl или Alt) нажаты в этот момент. Параметры X и Y определяют координаты указателя мыши в клиентской области компонента.
Добавьте в предыдущую программу обработчик события OnMouseMove для формы Forml и вставьте в него следующую строку программного кода:
Label2->Caption = «Координаты мыши: X=»+String(X)+» Y=»+Strlng(Y);
Вновь запустите приложение и проверьте, как ведет себя программа, когда вы перемещаете курсор мыши над формой и другими компонентами.
Следующие описываемые события относятся к графическим компонентам и перемещению объектов.
Событие OnChange связано с графическим компонентом канвы (рамки) и наступает после изменения графического объекта. Обработчик события OnChange должен осуществить необходимые операции при изменении графического объекта и отразить его новые установки. Событие происходит сразу после изменения изображения на канве. При вызове любого метода рисования осуществляется следующая последовательность операций:
• происходит событие OnChanging;
• вызванный метод канвы TCanvas осуществляет изменения в изображении;
• наступает событие OnChange.
Событие канвы OnChange наступает при изменении именно самого изображения, а не свойств канвы. Такие свойства канвы, как объекты Font (шрифт). Brush (кисть) и Реп (перо), имеют свои собственные события OnChange.
Событие OnPaint наступает, когда приходит сообщение Windows о необходимости перерисовать испорченное изображение. Изображение может испортиться из-за временного перекрытия данного окна другим окном того же или постороннего приложения. Обработчик данного события должен перерисовать изображение. При перерисовке изображения канвы Canvas можно использовать свойство ClipRect, которое указывает область канвы, внутри которой изображение испорчено.
События OnProgress наступают во время медленных процессов изменения графического изображения, таких как загрузка, сохранение, трансформация. Заготовка его обработчика приведена ниже:
void __fastcall TForml::
Image1Progress(T0bject *Sender, TProgressStage Stage, BYTE PercentDone, bool RedrawNow, const TRect &R, const AnsiString Msg)
<
>
Значение | Описание |
dsDragEnter | Курсор мыши входит в пределы компонента |
dsDragMove | Курсор мыши перемещается в пределах компонента |
dsDragLeave | Курсор мыши выходит за пределы компонента |
Основы программирования в среде C++Builder (стр. 11 )
| Из за большого объема этот материал размещен на нескольких страницах: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
В приложениях, разработанных в среде С++Builder, можно непосредственно производить обработку соответствующих сообщений WM_*. Однако среда С++Builder упрощает обработку аппаратного ввода для визуальных компонентов с помощью механизма событий. Как уже отмечалось выше, все визуальные компоненты (наследники TControl) имеют возможность обработки событий от мыши. Все же оконные компоненты (наследники TWinControl) имеют также возможность обработки событий от клавиатуры. Рассмотрим основные из этих событий более подробно.
6.1. Интерфейс работы с мышью в C++Builder
Событие void TControl::OnMouseUp (__fastcall * (__closure)(TObject* Sender, TMouseButton Button, TShiftState Shift, int X, int Y)) возникает при отпускании кнопки мыши. Параметры аналогичны событию OnMouseDown.
Событие void TControl::OnDblClick (__fastcall * (__closure)(TObject* Sender)) возникает при двойном нажатии левой кнопки мыши над объектом Sender. Данное событие доступно только для компонентов с установленным флагом csDoubleClicks в свойстве ControlStyle. В противном случае двойное нажатие будет интерпретироваться как два одинарных нажатия кнопки мыши.
Событие void TControl::OnClick (__fastcall * (__closure)(TObject* Sender)) возникает когда пользователь выполняет действие “click” (щелчок) над объектом Sender. Обычно это происходит при нажатии и отпускании левой кнопки мыши над компонентом. Однако к аналогичному результату приводят и другие действия пользователя. Например, для кнопки это нажатие клавиши “Spacebar” если кнопка находилась в фокусе ввода, для кнопки-переключателя (“CheckBox”) – изменение значения свойства Checked. Таким образом, данное событие связано не только с обработкой сообщений от мыши.
6.2. Интерфейс работы с клавиатурой в C++Builder
Событие void TWinControl::OnKeyUp (__fastcall * (__closure)(TObject* Sender, unsigned short &Key, TShiftState Shift)) возникает при отпускании ранее нажатой клавиши на клавиатуре. Параметры аналогичны предыдущему сообщению.
Событие void TWinControl::OnKeyPress (__fastcall * (__closure)(TObject* Sender, char &Key)) возникает при нажатии и отпускании алфавитно-цифровой клавиши на клавиатуре. Параметр Key содержит ASCII символ, сгенерированный в результате нажатия клавиши. Заметим, что нажатие функциональных клавиш, таких как Ctrl или F10 не приводит к генерации данного события. Кроме того, параметр Key будет всегда содержать получившийся ASCII код, независимо от способа его получения. Например, нажатие комбинации клавиш Shift-‘S’ при выключенном режиме CapsLock или клавиши ‘S’ при включенном приведут к генерации этого события с ASCII кодом ‘S’. Причем нажатие клавиши Shift не приведет к генерации OnKeyPress. Аналогично предыдущим событиям, параметр Key передается по ссылке и может быть изменен в обработчике. Таким образом можно, например, производить фильтрацию ввода и ограничить набор доступных для ввода символов.
При обработке событий от клавиатуры для формы есть один нюанс. Напомним, что события от клавиатуры генерируются именно для того компонента, который имеет фокус ввода. Таким образом, клавиатурные события для формы будут сгенерированы только в том случае, если ни один компонент на ней не имеет фокуса ввода. Однако существует специальное свойство KeyPreview компонента TForm. Если оно содержит значение true, то все клавиатурные события будут сначала сгенерированы для формы, владеющей компонентом с фокусом ввода, а потом повторно сгенерированы для этого компонента.
6.3. Пример использования событий мыши и клавиатуры в C++Builder
Рассмотрим небольшой пример, показывающий практическое применение всех рассмотренных выше событий. Форма содержит компонент TestStringGrid типа TStringGrid, для которого определены обработчики OnMouseDown, OnMouseUp и OnMouseMove. Обработчики этих событий реализуют возможность обмена содержимого ячеек. Для этого необходимо, нажав клавиши Ctrl и Alt и удерживая правую кнопку мыши, перетащить одну ячейку решетки на место другой. Также на форме содержится компонент TestMemo типа TMemo, для которого определен обработчик OnKeyDown. В данном обработчике реализованы следующие действия: удаление текущей строки при нажатии комбинации Ctrl-Y, выделение всего текста при нажатии комбинации Ctrl-A и изменение типа выравнивания текста при нажатии клавиши F2. На форме содержится компонент TestEdit типа TEdit, для которого определен обработчик OnKeyPress. Данный обработчик позволяет вводить в поле ввода только цифры и буквы для шестнадцатеричного представления числа. Кроме того, ввод возможен как в русской, так и в английской раскладке и в любом регистре. Во всех случаях ввод будет преобразован в прописные латинские символы. А для самой формы определен обработчик OnKeyUp, который позволяет завершить работу приложения при нажатии комбинации клавиш Ctrl-Alt-Q. Свойство KeyPreview должно быть установлено в true. Ниже приведен исходный код данного примера.
Листинг 6.1. Использование событий мыши и клавиатуры в приложениях
- С чем сделать салат с авокадо
- gdi windows что это такое