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