Пример динамического способа формирования объектов на форме vb
Перед добавлением собственного кода давайте посмотрим, что именно сделал мастер. Откройте окно кода объекта UserControl и просмотрите строки, сгенерированные мастером. Программа может показаться довольно длинной, но она не так сложна, как выглядит.
И наконец, еще раз вернемся к отображению различных событий на эквивалентные события объекта UserControl. Так, когда пользователь щелкает мышью на элементе управления ActiveX, Windows отправляет событие Click объекту UserControl. Разработчик элемента управления может обработать это событие в самом создаваемом элементе управления, но в этом случае приложение, которое использует элемент, не будет видеть событие Click. Но можно и передать событие (отобразить обратно) приложению-контейнеру (например, Form1). В этом случае разработчик приложения, использующий элемент управления, сможет сам запрограммировать это событие. Можно сделать и то, и другое, то есть сначала обработать событие в элементе управления, а затем передать его контейнеру, как это будет сделано в методе UserControl_Resize.
Private Sub UserControl_Resize()
m_x = UserControl. ScaleWidth 2
m_y = UserControl. ScaleHeight 2
If m_AutoSize Then
If UserControl. ScaleWidth <= UserControl. ScaleHeight Then
m_Rmax = UserControl. ScaleWidth 2 — 15 ’15 твипов=1 пикселю
m_Rmin = UserControl. ScaleWidth 6 — 15
Else
m_Rmax = UserControl. ScaleHeight 2 — 15
m_Rmin = UserControl. ScaleHeight 6 — 15
End If
Else
m_Rmax = m_def_Rmax ‘Возвращаем умалчиваемые значения
m_Rmin = m_def_Rmin
End If
UserControl. Refresh ‘Обновить объект UserControl
RaiseEvent Resize ‘Передаем событие контейнеру
End Sub
Передать событие приложению-контейнеру можно с помощью метода RaiseEvent. Так, событие Click объекта UserControl определено следующим образом.
Private Sub UserControl_Click()
RaiseEvent Click
End Sub
1. ‘Default Property Values:
‘Property Variables:
Это раздел объявлений. Здесь описываются константы, принятые по умолчанию, и закрытые переменные, характеризующие специальные свойства элемента управления. Элемент управления получает значение, введенное пользователем в окне свойств, и связывает их с закрытыми переменными. Имена констант и переменных основаны на именах свойств и их код можно легко редактировать.
1.1.Сделаем так, чтобы допустимые значения свойства отображались в раскрывающемся списке окна свойств, как в других элементах управления VB. Для этого следует добавить специальный код, который бы отображал только допустимые значения свойств Shape и FigureStyle и таким образом ограничивал выбор пользователя именно этими значениями. Если приложение использует переменную, которая может принимать только ограниченное число целочисленных значений, то можно использовать перечислимый тип, который объявляется с помощью структуры Enum … End Enum. Свойства Shape и FigureStyle как раз и будут являться такими переменными.
• Откройте окно кода проекта FlexProject и добавьте в секцию Declarations объявленные типы и описание переменных.
Это объявление сообщает Visual Basic, что переменная m_Shape типа Figure может принимать лишь значения от 0 до 2, а переменная m_FigureStyle типа FStyle – значения от 0 до 1 (перечислимые значения соответствуют числам, начинающимся с 0). Строки в объявлении типа являются синонимами соответствующих числовых значений, которые будут отображаться в окне свойств. Квадратные скобки в объявлении типа обязательны только для строк содержащих пробелы (или другие недопустимые символы).
• Теперь можно заменить тип у свойств Shape и FigureStyle с Byte на Figure и FStyle.
Пользователь уже не сможет выбрать недопустимое значение для этого свойства в окне свойств. Попытка же присвоить перечислимой переменной недопустимое значение в режиме выполнения программы приведет к сообщению об ошибке.
2. ‘Event Declarations:
Это объявления событий. Эти события были определены в первых двух окнах мастера и отображены на объект UserControl. Если события не были отображены на объект UserControl, то только UserControl будет их видеть, и пользоваться ими смогут лишь разработчики элемента. В нашем элементе управления не требуется как-то по-особенному использовать события, поэтому предоставим эту возможность контейнеру-приложению (например, Form1), на котором будет использоваться созданный нами элемент управления ActiveX.
Чтобы ActiveX-компонент был виден проекту, его необходимо зарегистрировать в системе. Для этого следует создать осх-файл командой FileMake FlexProject. ocx, которая доступна только при активном окне UserControl.
Осх-файлы могут быть расположены в любом месте на диске, но система по умолчанию начинает искать их в папке Windows System32. При создании осх-файла VB автоматически регистрирует его в системном реестре. Следовательно, если Вы создали осх-файл в другом месте, то его не следует в дальнейшем перемещать.
Чтобы иметь возможность использовать элемент ActiveX в других компьютерах, следует применить утилиту regsvr32.exe (сервер регистрации), передавая ей имя осх-файла в качестве параметра. Например, можно использовать следующую команду: REGSVR32 FlexProject. ocx
Если осх-файл был сохранен в иной папке, отличной от папки Windows System32, то следует сначала перейти в эту папку, а затем выполнить следующую команду: С:WINDOWSSYSTEM32REGSVR32 FlexProject. ocx
Чтобы удалить элемент управления из реестра Windows, также следует использовать утилиту Regsvr32, но с ключом /U. Например, удалим элемент управления FlexShape из реестра: С:WINDOWSSYSTEM32REGSVR32 FlexProject. ocx/U
Таким же образом можно устанавливать в системе или удалять из нее библиотеки динамической компоновки. Например, REGSVR32 StarP. dll.
9. Пример динамического способа формирования объектов на форме VB.
пример:Динамически сформ-ть объекты на форме VB/
Dim Text1 As TextBox, Text2 As TextBox, Text3 As TextBox
‘объекты Text1 и Text2,Text3 не будут сод-ть события
Dim WithEvens Command1 As CommandButton
Private Sub Form_Load()
Me. ScaleMode=3 Режим-пиксели для объектов формы
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Command1=Nothing
Set Text1=Nothing
Set Text2=Nothing
Set Text3=Nothing
End Sub
Private Sub Form_Activate()
MsgBox "мы сформировали дин-кую форму в среде VB"
End Sub
Private Sub Form_Initialize()
Me. Width=4000 для формы размеры задаются в твипах
Me. Height=2600 при разрешении экрана 1280*1024 точек
Set Text1=Controls. Add("VB. TextBox","T1",Form1)
Set Text2=Controls. Add("VB. TextBox","T2",Form1)
Set Text3=Controls. Add("VB. TextBox","T3",Form1)
Set Command1=Controls. Add ("VB. CommandButton","Cmd1",Form1)
Text1.Visible=True
Text2.Visible=True
Text3.Visible=True
Command. Visible=True
Command1.FontBold=True
Text1.FontBold=True
Text2.FontBold=True
Text3.FontBold=True
Text1.Left=12 Размеры эл-ов на форме в пикселях
Text1.Top=6
Text1.Width=270
Text1.Height=18
Text2.Left=12
Text2.Top=36
Text2.Width=270
Text2.Height=18
Text3.Left=12
Text3.Top=66
Text3.Width=270
Text3.Height=18
Command1.Left=45 Command1.Top=100
Command1.Width=200
Command1.Height=40
Command1.Caption="Вычислить выражение"
End Sub
Private Sub Command1_Click()
Dim a As Double, b As Double, c As Double
On Error GoTo 100
a=Text1
b=Text2 c=a*b
Text3=c
Exit Sub
100
MsgBox "Вы уверены, что ввели значения в текстовые поля?",vbQuestion,_"Динамическая форма" End Sub
10)Пример работы с коллекцией объектов, свойствами и методами объектов.
Пример 59. Объявить событие в модуле класса, а запрограммировать его в модуле формы.
Пусть событие (назовем его MTS) имеет два параметра. Первый – числовой, второй – логический. Событие будет реализовываться в методе Long1. Выполните следующие действия.
· Создайте новый проект с шаблоном Standard EXE.
· С помощью команды ProjectAdd Class Module добавьте модуль класса с именем Class1 в проект, используя шаблон Class Module на закладке New.
· Поместите в него следующий код.
Public Event MTS(ByVal Percent As Single, ByRef Cancel As Boolean)
Public Sub Long1(ByVal f As Single, c As Boolean)
RaiseEvent MTS(f, c) ‘Вызов события MTS с двумя параметрами
End Sub
· Теперь добавьте в область GD окна Code модуля формы следующий код:
Private WithEvents mW As Class1, nCancel As Boolean, r As Single
‘Ключевое слово WithEvents означает, что объект mW содержит события
Private Sub Command1_Click()
nCancel = False
r = Rnd
Set mW = New Class1 ‘Создание нового объекта на основе класса