Читать книгу Программирование для карманных компьютеров - Владимир Волков - Страница 34

Глава 3
Разработка программ для Pocket PC с помощью Microsoft eMbedded Visual Basic 3.0
Использование встроенных компонентов eVB
Упражнение 3.5

Оглавление

Это упражнение демонстрирует, как работают события объекта Form.

1. Создать новый проект с формой и сохранить его под именем FormEvents.

2. Разместить на форме компоненты TextBox, ListBox и три кнопки CommandButton так, как это показано на рис. 3.22.

Рис. 3.22. Размещение компонентов на форме.


3. При помощи инспектора свойств нужно установить значения свойств для компонентов. Все необходимые значения приведены в табл. 3.5.

Таблица 3.5. Значения свойств кнопок

4. Добавить к проекту еще одну форму. Значения ее свойств можно найти в табл. 3.6.

Таблица 3.6. Свойства новой формы

5. Перейти в окне Project Explorer к форме Form1. Правой кнопкой мыши нужно щелкнуть на форме, в контекстном меню выполнить команду View Code и ввести код модуля, приведенный в листинге 3.9.

Листинг 3.9

Rem Первая кнопка выводит Форму Form2 на экран

Private Sub Command1_Click()

Form2.Show

End Sub


Rem Вторая кнопка скрывает форму Form2

Private Sub Command2_Click()

Form2.Hide

End Sub


Rem Третья кнопка изменяет размер формы 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 Sub


Private Sub Form_OKClick()

App.End

End Sub


Rem Двойной щелчок по компоненту списка очищает его содержимое

Private Sub List1_DblClick()

List1.Clear

End Sub


Rem Вывод сообщений о показе и скрытии виртуальной клавиатуры

Private Sub Form_SIPChange(ByVal IsV As Boolean)

If IsV Then

List1.AddItem «Клавиатура показана»

Else

List1.AddItem «Клавиатура скрыта»

End If

End Sub


Rem Далее в подпрограммах отслеживаем события от клавиатуры и мыши

Private Sub Form_KeyDown(ByVal KeyCode As Integer, ByVal shift As Integer)

List1.AddItem «Text1_KeyDown»

End Sub


Private Sub Form_KeyPress(ByVal KeyAscii As Integer)

List1.AddItem «Text1_KeyPress»

End Sub


Private Sub Form_KeyUp(ByVal KeyCode As Integer, ByVal shift As Integer)

List1.AddItem «Text1_KeyUp»

End Sub


Private Sub Form_MouseDown(ByVal button As Integer, ByVal shift As Integer, x, y)

List1.AddItem «Form_MouseDown»

End Sub


Private Sub Form_MouseUp(ByVal button As Integer, ByVal shift As Integer, _x, y)

List1.AddItem «Form_MouseUp»

End Sub


Rem Для того чтобы не засорять список, событие передвижения указателя

Rem мыши над формой мы обрабатываем только при нажатой левой клавише

Private Sub Form_MouseMove(ByVal button As Integer, ByVal shift As Integer, x, y)

If button = 1 Then List1.AddItem «Form_MouseMove»

End Sub


6. Перейти в окне Project Explorer к форме Form2. В ее модуле следует ввести код, приведенный в листинге 3.10.

Листинг 3.10

Private Sub Form_QueryUnload(ByVal cancel As Integer, unloadmode)

Form1.List1.AddItem «Form2 QueryUnload»

End Sub


Private 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 Sub


Private Sub Form_Load()

Form1.List1.AddItem «Form2 загружена»

End Sub


Private Sub Form_Resize()

Form1.List1.AddItem « Form2 Resize»

End Sub


7. Выполнить команду меню 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 передается не по значению, а по ссылке, значит, он будет возвращен приложению. Этот параметр, установленный в нулевое значение, позволяет форме быть деактивированной. Если же установить его в любое, отличное от нуля, значение, то форма останется активной и видимой.


ВНИМАНИЕ!

Несмотря на то что событие Unload генерируется при установлении параметра cancel = 0, сама форма не выгружается из памяти.

Программирование для карманных компьютеров

Подняться наверх