Владимир Волков - Программирование для карманных компьютеров
4. Добавить к проекту еще одну форму. Значения ее свойств можно найти в табл. 3.6.
Таблица 3.6. Свойства новой формы5. Перейти в окне Project Explorer к форме Form1. Правой кнопкой мыши нужно щелкнуть на форме, в контекстном меню выполнить команду View Code и ввести код модуля, приведенный в листинге 3.9.
Листинг 3.9Rem Первая кнопка выводит Форму Form2 на экран
Private Sub Command1_Click()
Form2.Show
End SubRem Вторая кнопка скрывает форму Form2
Private Sub Command2_Click()
Form2.Hide
End SubRem Третья кнопка изменяет размер формы Form2
Private Sub Command3_Click()
If Form2.Height > 2500 Then
Form2.Height = 1000: Form2.Width = 1000
Else
Form2.Height = 3000: Form2.Width = 3000
End If
End SubPrivate Sub Form_OKClick()
App.End
End SubRem Двойной щелчок по компоненту списка очищает его содержимое
Private Sub List1_DblClick()
List1.Clear
End SubRem Вывод сообщений о показе и скрытии виртуальной клавиатуры
Private Sub Form_SIPChange(ByVal IsV As Boolean)
If IsV Then
List1.AddItem «Клавиатура показана»
Else
List1.AddItem «Клавиатура скрыта»
End If
End SubRem Далее в подпрограммах отслеживаем события от клавиатуры и мыши
Private Sub Form_KeyDown(ByVal KeyCode As Integer, ByVal shift As Integer)
List1.AddItem В«Text1_KeyDownВ»
End SubPrivate Sub Form_KeyPress(ByVal KeyAscii As Integer)
List1.AddItem В«Text1_KeyPressВ»
End SubPrivate Sub Form_KeyUp(ByVal KeyCode As Integer, ByVal shift As Integer)
List1.AddItem В«Text1_KeyUpВ»
End SubPrivate Sub Form_MouseDown(ByVal button As Integer, ByVal shift As Integer, x, y)
List1.AddItem В«Form_MouseDownВ»
End SubPrivate Sub Form_MouseUp(ByVal button As Integer, ByVal shift As Integer, _x, y)
List1.AddItem В«Form_MouseUpВ»
End SubRem Для того чтобы не засорять список, событие передвижения указателя
Rem мыши над формой мы обрабатываем только при нажатой левой клавише
Private Sub Form_MouseMove(ByVal button As Integer, ByVal shift As Integer, x, y)
If button = 1 Then List1.AddItem В«Form_MouseMoveВ»
End Sub6. Перейти в окне Project Explorer к форме Form2. В ее модуле следует ввести код, приведенный в листинге 3.10. Листинг 3.10
Private Sub Form_QueryUnload(ByVal cancel As Integer, unloadmode)
Form1.List1.AddItem В«Form2 QueryUnloadВ»
End SubPrivate Sub Form_Activate()
Form1.List1.AddItem В«Form2 ActivateВ»
End Sub
Private Sub Form_Deactivate()
Form1.List1.AddItem В«Form2 DeactivateВ»
End Sub
Private Sub Form_GotFocus()
Form1.List1.AddItem «Form2 Получила фокус»
End Sub
Private Sub Form_LostFocus()
Form1.List1.AddItem «Form2 Потеряла фокус»
End Sub
Private Sub Form_Paint()
Form1.List1.AddItem «Form2 перерисована»
End SubPrivate Sub Form_Load()
Form1.List1.AddItem «Form2 загружена»
End SubPrivate Sub Form_Resize()
Form1.List1.AddItem В« Form2 ResizeВ»
End Sub7. Выполнить команду меню Run ? Execute и запустить приложение в эмуляторе. На экран будет выведена первая форма.
8. После нажатия кнопки 1 на экран будет выведена вторая форма, а в ListBox будут выведены сообщения о том, какими событиями сопровождался показ этой формы.
9. Переместить форму Form2 так, чтобы форма выходила за пределы экрана. При этом будет отображено сообщение о том, что форма перерисована.
10. Нажать РєРЅРѕРїРєСѓ 3. После этого нажатия фокус РІРІРѕРґР° будет перенесен РЅР° форму Form1, Р° форма Form2 будет скрыта. Поэтому появятся сообщения Рѕ том, что форма Form2 деактивирована, потеряла фокус, Р° затем Рѕ том, что РѕРЅР° РґРІР° раза поменяла размер. Рто соответствует истине, так как сначала был изменен вертикальный, Р° затем горизонтальный размер формы.
11. Нажать кнопку 2. Будут отображены сообщения о том, какими событиями сопровождается сокрытие формы.
12. Остановить и снова запустить приложение. Нажать кнопку 3. При этом форма Form2 не появится на экране. Тем не менее, форма эта будет загружена, и ее размер будет изменен.
13. Сделать несколько щелчков мышью на форме Form1 вне визуальных компонентов. Будут отображены сообщения о событиях, связанных с нажатием и отпусканием кнопки мыши.
14. Перевести фокус РІ компонент TextBox Рё вывести РЅР° экран виртуальную клавиатуру. Появится сообщение Рѕ выводе клавиатуры. РџСЂРё работе СЃ клавиатурой появится множество соответствующих сообщений. Если нажать РЅР° алфавитно-цифровую клавишу, Рё РЅРµ отпустить ее, то РІ СЃРїРёСЃРєРµ РЅРµ будет отображено РЅРё РѕРґРЅРѕ событие, хотя должно отобразиться событие Down. Однако сразу после отпускания отображаются сразу три события – Down, Press Рё Up. Рто РЅРµ особенность eVB Рё РЅРµ особенность виртуальной клавиатуры, это явная ошибка среды разработки, Рѕ чем сказано РІ базе знаний РЅР° сайте Microsoft.
15. При скрытии экранной клавиатуры будет выведено соответствующее сообщение.
16. Следует обратить внимание, что наборы сообщений во время скрытия формы Form2 при помощи метода Hide и при помощи кнопки с крестиком на форме отличаются. Во втором случае добавляется событие QueryUnload.СОВЕТ. Три кита, на которых стоит программирование интерфейса пользователя в eVB, – методы, свойства и события. Если описание свойств и методов довольно подробно дано в справочной системе, то события (особенно их последовательность) там описаны не так подробно. Я советую вам использовать тот же подход, который мы использовали в этом упражнении, для исследования событий других компонентов, порядка и особенности их генерации при работе компонентов в том или ином режиме, и то, какие параметры передаются в событие и какие из него возвращаются обратно приложению или операционной системе.
17. Чтобы увидеть, как параметр возвращается из события в приложение, следует изменить код события QueryUnload, введя код из листинга 3.11. Листинг 3.11
Private Sub Form_QueryUnload(cancel, unloadmode)
Form1.List1.AddItem В«Form2 QueryUnloadВ»
cancel = 0
End Sub
Private Sub Form_Unload(cancel)
Form1.List1.AddItem В«Form2 UnloadВ»
End SubПараметр cancel передается РЅРµ РїРѕ значению, Р° РїРѕ ссылке, значит, РѕРЅ будет возвращен приложению. Ртот параметр, установленный РІ нулевое значение, позволяет форме быть деактивированной. Если же установить его РІ любое, отличное РѕС‚ нуля, значение, то форма останется активной Рё РІРёРґРёРјРѕР№.