Как по имени объекта получить сам объект и его дескриптор?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ФАНТОМНЫЙ ЮЗЕР
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 27.12.2007 (Чт) 20:08
Откуда: phpbb_users

Как по имени объекта получить сам объект и его дескриптор?

Сообщение ФАНТОМНЫЙ ЮЗЕР » 08.10.2004 (Пт) 0:23

Имеется некоторый список объектов.
В этом символьном списке выбираешь требуемый и требуется получить его дескриптор hWnd.

Подскажите, пожалуйста, как это осуществить при помощи API :?:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 08.10.2004 (Пт) 7:43

Что такое объект? И что за символьный список?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.10.2004 (Пт) 8:01

Может имеется в виду:

me(ControlName).hWnd ???

Только не все контролы имеют hWnd...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ФАНТОМНЫЙ ЮЗЕР
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 27.12.2007 (Чт) 20:08
Откуда: phpbb_users

Сообщение ФАНТОМНЫЙ ЮЗЕР » 08.10.2004 (Пт) 14:30

Так именно. Не все элементы имеют дескриптор. Поэтому в программе именно эти элементы надо пропустить, а учесть только те элементы, которые имеют дескриптор.
Имеется следующая процедура в UserControl:
Код: Выделить всё
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MappingInfo=UserControl,UserControl,-1,Controls
Friend Property Get BuddyControls() As Collection
' Возвращает коллекцию, которая содержит список элементов контроля
' на родительской форме. Список содержит все контроли, кроме этого
Dim sMyName As String
Dim c As Control
Dim sTmp As String
Dim sink As Long

     sMyName = Ambient.DisplayName
     Set BuddyControls = New Collection
     For Each c In UserControl.Parent.Controls ' Обработать все элементы формы
     If c.Object Is Me Then GoTo Skip
Add: On Error GoTo Skip ' При возникновении ошибки, ее обойти
     sink = c.hWnd ' Получить дескриптор любого элемента управления (в том числе и без дескриптора)
     sTmp = c.Name
     If sTmp <> sMyName Then
         BuddyControls.Add sTmp
     End If
Skip: On Error GoTo -1
    Next c
End Property


Таким образом на строке
Код: Выделить всё
sink = c.hWnd

возникает ошибка 438: Object doesn't support this property or method

Как же быть????
Чьё это было сообщение?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.10.2004 (Пт) 14:56

Ну что тут сложного:

Код: Выделить всё
Dim c As Control, iHWnd As Long
   
On Error Resume Next
For Each c In UserControl.Parent.Controls
    iHWnd = 0: iHWnd = c.hWnd
    Debug.Print c.Name, iHWnd
Next c
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ФАНТОМНЫЙ ЮЗЕР
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 27.12.2007 (Чт) 20:08
Откуда: phpbb_users

Как по имени объекта получить сам объект и его дескриптор?

Сообщение ФАНТОМНЫЙ ЮЗЕР » 08.10.2004 (Пт) 15:33

Не работает... VB6 выдает ошибку 438!!!!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.10.2004 (Пт) 16:21

А что у тебя установлено в Tools/Options/General/Error Trapping ?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.10.2004 (Пт) 16:30

Andrey, всё дело в том, что такой код:
Код: Выделить всё
On Error GoTo 1
Error 123
1: On Error GoTo 2
Error 234
2: Debug.Print "не напечатается"

- не работает, т.к. нельзя устанавливать "вложенные" обработчики.

А вот такой - работает:
Код: Выделить всё
On Error GoTo 1
Error 123
1: On Error GoTo -1: On Error GoTo 2
Error 234
2: Debug.Print "напечатается!"
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.10.2004 (Пт) 16:34

- не работает, т.к. нельзя устанавливать "вложенные" обработчики.


Не знаю - работает он или нет - проверять как-то не интересно было - ибо я так не пишу по определению. А вот свой вариант перед отправкой на всякий случай проверил - он точно работает... И зачем его еще накручивать?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.10.2004 (Пт) 16:39

Andrey, ты таки не понял, из-за чего все глюки...
Твой код у oal вызывается в обработчике, и пытается установить свой обработчик. Потому и не работает.
В отдельной процедуре он, вполне может быть, работает - не проверял. А вот свои два примера я перед отправкой на всякий случай проверил - они точно работают...
Изображение


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 0

    TopList  
cron