Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Макрос с формой, Как отвязать форму от документа
 
Помогите, люди добрые!
Сделал макрос для поиска в содержимом строчных текстов. Много с ними работаю, давно хотел такую функцию. И вроде работает более-менее. Но есть вопрос. Опишу более подробно.
Файл из прилагаемого архива, называется "Поиск текста.grb", кладу в папку \Program\Macros. MacroLibrary.dll - в \Program.

---------- Случай №1 ----------
1.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Открываю окно "Макросы", запускаю TestDllMacro из узла "Поиск текста". Собственно, это ссылка внутрь DLL-ки. Макрос проверяет TFlex.Application.ActiveDocument == null и ругается. Всё хорошо. Затем открываю любой .grb документ, запускаю макрос снова. Загружается форма (метод Show(), немодально), выполняю поиск с разными результатами. Всё работает.
1.2. Макрос запущен, форма висит - закрываю документ, в котором искал. Теперь внимание - форма вместе с документом НЕ закрывается, остаётся. Клацаю "Найти всё" - ругается, doc == null, всё правильно. Так открываю, закрываю 5-6 документов (форма "живёт", никуда не исчезает), в них ищу - всё работает на ура.

---------- Случай №2 ----------
2.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Внимание: загружаю любой .grb документ (т.е. в этом случае - до того, как 1й раз запустить макрос). Запускаю макрос вызовом TestDllMacro из узла "Поиск текста". Форма загружается. Выполняю поиск в открытом документе, всё кул. Теперь моя беда: в этом варианте №2, который я сейчас описываю, при закрытии документа запущенная форма "насильственно" закрывается вместе с ним. Причём я проверял - управление в этом случае в обработчик события mainForm.FormClosing() не попадает!
После такого издевательства над формой 2й запуск макроса загружает форму в нерабочем состоянии - текст-боксы в нокауте, работает только кнопка "Выход". Помогает только полный перезапуск T-Flex.
Ну и теперь собственно вопрос:
Как заставить форму вести себя ВСЕГДА как в вышеописанном случае №1, т.е. нормально работать "при любой погоде".
Ну и может кто-нибудь подскажет, в чём же причина разного поведения формы?

P.S.Цепляю в пост архив .rar, там исходники проекта в Visual C# 2008 и .grb-шка с вызовом DLL-ки. В проекте есть скомпиленная в Debug-версии DLL-ка MacroLibrary.dll.
 
Николай.
Правильную работу формы во втором случае можно реализовать только используя механизм плагинов, доступный начиная с версии 11 (пример "Звезды", входящий в поставку, демонстрирует задачу как раз подобную вашей).

Механизм, использованный вами в версии 10, работает так как работает и с этим ничего не поделать.
Страницы: 1