close

Вход

Забыли?

вход по аккаунту

?

Лабораторная работа 1 (2)

код для вставкиСкачать
 Лабораторная работа № 1. Работа с манипулятором "мышь" и клавиатурой.
Цель работы: Ознакомление с основными принципами программирования работы с манипулятором "мышь" и клавиатурой в C++ Builder 6.
При выполнении лабораторной работы основное внимание уделено обработчике событий, связанных с манипулятором "мышь" и клавиатурой.
Работу с манипулятором "мышь" поддерживают все визуальные компоненты, которые видимы на экране во время выполнения приложения. Работу с клавиатурой поддерживают только те визуальные компоненты, которые имеют идентификатор окна Windows (свойство Hande, которое доступно только для чтения). В общем случае, чтобы определить доступные обработчики события для компонента нужно открыть вкладку Events.
Обработчики событий для манипулятора "мышь".
Событие OnMouseDown (TObject* Sender, TMouseButton Button, TShiftState Shift, int X, int Y) возникает при нажатии и удержании кнопки мыши.
где: Sender - указатель на визуальный компонент, для которого происходит данное событие.
Button - переменная типа перечисление, определяет, какая конкретно кнопка мыши была нажата. Содержит один из следующих флагов: mbLeft - нажата левая кнопка мыши, mbRight - нажата правая кнопка мыши, mbMiddle - нажата средняя кнопка мыши.
Shift - это переменная типа множество, определяющая состояние функциональных клавиш Alt, Ctrl и Shift, а также кнопок мыши в момент нажатия кнопки мыши. Может содержать различные комбинации следующих флагов: ssShift - нажата клавиша Shift, ssAlt - нажата клавиша Alt, ssCtrl - нажата клавиша Ctrl, ssLeft - нажата левая кнопка мыши, ssRight - нажата правая кнопка мыши, ssMiddle - нажата средняя кнопка мыши, ssDouble - произведено двойное нажатие кнопки мыши. Например, код для условия, что при событии OnMouseDown была зажата на клавиатуре клавиша Ctrl будет следующим: if(Shift.Contains(ssCtrl))
X и Y определяют координаты курсора мыши в клиентской области объекта Sender.
Событие OnMouseUp (TObject* Sender, TMouseButton Button, TShiftState Shift, int X, int Y) возникает при отпускании кнопки мыши. Параметры аналогичны событию OnMouseDown.
Событие OnClick (TObject* Sender) возникает когда пользователь выполняет действие "click" (щелчок) над объектом Sender. Обычно это происходит при нажатии и отпускании левой кнопки мыши над компонентом. Это событие происходит также, если:
* Пользователь выбрал элемент в таблице, дереве, списке, выпадающем списке, нажав клавишу со стрелкой.
* Пользователь нажал клавишу пробела, когда кнопка или индикатор были в фокусе.
* Пользователь нажал клавишу Enter, а активная форма имеет кнопку по умолчанию, указанную свойством Default.
* Пользователь нажал клавишу Esc, а активная форма имеет кнопку прерывания, указанную свойством Cancel.
* Пользователь нажал клавиши быстрого доступа к кнопке или индикатору. Например, если свойство Caption индикатора записано как "&Полужирный" и символ П. подчеркнут, то нажатие пользователем комбинации клавиш Alt-П вызовет событие OnClick в этом индикаторе.
* Приложение установило в true свойство Checked радиокнопки RadioButton.
* Приложение изменило свойство Checked индикатора CheckBox.
* Вызван метод Click элемента меню.
Sender содержит объект, в котором произошло событие.
Событие OnDblClick (TObject* Sender) возникает при двойном нажатии левой кнопки мыши над объектом Sender. Данное событие доступно только для компонентов с установленным флагом csDoubleClicks в свойстве ControlStyle. В противном случае двойное нажатие будет интерпретироваться как два одинарных нажатия кнопки мыши.
Sender содержит объект, в котором произошло событие.
Событие OnMouseMove (TObject* Sender, TShiftState Shift, int X, int Y) возникает при перемещении курсора мыши над компонентом.
где: Sender - указатель на визуальный компонент, для которого происходит данное событие.
Shift - это переменная типа множество, определяющая состояние функциональных клавиш Alt, Ctrl и Shift, а также кнопок мыши в момент нажатия кнопки мыши. Может содержать различные комбинации следующих флагов: ssShift - нажата клавиша Shift, ssAlt - нажата клавиша Alt, ssCtrl - нажата клавиша Ctrl, ssLeft - нажата левая кнопка мыши, ssRight - нажата правая кнопка мыши, ssMiddle - нажата средняя кнопка мыши, ssDouble - произведено двойное нажатие кнопки мыши. Например, код для условия, что при событии OnMouseDown была зажата на клавиатуре клавиша Ctrl будет следующим: if(Shift.Contains(ssCtrl))
X и Y определяют координаты курсора мыши в клиентской области объекта Sender.
Обработчики событий для клавиатуры.
Событие OnKeyDown (TObject* Sender, Word &Key, TShiftState Shift) наступает, если компонент находится в фокусе, при нажатии пользователем любой клавиши, включая функциональные и вспомогательные, такие, как Shift, Alt и Ctrl. где: Sender - указатель на визуальный компонент, для которого происходит данное событие.
Shift - аналогичен одноименному параметру для событий от мыши, но только значения элементов Shift, соответствующие нажатиям кнопок мыши, в данном событии не используются.
Key - содержит код нажатой клавиши. Для алфавитно-цифровых клавиш код совпадает с ASCII кодом соответствующего клавише символа, приведенного к верхнему регистру. Например, 'S' , '7' и т.д. Для остальных клавиш используется виртуальный код клавиши, задаваемый константами VK_*. Например, VK_F1, VK_TAB, VK_RETURN и т.д.
Событие OnKeyUp (TObject* Sender, Word &Key, TShiftState Shift)) возникает при отпускании ранее нажатой клавиши на клавиатуре. Параметры аналогичны OnKeyDown.
Событие OnKeyPress (TObject* Sender, char &Key)) наступает, если компонент находится в фокусе, при нажатии пользователем клавиши символа. где: Key содержит ASCII символ, сгенерированный в результате нажатия клавиши. При этом различаются символы в верхнем и нижнем регистрах и символы кириллицы и латинские. Клавиши, не отражаемые в кодах ASCII (функциональные клавиши и такие, как Shift, Alt, Ctrl), не вызывают этого события.
Sender - указатель на визуальный компонент, для которого происходит данное событие.
Событие OnEnter (TObject *Sender) наступает в момент получения элементом фокуса ввода.
где: Sender - указатель на визуальный компонент, для которого происходит данное событие.
Событие OnExit (TObject *Sender) наступает в момент потери элементом фокуса, в момент его переключения на другой элемент.
где: Sender - указатель на визуальный компонент, для которого происходит данное событие.
Обратите внимание, что события от клавиатуры генерируются именно для того компонента, который имеет фокус ввода. Таким образом, клавиатурные события для формы будут сгенерированы только в том случае, если ни один компонент на ней не имеет фокуса ввода. Однако существует специальное свойство KeyPreview компонента TForm. Если оно содержит значение true, то все клавиатурные события будут сначала сгенерированы для формы, владеющей компонентом с фокусом ввода, а потом повторно сгенерированы для этого компонента.
Это основные события, используемые при работе с клавиатурой и манипулятором "мышь"
Кроме данных событий в лабораторной работе будут задействованы следующие события для формы.
Событие OnCreate (TObject *Sender) возникает в момент создания формы и может использоваться для выполнения каких-то процедур настройки ее самой или содержащихся на ней компонентов.
где: Sender - указатель на форму.
Событие OnResize (TObject *Sender) заключительное событие при изменении размеров формы.
где: Sender - указатель на форму.
Событие OnShortCut (TWMKey &Msg, bool &Handled) возникает при нажатии пользователем клавиши, до того, как возникло стандартное событие OnKeyDown. Обработчик позволяет предусмотреть нестандартную реакцию на нажатие какой-то клавиши. где: Msg - параметр сообщения Windows, поле CharCode которого (Msg.CharCode) содержит виртуальный код нажатой клавиши. Handled - если задать ему значение true, то стандартные события OnKevDown. OnKevPress. OnKevUD не наступят.
Далее приступим непосредственно к выполнению лабораторной работы.
Запустите ИСР. Для этого выберите меню Windows ПУСК | Все Программы | Borland C++ Builder 6 | C++Builder 6.
Сохраните проект в новой отдельной папке.
Присвойте основной форме заголовок, в качестве имени которого используйте название дисциплины, номер работы и варианта и свою фамилию. Для задания заголовка в инспекторе объекта для формы выберете свойство Caption (по умолчанию текст будет Form1).
Установите для формы ограничения изменения размеров максимум 800х600, минимум 600х400. Для этого используйте свойства MaxHeight, MaxWidth и MinHeight, MinWidth. Свойства находятся в свойстве Constraints, для доступа к ним нажмите на знак плюса напротив свойства Constraints. Установите позицию показа формы по центру экрана (свойство Position из выпадающего списка выберите значение poDesktopCenter). После каждой модернизации программы сохраняйте проект и проверяйте его работоспособность. Для запуска приложения нажмите клавишу F9 или выберите пункт меню Run | Run или нажмите на панели инструментов на пиктограмму Поместите на форму кнопку Button. Для кнопки поменяйте заголовок (свойство Caption поменяйте в Инспекторе Объекта) на "Проверка". Добавьте обработчик события нажатия кнопки мыши OnMouseDown. Для этого найдите в Инспекторе Объекта на вкладке Events нужный обработчик и кликнете напротив него по пустому месту (подробнее смотрите рисунок 1.3).
В обработчике задайте следующие условие, если нажата левая кнопка мыши, то вывести сообщение функцией ShowMessage(): "Нажата левая кнопка мыши". Аналогичные сообщения должны появиться и для нажатия правой и средней кнопок: "Нажата правая кнопка мыши", "Нажата средняя кнопка мыши". Для проверки условия проверяйте значение переменной Button типа TMouseButton. Добавьте в обработчик код, нужно писать между скобками { }. Для написания требуемого кода пользуйте контекстной справкой, которая появляется после написания разделителя -> В конце каждой строчки необходимо ставить знак ;. В результате вы получите код:
Где: ShowMessage(string) - функция вызова диалогового окна сообщения с текстом, записанным в переменной string.
Сохраните приложение и проверьте его на работоспособность. При нажатии на кнопке "Проверка" выводится диалоговое окно с соответствующей записью.
Поместите на форму кнопку Button. Задайте для неё заголовок "Перемещение" (свойство Caption). Кнопку можно перетаскивать по форме в процессе выполнения программы. Для этого добавить обработчик перемещения курсора мыши для Button OnMouseMove. В обработчике задать изменения координат кнопки от перемещения (свойства Left и Top). При этом перемещение кнопки должно быть разрешено только при зажатой левой кнопки мыши. Для этого в обработчике OnMouseMove сделать проверку переменной Shift, которая должна содержать флаг ssLeft. В итоге будет следующий код:
где:
Left - левая координата кнопки относительно формы;
Top - верхняя координата кнопки относительно формы.
Сохраните приложение и проверьте его на работоспособность. При удержании левой кнопки мыши над кнопкой должно происходить её перемещение по форме.
Поместите на форму кнопку Button, заголовок которой установите в "Таймер" (свойство Caption). Для кнопки должно выводиться сообщение о времени, в течение которого была зажата кнопка мыши над компонентом. Для этого поместите на форму Timer со вкладки System. визуальных компонентов. Установить свойство Enabled в false. Свойство Interval оставьте по умолчанию 1000 миллисекунд. Для таймера добавьте обработчик срабатывания таймера OnTimer, в котором должно происходить увеличение глобальной переменной на единицы. Для этого создайте после описания формы глобальную переменную целого типа и обнулите её: int t=0;(рисунок 1). В обработчик добавьте одну строку: t++;.
Рисунок 1 - Объявление глобальной переменной.
Далее требуется для кнопки Button добавить два обработчика нажатия кнопки мыши OnMouseDown, обработчик отпускания кнопки мыши OnMouseUp. В обработчике OnMouseDown выполните следующую последовательность действий: обнуление переменной t;
включение таймера - свойство Enabled поменять на true.
В обработчике OnMouseUp выполните следующую последовательность действий:
выключение таймера - свойство Enabled поменять на false;
вывод значения t с помощью функции ShowMessage(IntToStr(t)),
где IntToStr - функция преобразования типа данных целое число в тип данных строка.
Сохраните приложение и проверьте его на работоспособность. После нажатия и отпускания кнопки мыши над кнопкой "Таймер" должно выводиться сообщение с количеством времени удержания нажатой кнопки в секундах.
Поместите на форму компонент Memo из вкладки Standart визуальных компонентов. Установите для Memo вертикальную полосу прокрутки (свойство ScrollBars), установите свойство Align в состояние в соответствии с вариантом. В редакторе компонента Memo очистите содержимое строк (свойство Lines). Для этого щёлкните кнопкой мышью по кнопке с многоточием напротив свойства Lines. В открывшемся редакторе очистите содержимое строк. Создайте обработчик для текстового поля Memo OnKeyDown, в котором нужно определять нажатие функциональных клавиш, используя виртуальные коды VK_F1...VK_10. Для выбора нужной клавиши используйте конструкцию switch case. Название нажатой функциональной клавиши выводите в специальную помещённую на форму метку Label из вкладки Standard, в свойство Caption. Например: "Нажата клавиша: F1". Для кнопки F1 код будет следующим:
где: switch case конструкция множественного выбора.
switch - показывает какая переменная проверяется, в данном случае код символа в переменной Key;
case - определяет конкретное значение проверяемой переменной;
break - завершает работу конструкции множественного выбора.
Сохраните приложение и проверьте его на работоспособность. В специальной метке должен выводиться текст с информацией о нажатой функциональной клавише. Для Memo добавьте обработчик печати символа OnKeyPress, в котором требуется определить в каком регистре: верхнем или нижнем напечатан символ. Результат должен выводиться специальную помещённую на форму метку Label из вкладки Standard, в свойство Caption: "Символ напечатан в верхнем регистре" или "Символ напечатан в нижнем регистре". Для определения, в каком регистре напечатан символ используйте функции islower и isupper для латинских букв. Код будет следующий:
где: islower(Key) - функция вернёт значение true, если переменная Key напечатана в нижнем регистре (латинские буквы);
isupper(Key) - функция вернёт значение true, если переменная Key напечатана в верхнем регистре (латинские буквы).
Сохраните приложение и проверьте его на работоспособность. В специальной метке должен выводиться текст с информацией о нажатом символе.
Для формы добавьте обработчик OnShortCut, в котором добавьте оператор закрытия формы (Form1->Close();), если нажата клавиша Esc. Код клавиши Esc равен 27. Таким образом, нужно проверить, равна ли переменная Msg.CharCode 27.
Сохраните приложение и проверьте его на работоспособность. При нажатие на клавишу Esc приложение должно закрываться.
Поместите на форму компонент Statusbar из вкладки Win32 визуальных компонентов. Откройте редактор компонента и добавьте четыре панели (рисунок 1.6). Для нулевой и второй панелей задайте в инспекторе объекта свойство Text "Ширина формы" и "Высота формы" соответственно. Для отображения текста установите ширину панели 100 (свойство Width). Добавьте для формы обработчики создания формы OnCreate и изменения размеров формы OnResize. В которых должны выводится в строку состояния StatusBar1 размеры формы двумя операторами:
где: Items[1] и Items[3] - ссылки на первую и третью панели соответственно.
Form1->Width - ширина формы;
Form1->Height - высота формы.
Сохраните приложение и проверьте его на работоспособность. В строке состояния должны выводится размеры формы.
Для компонентов, помещённых на форму для которых доступен обработчик получения фокуса ввода OnEnter, задайте последовательность смены фокуса ввода при нажатии клавиши Tab. Для этого в строке состояния StatusBar добавьте ещё одну дополнительную панель, в которой будет указано какому компоненту принадлежит фокус ввода в данный момент. Например "Фокус ввода принадлежит текстовому полю Memo1". Для добавления текста в строку состояния используёте для каждого компонента обработчик OnEnter. Например, код для кнопки "Перемещение":
Сохраните приложение и проверьте его на работоспособность. В строке состояния должна выводиться информация о компоненте, которому принадлежит фокус ввода в данный момент.
Подготовьте отчёт лабораторной работы. Для отчёта требуется:
Титульный лист, с названием предмета, номера работы, ФИО студента, номер группы и ФИО преподавателя;
Листинг программы (Unit1.cpp).
Краткое содержание задания
1. Запустите C++ Builder 6.
2. Сохраните новый проект в отдельно созданной папке.
3. Присвойте основной форме заголовок, в качестве имени которого используйте название дисциплины, номер работы и варианта и свою фамилию. Установите для формы ограничения изменения размеров согласно варианту. Для этого используйте свойства MaxHeight, MaxWidth и MinHeight, MinWidth. Установите позицию показа формы по центру экрана.
4. Поместите на форму кнопку Button. Для кнопки поменяйте заголовок (свойство Caption) на "Проверка". Добавьте обработчик события нажатия кнопки мыши OnMouseDown. В обработчике задайте следующие условие, если нажата левая кнопка мыши, то вывести сообщение функцией ShowMessage(): "Нажата левая кнопка мыши". Аналогичные сообщения должны появиться и для нажатия правой и средней кнопок: "Нажата правая кнопка мыши", "Нажата средняя кнопка мыши". Для проверки условия проверяйте значение переменной Button типа TMouseButton. 5. Поместите на форму кнопку Button. Задайте для неё заголовок "Перемещение" (свойство Caption). Кнопку можно перетаскивать по форме в процессе выполнения программы. Для этого добавить обработчик перемещения курсора мыши для Button OnMouseMove. В обработчике задать изменения координат кнопки от перемещения (свойства Left и Top). При этом перемещение кнопки должно быть разрешено только при зажатой левой кнопки мыши. Для этого в обработчике OnMouseMove сделать проверку переменной Shift, которая должна содержать флаг ssLeft.
6. Поместите на форму кнопку Button, заголовок которой установите в "Таймер" (свойство Caption). Для кнопки должно выводиться сообщение о времени, в течение которого была зажата кнопка мыши над компонентом.
7. Поместите на форму компонент Memo из вкладки Standart визуальных компонентов. Установите для Memo вертикальную полосу прокрутки, установите положение Memo на форме в состояние в соответствии с вариантом. В редакторе компонента Memo очистите содержимое строк. Создайте обработчик для текстового поля Memo OnKeyDown, в котором нужно определять нажатие функциональных клавиш, используя виртуальные коды VK_F1...VK_10. Для выбора нужной клавиши используйте конструкцию switch case. Название нажатой функциональной клавиши выводите в специальную помещённую на форму метку Label из вкладки Standard, в свойство Caption. Например: "Нажата клавиша: F1".
8. Для Memo добавьте обработчик печати символа OnKeyPress, в котором требуется определить в каком регистре: верхнем или нижнем напечатан символ. Результат должен выводиться специальную помещённую на форму метку Label из вкладки Standard, в свойство Caption: "Символ напечатан в верхнем регистре" или "Символ напечатан в нижнем регистре". Для определения, в каком регистре напечатан символ используйте функции islower и isupper для латинских букв.
9. Для формы добавьте обработчик OnShortCut, в котором добавьте оператор закрытия формы (Form1->Close();), если нажата клавиша Esc.
10. Поместите на форму компонент Statusbar из вкладки Win32 визуальных компонентов. Откройте редактор компонента и добавьте четыре панели (рисунок 1.6). Для нулевой и второй панелей задайте в инспекторе объекта свойство Text "Ширина формы" и "Высота формы" соответственно. Для отображения текста установите ширину панели 100 (свойство Width). Добавьте для формы обработчики создания формы OnCreate и изменения размеров формы OnResize. В которых должны выводится в строку состояния StatusBar1 размеры формы.
11. Для компонентов, помещённых на форму для которых доступен обработчик получения фокуса ввода OnEnter, задайте последовательность смены фокуса ввода при нажатии клавиши Tab. Для этого в строке состояния StatusBar добавьте ещё одну дополнительную панель, в которой будет указано какому компоненту принадлежит фокус ввода в данный момент.
12. Сохраните приложение и покажите преподавателю на проверку.
Документ
Категория
Рефераты
Просмотров
77
Размер файла
138 Кб
Теги
работа, лабораторная
1/--страниц
Пожаловаться на содержимое документа