Портал разработчиков САПР Суббота, 04.05.2024, 15:49
Приветствую Вас Гость | RSS
Главная страница | Каталог статей | Регистрация | Вход
» Меню сайта

» Категории каталога
Работа с графикой [1]
Работа с графикой средствами языка Visual Basic 6.0, а также с использованием в его среде Win32API
Хуки и сабклассинг [1]
Использование скрытых возможностей языка...

Начало » Статьи » VB6 » Хуки и сабклассинг

Враппер
И так в этой статье расмотрим возможность, которая в некоторых случаях - способна стать альтернативой сабклассингу и более предпочиттельна, а именно рассмотрм то, как поймать событие добавляемого в процессе программы контрола:

И так приступим: откроем новый проект, и кинем на форму Label и Text

Допуситм нам нужно, чтобы при изменении значения (пусть это будет какое-то число) в Text1 - автооматически в процессе программы добавлялись текстбоксы, количество которых - задано в Text1... Но мало того, мы хотим еще и отловить событие Change этих контролов

Пусть все это происходит при событиии Change Text1, то етсь сразу же...

Мы не можем заранее, в Disign-режиме добавить эти контроы и опрдеелить их события, так не знаем их количество...
Полагаю, что задача ясна и нетривиальна

Ну что ж

напишем в коде формы следующий код:







Option Explicit
Private
textWidt() As VB.TextBox

Dim
numLab As Byte

Dim
myTxtBox() As New Vrapper


Private
Sub Form_Load()

Me.Show
Text1.SetFocus
Text1.SelLength = 1


End
Sub


Private
Sub Text1_Change()

Dim topLab As Integer

topLab = Label1.Top + 600

ReDim textWidt(Val(Text1))
ReDim myTxtBox(Val(Text1))

While numLab < Val(Text1)

Set textWidt(numLab) = Me.Controls.Add("VB.TextBox", "lineWidth" & numLab, Me)

With textWidt(numLab)
.Visible = True
.Left = Text1.Left
.Width = 350
.Top = topLab
.FontSize = 14
.Text = 1
End With

topLab = topLab + 600
myTxtBox(numLab).MkEqu = textWidt(numLab)
numLab = numLab + 1
WEnd


textWidt(0).SetFocus
textWidt(0).SelLength = 1


End
Sub




Хорошо, ну я чуть-чуть поясню:

topLab - определяет вертикальную координату создаваемого контрола, и при каждом создани она увеличвается на 600 твипов...

Строчка

Set textWidt(numLab) = Me.Controls.Add("VB.TextBox", "lineWidth" & numLab, Me)

как вы наверно уже догадались, создает тот самый контрол

А эту
myTxtBox(numLab).MkEqu = textWidt(numLab)
я объясню немного ниже.

А пока добавим в наш проект модуль класса, назовем его Vrapper и пропишем в нем следующий код







Option Explicit


Private
WithEvents DemoTxtBox As TextBox

Property Let MkEqu(DemoTxtBox2 As Object)

Set DemoTxtBox = DemoTxtBox2


End
Property


Sub
DemoTxtBox_Change()

Form1.Caption = 0


End
Sub




Ну а теперь поясняю:

Private WithEvents DemoTxtBox As TextBox
здесь ы определили текстбокс с событиями, котому в свойстве MkEqu присваиваем значение созданного контрола в коде формы, ну вобщем-то теперь и пришло время вернуться к строчке в коде формы, которую я обещал ниже пояснить:

myTxtBox(numLab).MkEqu = textWidt(numLab)
Если вы внимательно читали, то не могли не заметить, что еще в самом начале формы мы объявили массив позднее определенного класса:

Dim myTxtBox() As New Vrapper

и теперь в цикле обращаемся к текущему элементу мссива и определяем в нем свойство MkEqu, все просто

Ну а теперь вернемся в наш модуль класса и увидим там:

Sub DemoTxtBox_Change()

Form1.Caption = 0

End Sub

Вот это самое событие, которое и должно произойти при изменении значения в уже добавленных компонентах.... Как видите все просто)))

Вместо Form1.Caption = 0 вы можете вставить какой-нибудь MsgBox и проверить... (гы, а пи сабклассинге такогоо нельзя), точно также можете ловить и аналогичные события.... Пример, описанный в данной статье, можно найти в разделе скачки

Задавайте любые вопросы, связанные с этой статьей на нашем форуме, мы будем рады вам ответить

Категория: Хуки и сабклассинг | Добавил: sham (30.04.2007)
Просмотров: 2610 | Комментарии: 3 | Рейтинг: 0.0 |

Всего комментариев: 3
3 Aoyhee  
0
order atorvastatin 10mg without prescription <a href="https://lipiws.top/">lipitor 40mg ca</a> lipitor online

2 majestic  
0
хавно

1 wolfie  
0
Полезная статья )

Имя *:
Email *:
Код *:
» Форма входа

» Поиск по каталогу

» Друзья сайта


Copyright MyCorp © 2006
Сайт управляется системой uCoz