Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.052 c
15-1139816367
tradakad
2006-02-13 10:39
2006.03.05
о формах


15-1139490660
ZeFiR
2006-02-09 16:11
2006.03.05
А давайте вместе...


8-1127764517
Delphinist
2005-09-26 23:55
2006.03.05
Использование *.ogg в Delphi


15-1139494192
ZeroDivide
2006-02-09 17:09
2006.03.05
Лена Воронова отдыхает...


15-1139312761
_RusLAN
2006-02-07 14:46
2006.03.05
Программа для создания резервных копий проэктов