Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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-сервера".


Наверх

Титульная страница Поиск, карта сайта Написать письмо