![]() |
|
Модераторы: MetalFan |
![]()
|
|
| RosemaN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
1. при первом вызове все работае отл, но если на орме нажать кнопку еще раз, то выскакивает ошибка "сервер RPC не доступен" и указывает на строчку, выделенную жирным. Как корректно закрыть и открыть Word? 2. Если документ не удовлетворяет параметрам, то ворд должен закрываться и выводиться сообщение. Как это организовать наиболее верно? Прибегать к помощи меток не хочу. |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 15 Всего: 108 |
у этого компанента есть событие : OnDocumentBeforeClose используй его для отслеживания закрылся ворд или нет... внутри события делай Disconnect с сервером... 2. Что значит не удовлетворяет параметрам? -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 3 Всего: 128 |
брр... куча EmptyParams. пользуй позднее связывание. кушает чуть больше ресурсов, зато приятней программировать.
Это сообщение отредактировал(а) MetalFan - 10.11.2007, 19:38 -------------------- There are always someone smarter than you... |
|||
|
||||
| RosemaN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Прошу прощ! Не переметрам, а условиям. У меня есть документ-шаблон с определенной структурой. Прога смотрит, удовлетворяет ли данный документ требованиям:
но такой вариант мне не нравится. Есть ли алтернатива более "удачная". Не хочу метки использовать. Т.е. во всех процедурах использовать disconnect, а при закрытии программы - quit? Получается, что при загруженной программе "висят" оба процесса (excel и word). Т.к. прога заполняет журнал *.xls и акт *.doc MetalFan, а как использовать твой вариант? Дело в том, что когда искал инфу, то найти так и не смог что значит каждый EmptyParam допустим, в WordApplication1.Documents.OpenOld(). Это сообщение отредактировал(а) RosemaN - 11.11.2007, 15:32 |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 15 Всего: 108 |
справка по VB в офисе... 2, 3, 4 условие будут выполняться только в случае выполнения предыдущего условия, поэтому их можно вкладывать внутрь предыдущих и соответственно отпадает надобность в каждом условии делать закрытие документа... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Zorba |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
1. WordApplication1.CleanupInstance; в самом начале перед инициализацией сервера 2. Var fls:OleVariant; begin fls:=false; .... WordParserModule.Documents.Close(fls,EmptyParam,EmptyParam); Это сообщение отредактировал(а) Zorba - 12.11.2007, 13:44 |
|||
|
||||
| RosemaN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
все работает. Спасибо Albinos_x
Но теперь возникла другая проблема: 1. Word висит в списке процессов и не выгружается даже когда я закрываю программу свою. 2. Можно ли как-нибудь ускорить работу с WordApplication1? |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 15 Всего: 108 |
1.
AutoQuit:=False; когда работать заканчиваешь с документом, закрывай его... если пользователь закрывает документ, то Disconnect с документом, если сервер, то с сервером. Соответсвенно для сервера использовать WordApplication, для документа использовать WordDocument если использовать AutoQuit:=True; , то ворд будет закрываться автоматически, но может возникнуть проблема с дисконектом, т.к. тогда и открытый документ будет закрываться (это в случае, если нужно, чтоб после дисконекта пользователь мог дальше работать с докуметом) 2. Можно только оптимизацией алгоритма, а точнее - уменьшение количества обращений к серверу... или писать свой обработчик офисных файлов... кроме того, пока работает код программы, ворд лучше держать невидимым Это сообщение отредактировал(а) Albinos_x - 16.11.2007, 21:19 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| RosemaN |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
вот такой код у меня получился. Но не могу вставить дисконнект с документом. Ругается Это сообщение отредактировал(а) RosemaN - 19.11.2007, 00:08 |
||||
|
|||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 15 Всего: 108 |
Delphi ругается?
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| ZVano |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Спасибо участникам топика. Благодаря ему, я решил сходную проблему.
Если у вас в программе используется Word, для работы с документом, который отображается пользователю, следует быть готовым к тому, что пользователь закроет Word. После этого работа с ним из программы приведет к исключению "Сервер RPC не найден". Для борьбы с традлом отлавливаем закрытие Word в WordApplication1.OnQuit и переоткрываем его. Сюда же нужно встроить проверку, а не уничтожается ли WordApplication1. Если уничтожается, то переоткрывать Word не надо. Иначе он будет висеть в процессах. -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 5 Всего: 130 |
Если в программе используется Word, то пользователю вообще его бы лучше не открывать. Так же и Excel. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| ZVano |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Не всегда это возможно. Что делать, если нужно в компоненте из шаблона документа сделать отчет, а затем либо сохранить его, либо показать пользователю? Сохранить - все ок. Показать - могут быть траблы при генерации следущего отчета(если пользователь закрыл Word). В этом случае неплохо было бы поднимать еще один Word, а про старый забывать - пользователь сам закроет окно. Это сообщение отредактировал(а) ZVano - 20.1.2010, 11:33 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
![]()
|
| Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |