Урок 3 1. Процедуры обработки событий Любой объект можно связать с набором процедур, исполняемых в строго определенные моменты. Процедура (procedure) - это группа операторов языка. Исполняется процедура - исполняются ее операторы. Так или иначе, весь составленный вами исполняемый код (executable code) обязательно помещается в какую-нибудь процедуру. Процедура, присвоенная объекту, связана с определенным событием (event) и поэтому называется процедурой обработки события (event procedure). Событиями считаются, например, Click (щелчок кнопки мыши), DubleClick (двойной щелчок мыши) или Resize (изменение размера). События происходят только в период выполнения программы (runtime), но не в период проектирования. Важно отметить, что с одним объектом могут быть связаны несколько событий. Когда, дважды щелкнув мышкой в окне формы, вы попадаете в окно ее кода, обратите внимание, что окно кода имеет название. В названии присутствует имя формы, что указывает на взаимосвязь кода и объекта. Код, который вы введете в этом окне, будет храниться в том же файле, что и экранные объекты формы. Когда вы создали на вашей форме объекты, Visual Basic подготовил для этих объектов набор процедур обработки событий по умолчанию. Процедуры по умолчанию не делают ничего; они состоят лишь из объявления процедуры (declaration) и оператора, помечающего конец процедуры (End Sub). В объявлении процедуры ключевое слово Sub обозначает начало процедуры. Первая часть имени процедуры должна соответствовать имени объекта, который вы создали на форме (или должно присутствовать слово Form, если объектом является форма). Последняя часть имени должна включать имя события (Click, DubleClick и.т.д.) Обе части следует разделять знаком подчеркивания (_). Ниже приведено окно кода формы Form1 и в нем одна процедура, созданная Visual Basic по умолчанию: 2. Объект Screen Прежде чем приступить к созданию следующего проекта третьего урока познакомимся еще с одним объектом. Объект Screen - это экран вашего монитора. Мы не будем говорить о нем подробно. Важно, что он обладает свойством Height - высота экрана и свойством Width - ширина экрана. Эти свойства вам понадобятся для вашего проекта. 1 3. Изменения местоположения формы в коде (проект prjMoveMyForm) Попробуем менять местоположение формы в процессе выполнения проекта (т.е. в коде). Проект основан на форме с четырьмя командными кнопками. Кнопки расположены в углах формы. Когда пользователь щелкает по кнопке, форма передвигается в соответствующую ей часть экрана. Результат сопровождается резюмирующими сообщениями в метке в центре формы. Форму назовите frmMyForm, свойству Caption формы присвойте значение Перемещение формы по экрану. Метку назовите (свойство name) lblVar , значение свойства Caption метки пустая строка (lbl –префикс метки). Первой сделайте кнопку для завершения проекта. Назовите ее cmdExit, свойству Caption присвойте значение Выход. Кнопки назовите следующим образом (свойству name присвойте значения): cmdUpLeft - левую верхнюю; cmdDownLeft - левую нижнюю; cmdUpRight - правую верхнюю; cmdDownRight - правую нижнюю, где cmd - это префикс в названии командных кнопок. Значения свойства Caption кнопок тоже не задавайте. В итоге форма на этапе проектирования должна выглядеть приблизительно следующим образом: Как только форма загружается в память компьютера, перед тем, как она появится на экране, всегда вызывается событие Load. Ответ на событие Load можно запрограммировать с помощью процедуры Form_Load( ). Процедура Form_Load( ) является своего рода попыткой Visual Basic спросить: “Не нужно ли при загрузке формы выполнить что-нибудь еще?” В нашем проекте в этой процедуре мы установим значения свойств Caption для кнопок команд, что поможет пользователю понять назначение каждой из этих кнопок. Для того, чтобы в коде менять значение свойства некоего объекта, нужно назвать его, называя сначала имя объекта, потом через точку его свойство и присвоить ему значение. Тогда процедура Form_Load( ) будет выглядеть следующим образом: Private Sub Form_Load( ) cmdUpLeft.Caption = “ВлевоВверх” cmdDownLeft.Caption = “Влево Вниз” cmdUpRight.Caption = “ВправоВверх” cmdDownRight.Caption = “ВправоВниз” 2 ‘очистка поля с информацией о состоянии программы lblVar.Caption = “ ” End Sub Запустите проект на выполнение. Теперь форма выглядит следующим образом: Нужно создать код для перемещения формы на экране. Этот код будет добавлен в процедуры обработки событий Click для всех кнопок команд. Для кнопки cmdBottomLeft при щелчке по ней необходимо, чтобы нижний край формы совпадал с нижним краем экрана. Тогда свойство Top формы будет равно высоте экрана минус высота формы, т.е. frmMyForm.Top = Screen.Height - frmMyForm.Height Свойство Left формы должно соответствовать левому краю экрана, т.е. frmMyForm.Left = 0 Тогда код для кнопки cmdBottomLeft обработки события Click будет выглядеть следующим образом: Private Sub cmdDownLeft_Click( ) frmMyForm.Top = Screen.Height - frmMyForm.Height frmMyForm.Left = 0 End Sub Составьте коды обработки события Click для других кнопок самостоятельно. Кроме событий, инициируемых непосредственно пользователем, есть и другие события, являющиеся прямыми или опосредованными следствиями действий пользователя. Когда пользователь щелкает на командной кнопке, вместе с событием Click вызываются и еще несколько. Одно из них - событие GotFocus для данной кнопки. При этом какой-то другой элемент управления теряет фокус. Это означает вызов события LostFocus для соответствующего элемента управления. Точно так же, как и событие Click, события GotFocus и LostFocus инициированы действием пользователя. Мы в нашем проекте обработаем события GotFocus для командных кнопок: будем с помощью свойства Caption метки lblVar, сообщать, какая командная кнопка в фокусе. 3 Процедура события GotFocus для кнопки cmdUpRight будет иметь вид: Private Sub cmdUpRight_GotFocus( ) lblVar.Caption = “Нажата кнопка UpRight” End Sub Теперь по время выполнения проекта, если пользователь щелкнет по правой верхней кнопке, форма будет иметь следующий вид: Самостоятельно составьте коды для события GotFocus остальных командных кнопок. Запишите проект на диск под именем prjMoveMyForm. 4