Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 03-02-2015, 13:28:30

Название: Controls.Enum function
Отправлено: R.I.Chernov от 03-02-2015, 13:28:30
Доброго времени суток, уважаемые форумчане! При выполнении задачи наткнулся на функцию Controls.Enum , но не разобрался, как ею пользоваться. По косвенной информации, которую нашел в сети, показалась очень полезной, хотя возможно я что-то не так понял :) Поделитесь пожалуйста своим опытом ее использования, если таковой имеется.
Название: Re: Controls.Enum function
Отправлено: Алексей Романов от 04-02-2015, 13:44:11
По косвенной информации, которую нашел в сети, показалась очень полезной
А можно ссылку на косвенную информацию...) Функция в VBA определена как Function Enum() As Unknown, справки по ней нет, при вызове не возвращает значения, в сети сведений о ней не нашел...
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 04-02-2015, 13:55:19
По косвенной информации, которую нашел в сети, показалась очень полезной
А можно ссылку на косвенную информацию...) Функция в VBA определена как Function Enum() As Unknown, справки по ней нет, при вызове не возвращает значения, в сети сведений о ней не нашел...

То что нет справки и стало моей основной проблемой :) "Косвенную информацию" я черпал в интернете "убивая время в метро"... к сожалению ссылок не осталось.
П.С. Одна из статей https://msdn.microsoft.com/ru-ru/library/8h84wky1.aspx  ... посчитал, что работать они должны схоже.

UPDATE
http://www.cpearson.com/Excel/Enums.aspx
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 15:02:35
Enum - это перечисление, особенный тип данных
Controls - это (обычно) элементы управления на форме
Controls.Enum - это что-то совсем не понятное.
Ну и напоследок из приведенной ссылки:
Цитировать
One the nice improvements in the VB.NET language is the ability to test a value for validity and to get the enum element name corresponding to a value. Unfortunately, this is not possible in VBA.
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 04-02-2015, 15:17:21
Ну и напоследок из приведенной ссылки:
Цитировать
One the nice improvements in the VB.NET language is the ability to test a value for validity and to get the enum element name corresponding to a value. Unfortunately, this is not possible in VBA.

Нууу, если английский меня не подводит, то это переводится как: " Одно из приятных улучшений языка VB.NET- это возможность проверять значение...бла-бла-бла. К сожалению это не возможно для VBA." И "невозможно" имеется ввиду проверка значений, а не означает отсутствие  функции Enum как таковой?

Насчет Controls.Enum ... Метод Enum есть не только у коллекции Controls, но и у Pages и Tabs
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 15:21:28
И "невозможно" имеется ввиду проверка значений, а не означает отсутствие  функции Enum как таковой?
1) Это не функция, это тип данных (такой же как Integer, Long, String и т.д.)
2) Да. Это означает, что нет прямого приведения целочисленного значения к типу Enum
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 15:24:31
Метод Enum есть не только у коллекции Controls, но и у Pages и Tabs
Это касательно Inventor или VBA вообще? В VBA я такого не нашел, а в Inventor это может (не знаю, т.к. с Inventor не работаю) означать функцию, которая позволяет "перечислить" (т.е. пройтись по всем элементам).

P.S.: Нашел еще специфическое Inventor'ое: http://adndevblog.typepad.com/manufacturing/2012/07/how-to-use-enumtype-object.html
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 04-02-2015, 15:39:49
1) Это не функция, это тип данных (такой же как Integer, Long, String и т.д.)
Я терминами не очень подкован, но в объектном браузере enum обозначается таким же значком, как и все выполняемые операторы (полагаю функции и методы), тогда как в нижней части написано:
"Function Enum() As Unknown
Member of MSForms.Controls"

Это касательно Inventor или VBA вообще?
Ну меня интересует использование в рамках инвентора. Сейчас залез в VBA экселя, там классы controls, tabs и Pages имеют такую функцию
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 16:22:39
"Function Enum() As Unknown
Member of MSForms.Controls"
Controls - это класс коллекции элементов (управления) на форме: https://msdn.microsoft.com/en-us/library/office/ff845021%28v=office.15%29.aspx
Насколько я понимаю (а я не знаток VBA) Controls.Enum, как и методы Enum в других коллекциях нужны только для поддержки синтаксиса:

Код - Visual Basic [Выбрать]
  1. Dim xs as Controls ' дальше инициализация xs
  2. '.................
  3. For Each x as Control in xs
  4. '.................
  5. NEXT
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 04-02-2015, 16:35:22
Насколько я понимаю (а я не знаток VBA) Controls.Enum, как и методы Enum в других коллекциях нужны только для поддержки синтаксиса:
Если я понял правильно идею, то Вы считаете, что Enum нужен для перебора коллекции. Но вот в соседнем топике мы сегодня использовали в коде перебор:
For Each invVBAProject In ThisApplication.VBAProjects

Тогда было бы логично, что если класс/коллекция (не знаю точно равноправны ли эти термины :) ) ... вобщем если VBAProjects доступен для перебора, то тогда должен содержать функцию Enum ...но не содержит. И в инвенторе и в экселе функцию Enum имеют лишь три  вышеуказанных класса: controls, tabs и pages.
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 17:30:52
Я пришел к такому выводу по косвенным данным. Во всяком случае скрытая функция _NewEnum используется именно для этого:
https://msdn.microsoft.com/en-us/library/aa262338%28v=vs.60%29.aspx
Название: Re: Controls.Enum function
Отправлено: Алексей Романов от 04-02-2015, 19:21:46
Я пришел к такому выводу по косвенным данным. Во всяком случае скрытая функция _NewEnum используется именно для этого:
Теперь все понятно, спасибо за ссылку, Александр. _NewEnum присутствует в объекте Controls: см. скрин.
Если написать просто Me.Controls.Enum, то код выполняется и без ошибок, но ничего не делает (и не должен)...
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 04-02-2015, 19:25:24
Если написать просто Me.Controls.Enum, то код выполняется и без ошибок, но ничего не делает (и не должен)...
Я не проверял, возможно он возвращает или "нумератор", или текущий указатель на объект коллекции...
Название: Re: Controls.Enum function
Отправлено: Алексей Романов от 05-02-2015, 06:13:36
Я не проверял, возможно он возвращает или "нумератор", или текущий указатель на объект коллекции...
Функция возвращает тип объекта как <Unsupported object type> (на скрине видно). Думаю, наверное поэтому и описания ее нет...)
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 05-02-2015, 09:44:57
Моей думалки пока недостаточно, чтобы осознать все, что вы сейчас наобсуждали :) Но я правильно же понял, что ответ на вопрос найден? ;)
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 05-02-2015, 09:49:53
но я правильно же понял, что ответ на вопрос найден?
Зависит от того, что считать ответом. ;) В любом случае этим методом воспользоваться напрямую не получится. Да и непонятно зачем он Вам понадобился...
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 05-02-2015, 10:18:18
Я на него случайно наткнулся, когда лазил по объектному браузеру - решил тщательно ознакомиться со свойствами и методами класса Controls. Не понял, что это, погуглил, почитал, показалось, что что-то полезное... но видимо только показалось :)
Название: Re: Controls.Enum function
Отправлено: Александр Ривилис от 05-02-2015, 13:30:57
Я на него случайно наткнулся, когда лазил по объектному браузеру - решил тщательно ознакомиться со свойствами и методами класса Controls
Кстати, очень полезное занятие. Далеко не все вещи документированы. Не знаю насколько это касается Inventor, но AutoCAD это касается на 100%. В AutoCAD есть функции, которые вроде бы для внутреннего потребления, недокументированные. Но они есть уже больше десятка лет и часто альтернативы им нет - в своё время их нашли и пользуемся. Так что "копание" одобряю. И еще. Если это возможно я бы рекомендовал перейти на .NET (желательно на C#, но в крайнем случае можно и VB.NET).
Название: Re: Controls.Enum function
Отправлено: R.I.Chernov от 05-02-2015, 17:19:05
Спасибо за совет! Обязательно учту. Но сейчас уже надо доделать в VBA то что начали, чтобы перед начальством отчитаться за потраченное время :). Так что пока переход на другой язык невозможен... Если партии понравится и время на программирование и дальше будет выделятся, тогда обязательно вернемся к этому разговору ;)