ksPlacement на Python

Автор Slaviation, 10.04.18, 07:01:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Slaviation

Пост для ТрындецЪ и всех интересующихся.
Во вложении пример реализации  ksPlacement на Python.
Сначала запускаем dispatchOCX.py - в системе зарегистрируется определенный в нем OCX. Затем на активном чертеже запускаем test.pyw.
+ Благодарностей: 2

pr0100

Работает. Правда портабельным с библиотеки Компас-Макро не удалось запустить. Но через установленный python 3.6 запустилось.

ТрындецЪ

#2
А у меня "не завелась" ни на 2.7 ни на 3.6 .

Slaviation

ЦитироватьА у меня "не завелась" ни на 2.7 ни на 3.6
Это ошибки запуска test.pyw.
А предварительный запуск dispatchOCX.py был? без ошибок?
После запуска dispatchOCX.py в реестре должен был появиться раздел
HKEY_CLASSES_ROOT\CLSID\{7CC9F362-486D-11D1-BB48-0000E838A65F}
+ Благодарностей: 1

ТрындецЪ

Цитата: Slaviation от 10.04.18, 08:37:10
Это ошибки запуска test.pyw.
А предварительный запуск dispatchOCX.py был? без ошибок?
После запуска dispatchOCX.py в реестре должен был появиться раздел
HKEY_CLASSES_ROOT\CLSID\{7CC9F362-486D-11D1-BB48-0000E838A65F}
Сам тупанул :) На радостях даже пост не дочитал, и не запускал предварительно dispatchOCX.py :shu:
Всё заработало! От души спасибо! Вот только жутко сложно для меня пока...

IgorT

А можно спросить, что такое этот " ksPlacement" и как его использовать простым смертным?

Цитата: IgorT от 10.04.18, 09:09:03
А можно спросить, что такое этот " ksPlacement" и как его использовать простым смертным?
Можно в SDK прочитать,  что такое этот " ksPlacement" ил "ksCursor", только зачем Вам такие дебри?

ksCursor - Запрос к системе на получение точки.
ksPlacement - Запрос к системе на получение точки и угла.

Slaviation

Цитироватьне запускал предварительно dispatchOCX.py
на всякий случай: запуск dispatchOCX.py потребуется всего один раз, не перед каждым запуском test.pyw. :)
+ Благодарностей: 2

IgorT

Цитата: Sabahs от 10.04.18, 09:14:36
... только зачем Вам такие дебри?

ksCursor - Запрос к системе на получение точки.
ksPlacement - Запрос к системе на получение точки и угла.
:shu:

А что в результате работы программы получается?

Это запрос, что получится, ограничивается полётом фантазии, запросившего, т.е. реализация Ваша.

IgorT

#10
Цитата: Sabahs от 10.04.18, 09:30:32
Это запрос, что получится, ограничивается полётом фантазии, запросившего, т.е. реализация Ваша.
не. Я про обсуждаемый в теме пример. Не очень понятно, что он делает?

ТрындецЪ

Цитата: Slaviation от 10.04.18, 09:19:30
на всякий случай: запуск dispatchOCX.py потребуется всего один раз, не перед каждым запуском test.pyw. :)
А если я реализую другую функцию внутри dispatchOCX.py (чисто гипотетически, мечтать же не вредно :)), то всё равно повторный запуск не нужен будет? Мы один раз зарегистрировали класс DispatchOCX в системе (win32com.server.register.UseCommandLine(DispatchOCX)) и этого достаточно?

pr0100


Цитата: ТрындецЪ от 10.04.18, 09:49:11
А если я реализую другую функцию внутри dispatchOCX.py (чисто гипотетически, мечтать же не вредно :) ), то всё равно повторный запуск не нужен будет? Мы один раз зарегистрировали класс DispatchOCX в системе (win32com.server.register.UseCommandLine(DispatchOCX)) и этого достаточно?
Попробовал изменил в коде dispatchOCX.py диаметр окружности и запустил тест, без повторного запуска. Диаметр окружности изменился. Согласно измененным параметрам.

ТрындецЪ

Цитата: pr0100 от 10.04.18, 09:54:53
Попробовал изменил в коде dispatchOCX.py диаметр окружности и запустил тест, без повторного запуска. Диаметр окружности изменился. Согласно измененным параметрам.
С такими мелочами понятно, что прокатит. Интересно про более "глобальные" изменения, например, добавление функции CallBackС.

Цитата: IgorT от 10.04.18, 09:09:03
А можно спросить, что такое этот " ksPlacement" и как его использовать простым смертным?
Это программный интерфейс положение объекта. Непрограммистам он никак не поможет.
+ Благодарностей: 1

Какая разница, поменяйте CallBackP на CallBackС.

Slaviation

quote]С такими мелочами понятно, что прокатит. Интересно про более "глобальные" изменения, например, добавление функции CallBackС.[/quote]
Загляните в ключ HKEY_CLASSES_ROOT\CLSID\{7CC9F362-486D-11D1-BB48-0000E838A65F}.
Станет понятно, что добавление в DispatchOCX новых методов не повлияет на содержимое этого ключа.
Но если захотите перенести DispatchOCX.py на другое место, то да, потребуется его перерегистрация.
+ Благодарностей: 1

ТрындецЪ

Цитата: Slaviation от 10.04.18, 10:41:49
Загляните в ключ HKEY_CLASSES_ROOT\CLSID\{7CC9F362-486D-11D1-BB48-0000E838A65F}.
Станет понятно, что добавление в DispatchOCX новых методов не повлияет на содержимое этого ключа.
Но если захотите перенести DispatchOCX.py на другое место, то да, потребуется его перерегистрация.
А я-то думаю, чего это у меня пример глючить стал, а я оказывается DispatchOCX.py из другого места на диске регистрировал и удалил потом оттуда... Буду ковырять дальше. Спасибо!

ТрындецЪ

Уважаемый, Slaviation, ещё раз ОГРОМНОЕ СПАСИБО за пример!
Благодаря ему смог разобраться с фантомом обозначения позиции.
Ещё несколько сопутствующих вопросов для общего, так сказать, развития. Правильно ли я понимаю назначение следующих параметров:
_reg_clsid_ = "{7CC9F362-486D-11D1-BB48-0000E838A65F}"  - это UUID-идентификатор, созданного нами СОМ-объекта.
Получить новый идентификатор, как подсказал мне Google, можно, исполнив следующий код:
import pythoncom
print (pythoncom.CreateGuid())

_reg_progid_ = "Python.DispatchOCX" - это "читабельный" идентификатор СOM-объекта, по которому мы к нему будем обращаться через win32com.client.Dispatch. Вот тут интересно, какие ограничения есть на его создание (его имя не должно ещё быть зарегистрировано в системе, нельзя использовать какие-то знаки и т.п.)?
_reg_desc_ = "DispatchOCX COM" - а для этого я не нашёл толкового описания, кроме как то, что это "описание объекта".

Slaviation

ЦитироватьЕщё несколько сопутствующих вопросов для общего, так сказать, развития
...Python\Python36\Lib\site-packages\PyWin32.chm\Python COM\Overviews\win32com documentation index\A Quick Start to Server Side COM\
+ Благодарностей: 2