![]() |
|
Модераторы: mihanik |
![]()
|
|
| McConst |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.11.2013 Репутация: нет Всего: нет |
Здравствуйте.
В Normal.dot имеется следующий обработчик закрытия документов, который отправляет закрываемый файл на e-mail
Столкнулся с такой проблемой. Если одновременно открыто несколько документов (допустим - 4), и одно из окон закрываем, то для закрываемого документа это событие вызывается столько же раз (тоже 4). И соответственно на е-маил приходит 4 копии одного и того же документа. Не могу придумать как устранить эту проблему? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Static флаг.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| McConst |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.11.2013 Репутация: нет Всего: нет |
Думал про Static. Тогда предполагаю, появится вторая проблема.
Допустим открыто 3 окна, и каждое надо отправить перед закрытием на е-маил. Тогда после закрытия первого документа флаг будет сброшен очередным вызовом обработчика первого закрытия и второй документ перед закрытием уже не отправится. Думал сравнивать имена документов. Но тож не пойдет. Дело в том, что обычно открываем старый документ, меняем данные и сохраняем под новым именем, и данные передаем на е-маил. Поэтому сравнение имен тож не катит. Вообще мне здесь не понятно следующее. Я так понимаю, что для закрытия одного файла событие beforeClose должно вызываться один раз, независимо от того, какие ещё окна word открыты. А оно вызывается для одного и того же файла (входящие аргументы не меняются) по нескольку раз. Может я неправильно задал в Normal.dot обработчик создания событий? Вроде бы правильно. |
|||
|
||||
| McConst |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.11.2013 Репутация: нет Всего: нет |
Попробовал такой вариант обработчика события
Мысль такая, что если обработчик вызывает не старый документ повторно, а новый, тогда static будет всегда nothing, так как указатель на документ после закрытия должен вроде бы как пропадать или быть некорректным (nothing). Но компилятор выдает ошибку в 10-й строке. Можно было бы развить идею, но я пока в тупике. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Ну флаг-то надо определять не на уровне приложения, а на уровне отслеживаемого объекта - в данном случае документа.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| McConst |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.11.2013 Репутация: нет Всего: нет |
Решил проблему, но пришлось повозиться. В обработчик DocumentBeforeClose передается аргумент doc, в котором есть уникальный параметр Doc.DocID Он лучше имени тем, что при повторном открытии документа этот параметр меняется и не будет ложного совпадения имен.
Так вот, этот параметр при очередном выполнении обработки события сравнивается с переменной типа Static DocID as long. Но тут есть ещё один нюанс. Переменную нельзя прописывать в ThisDocument в Normal.dot, так как при следующем вызове все изменения куда-то пропадают. Я так понимаю, если открыто много окон происходит вызов события на закрытие моего конкретного окна сразу во всех экземплярах открытых документов с передачей параметров моего документа. В общем, процедуру сравнения DocID с doc.DocID нужно проводить в отдельном модуле Normal.dot в виде отдельной функции сравнения. Вот такой код у меня получился:
И сама функция проверки и присваивания нового DocID в моем модуле EMAS
|
||||
|
|||||
![]()
|
| Правила форума "Программирование, связанное с MS Office" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |