Использование встроенных компонентов eVB
Использование встроенных компонентов eVB
Окно настройки свойств (Properties Window)
Окно настройки свойств по умолчанию располагается в правом нижнем углу экрана. Его внешний вид показан на рис. 3.18.
Рис. 3.18. Окно настройки свойств.
При помощи окна настройки свойств пользователь может изменять значения параметров свойств выбранных на форме компонентов или самой формы.
В списке указано предназначение элементов этого окна в соответствии с цифрами на выносках.
1. Раскрывающийся список компонентов. В списке указывается имя компонента и его тип.
2. Список свойств для выбранного компонента.
3. Значения свойств.
4. Краткое описание текущего свойства. Оно далеко не всегда бывает информативным. Например, когда вы выбираете для формы свойство ShowOK, то описание сообщает вам, что это – свойство ShowOK. Больше никакой информации по поводу этого свойства не предоставляется.
5. Вкладки, переключающие представление списка свойств с алфавитного на категоризированный.
Чтобы изменить значение свойства, необходимо в списке 2 (см. рис. 3.18) найти соответствующее имя, щелкнуть мышью справа от него в зоне 3, а затем отредактировать значение свойства.
Типы свойств
В eVB компоненты могут иметь свойства одного из трех типов.
1. Обычное свойство редактируется прямым вводом в поле значения свойства. Оно представляет собой текстовую строку или число.
2. Перечислимое свойство имеет ряд предустановленных значений, из которых можно выбрать одно. В поле редактирования отображается в виде выпадающего списка.
3. Поведение сложного свойства зависит от комплекса параметров. Само свойство обычно является объектом. Сложное свойство редактируется при помощи редактора. Редактор свойства появляется при щелчке на кнопке с тремя точками, которая находится в поле ввода значения свойства и отображается при щелчке по этому полю.
Компонент Form
Методы компонента FormМетоды компонента Form приведены в табл. 3.1.
Таблица 3.1. Методы компонента FormСвойства компонента Form
В табл. 3.2 приведено описание свойств компонента Form.
Таблица 3.2. Свойства компонента FormСобытия компонента Form
В этом разделе описываются события компонента Form. Все они приведены в табл. 3.3.
Таблица 3.3. События компонента Form
Упражнение 3.4
Это упражнение демонстрирует работу с методами объекта Form.
1. Создать новый проект с формой и сохранить его в папке FormMethods, задав имя файла FormMethods.ebp. Будет создан проект с формой Form1.
2. Нажать кнопку AddForm, что приведет к добавлению к проекту еще одной формы с именем Form2.
3. Разместить на форме Form1 две кнопки так, как это показано на рис. 3.19.
Рис. 3.19. Размещение кнопок на форме Form1.
4. Пользуясь инспектором свойств, установить для формы Form1 значение true для свойства AutoRedraw и значение 20 для свойства DrawWidth. Остальным свойствам можно оставить их значения по умолчанию.
5. В окне Project Explorer выбрать форму Form2. Необходимые значения свойств для этой формы приведены в табл. 3.4. Остальные свойства нужно оставить без изменений.
Таблица 3.4. Свойства формы Form2
6. Форма изменит цвет и размеры. На форме Form2 требуется разместить компонент Timer, как это показано на рис. 3.20.
Рис. 3.20. Форма Form2 после редактирования свойств и размещения таймера.
7. Щелчком мыши выделить компонент Timer1 и для его свойства Interval установить значение 150.
8. Двойным щелчком мыши на компоненте Timer1 создать подпрограмму обработки события одного тика таймера и ввести в нее код, приведенный в листинге 3.3.
Листинг 3.3Private Sub Timer1_Timer()
i=i+a
j=j+b
If i > 1600 Then a = – a: BackColor = &HFF&:
DrawCircle 500, 500, 400, &HFF00FF:
DrawLine 1100, 1100, 1800, 1800, &HFF00FF, vbLineBoxFill
If j > 2500 Then b = – b: BackColor = &HFFFF&:
DrawCircle 500, 500, 400, &HFF00FF:
DrawLine 1100, 1100, 1800, 1800, &HFF00FF, vbLineBoxFill
If i < 0 Then a = – a: BackColor = &HFF00&:
DrawCircle 500, 500, 400, &HFF00FF:
DrawLine 1100, 1100, 1800, 1800, &HFF00FF, vbLineBoxFill
If j < 0 Then b = – b: BackColor = &HFF0000:
DrawCircle 500, 500, 400, &HFF00FF:
DrawLine 1100, 1100, 1800, 1800, &HFF00FF, vbLineBoxFill
Move i, j
End SubЭтот код демонстрирует применение методов DrawCircle, DrawLine и Move для того, чтобы перемещать форму Form2 и рисовать на ее поверхности круг и прямоугольник.
9. Кроме кода обработчика события тика таймера необходимо после строки Option Explicit ввести еще один блок кода объявления и инициализации переменных, приведенный в листинге 3.4.
Листинг 3.4Dim a, b, i, j
i=0
j=0
a = 100
b = 5010. В окне Project Explorer необходимо переключиться на объект Form1. Для кнопок Command1 и Command2 свойство Caption должно получить значения Показать и Очистить соответственно.
11. Двойным щелчком на кнопке Command1 создать обработчик события щелчка на кнопке и ввести для него код, приведенный в листинге 3.5.
Листинг 3.5Private Sub Command1_Click()
If ShFrm2 Then
Form2.Show
ShFrm2 = False
Command1.Caption = «Скрыть»
Else
Form2.Hide
ShFrm2 = True
Command1.Caption = «Показать»
End If
End SubЭтот метод демонстрирует применение методов Show и Hide для отображения и скрытия формы Form2 при нажатии кнопки Command1.
12. Двойным щелчком на кнопке Command2 создать обработчик события щелчка на кнопке и ввести для него код, приведенный в листинге 3.6.
Листинг 3.6Private Sub Command2_Click()
Cls
Form2.Z0rder vbBringToFront
End SubКоманда Cls очищает поверхность формы Form1 от нарисованных на ней линий, а метод ZOrder выводит форму Form2 на передний план после выполнения этой команды. Без этого метода она становится невидимой, так как ее заслоняет форма Form1.
13. Ввести еще один блок кода в этом же модуле, приведенный в листинге 3.7.
Листинг 3.7Private Sub Form_Load()
DrawLine 1100, 1100, 9000, 18000, &HFF&
DrawLine 1100, 1100, 18000, 10000, &HFF&
DrawLine 1100, 1100, 18000, 18000, &HFF&
End SubПри помощи этого кода в момент загрузки формы Form1 на ней будут нарисованы три линии красного цвета.
14. В начале этого же блока следует объявить и проинициализировать переменную, которая будет хранить состояние формы. Делается это при помощи кода, приведенного в листинге 3.8.
Листинг 3.8Option Explicit
Dim ShFrm2 As Boolear
ShFrm2 = True15. Сохранить проект. В качестве целевого устройства нужно выбрать в списке значение Pocket PC 2002 Emulation, после чего следует выполнить команду Run ? Execute. На экран эмулятора будет выведена форма Form1 с нарисованными на ней линиями. После нажатия кнопки Показать на экран будет выведена форма Form2 с нарисованными на ней окружностью и квадратом, а надпись на кнопке изменится на Скрыть (рис. 3.21).
Рис. 3.21. Программа FormMethods в работе/
Форма Form2 будет перемещаться по экрану и изменять цвет в момент столкновения с границами экрана. Нажатие кнопки Очистить приведет к тому, что будут стерты линии с поверхности формы Form1. При работе с приложением стоит несколько раз скрыть и снова отобразить форму Form2. Это покажет, что форма не уничтожается при скрытии и продолжает свое перемещение в невидимом состоянии.
Упражнение 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.
Rem Первая кнопка выводит Форму 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 передается не по значению, а по ссылке, значит, он будет возвращен приложению. Этот параметр, установленный в нулевое значение, позволяет форме быть деактивированной. Если же установить его в любое, отличное от нуля, значение, то форма останется активной и видимой.
ВНИМАНИЕ! Несмотря на то что событие Unload генерируется при установлении параметра cancel = 0, сама форма не выгружается из памяти.
Данный текст является ознакомительным фрагментом.