![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PostMessage?
Алексей Петухов © (2006-02-12 10:07:00)Здравствуйте, уважаемые Местера.
Есть приложение - Клиент ОЛЕ. Из него вызывается процедура ОЛЕ сервера, в которой присутствует вызов модального окна.
На этом работа Клиента блокируется до закрытия модального окна.
Подскажите как можно избежать ситуации "ожидания", оставив, естественно, модальный вызов.
П.С. имеем 3 звена:
Приложение - клиент ОЛЕ
Приложение - сервер ОЛЕ
и еще одна часть - FastReport - с которым организуется работа через ОЛЕ-сервер автоматизации.
Digitman (2006-02-15 09:57:00) [1]На то отладчик существует ...
Алексей Петухов (2006-02-15 09:56:00) [2]Да я и не переделываю ОЛЕ, его изначально нету.
Среда отчетов FastReport подключается как классы и компоненты в основной проект - так он задуман и реализован разработчиками.
У меня задача несколько расширить функциональность проекта путем выделения среду печати отчетов в отдельные процессы или потоки или приложения или .... .
Реализовал вызов модальных окн в отдельных потоках, создаваемых в оле-сервере, но при работе с несколькими открытыми таким образом окнами после закрытия одного из них вылетает Exeption, а с одним все нормально работает.
Digitman (2006-02-14 09:48:00) [3]
> Алексей Петухов (13.02.06 18:29) [10]
Мне кажется, что переделка олей-сервера из InProc в OutOfProс вовсе необязательна (и даже, пожалуй, вредна по разного рода соображениям)
Контроллер вызывает метод сервера, в теле метода сервер стартует доп.тред (в контексте которого делается все что угодно, в т.ч. вызываются мод.формы и пр.) и тут же возвращает управление контроллеру.
Алексей Петухов (2006-02-14 06:59:00) [4]Есть соображения?
Алексей Петухов (2006-02-13 18:29:00) [5]Это для общего ВЗАИМОпонимания.
А какой вопрос ко мне? Про модальные окна? ээээ....
Я думаю, что нестоит съезжать с темы с стебаться друг над другом.
Нехотелось что бы тему закрыл модератор, по тому, как я нуждаюсь в советах. А если Вам что-то непонятно из моих бормотаний - уточняйте, не стесняйтесь :-).
Итак еще пояснения:
Проблемность исходит из потребности организации "независимой" или "многопоточной" обработки данных в рамких приложения или приложений.
Ситуация:
1. Есть проект и в нем реализована работа с отчетами (FastReport).
2. Пользователь при печати или разработке отчета для продолжения работы в основном приложении вынужден так или иначе закончить заботу с отчетами.
3. Это не всегда удобно.
Разрабатываемый вариант разрешения:
1. Выделить среду разработки и печати отчетов в отделоное приложение. ОЛЕ-сервер автомитизации, реализованый в виде EXE-файла (по типу MS Word).
2. В основном приложении заменяем обращения к среде отчетов модулем, в котором реализуем некий "интерфейс" взаимодействия с ОЛЕ-Сервером среды отчетов.
Резюме:
ДО: Пользователь жмет кнопку "Печать ОООчень большой ведомости" и идет пить ведро кофе.
ПОСЛЕ: Пользователь жмет кнопку "Печать ОООчень большой ведомости" и спокойно работает дальше, пока данные для печати обрабатываются Одним из объектов ОЛЕсервера, который ваглядит для пользователя как отдельное приложение.
Вооот.
Digitman (2006-02-13 17:03:00) [6]
> Алексей Петухов (13.02.06 16:24) [8]
> С FastReport знаком?
Оно мне надо ?
Вопрос-то - к тебе..
Алексей Петухов (2006-02-13 16:24:00) [7]С FastReport знаком?
Digitman (2006-02-13 16:21:00) [8]Что-то горбатого ты здесь лепишь, как мне кажется ..
Модальный режим, он на что по-твоему придуман, а ? Прокомментируй своё видение ...
Алексей Петухов (2006-02-13 16:13:00) [9]Да вроде нет.
Дело не только в десигнрепорт.
Там есть и другие методы, например ShowReport, который может работать продолжительное время.
Смысл в том, чтобы отделить Среду печати отчетов от приложения, чтобы пользователь нажав кнопку "Печать" смог продолжить работу, недожидаясь результата от ФастРепорт. ДесигнРепорт - это только в пример.
Digitman (2006-02-13 11:24:00) [10]
> Алексей Петухов (13.02.06 11:13) [4]
А в FR есть возможность открытия того же окна не в модальном режиме ?
Алексей Петухов (2006-02-13 11:13:00) [11]нет. ОЛЕсервер как посредник.
Контроллер вызывает метод ОЛЕ-сервера.
...
FRApp:=Co_Application.Create;//подкл. к серверу
...
FRApp.NewDocument;//создаем объект, в котором создается экземпляр TfrReport
...
FRApp.Documents[i].DesignReport;//выполняется процедура в котором есть вызов frReport.DesignReport;
//Вот здесь и образуется ожидание возврата.
Digitman (2006-02-13 09:55:00) [12]
> Алексей Петухов (13.02.06 09:48) [2]
> Вызываемый метод FasrReport.DesignReport
Подожди, разве твой контроллер обращается непосредственно к FastReport как к OLE-серверу ?
Алексей Петухов (2006-02-13 09:48:00) [13]Т.е. Вызов в дополнительном потоке надо реализовать на стороне Контроллера?
Или можно это сделать в ОЛЕ-сервере?
Вызываемый метод FasrReport.DesignReport.
Digitman (2006-02-13 08:58:00) [14]
> На этом работа Клиента блокируется до закрытия модального
> окна
Не Клиента, а конкретного кодового потока, в контексте которого был произведен вызов того самого метода олей-сервера
> как можно избежать ситуации "ожидания",
Решение очевидно - осуществлять блокирующий вызов в дополнительном кодовом потоке.
> Приложение - клиент ОЛЕ
Правильней говорить "контроллер OLE-сервера".