Написание надстройки для VB6 - нужна помощь

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Написание надстройки для VB6 - нужна помощь

Сообщение hCORe » 18.01.2005 (Вт) 21:03

Я создаю надстройку (Add-In) для VB6. Она должна выводить на экран информацию обо всех элементах на выбранных пользователем формах.

В MSDN для "Студии" (локальная версия от января 2000) говорится, что для работы с коллекцией Controls любой формы можно воспользоваться следующим кодом:
Код: Выделить всё
Debug.Print Application.VBE.SelectVBComponent.Designer.Controls.Count


То есть, подумал я, можно для какого-то компонента взять свойство Designer и работать с ним вот так:

Код: Выделить всё
Dim VBInstance As VBIDE.VBE
...
    Dim i As Long, f As Long
    Dim Inst As VBComponent
    For i = 1 To lstForms.ListCount
        DoEvents
        ls = ""
        If lstForms.Selected(i - 1) = True Then
            ls = lstForms.List(i - 1)
            For f = 1 To _
            VBInstance.ActiveVBProject.VBComponents.Count
                DoEvents
                Set Inst = _
                VBInstance.ActiveVBProject.VBComponents.Item(i)
                If Inst.Type = vbext_ct_VBForm Or _
                Inst.Type = vbext_ct_VBMDIForm Then
                    If Inst.Name = ls Then                     
                        Inst.DesignerWindow.Visible = True
                        'эта строка вызывает ошибку,
                        'хотя вроде-бы должна работать
                        'MsgBox Inst.Designer.Controls.Count
                    End If
                End If
            Next f
        End If
    Next i
...


В этом коде lstForms - это обыкновенный ListBox с "загнанными" туда именами форм.

Если раскомментировать строку:
Код: Выделить всё
MsgBox Inst.Designer.Controls.Count

то VB6 вылетит с ошибкой 438: Object doesn't support this property or method :shock:

Я испробовал и код, предлагаемый MSDN'ом. Во-первых, вопиющей ошибкой там было использование какого-то SelectVBObject вместо SelectedVBObject, а во-вторых, даже модифицированный код вгонял IDE в ступор.

В связи с этим извечный вопрос: что делать?
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 19.01.2005 (Ср) 21:52

Что, никто не сталкивался с такой проблемой? :?
Тогда придётся идти обходными путями. "Врагу не сдаётся наш гордый..." :)
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 21.01.2005 (Пт) 11:04

Нашёл решение. Надо было использовать коллекцию VBControls 8) Теперь всё работает. Воспользовался примером из книги - Steven Roman "Developing Visual Basic Add-ins"
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList