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

Вниз

Контроллер автоматизации, события автоматизации   Найти похожие ветки 

 
fool ©   (2003-09-04 13:39) [0]

Всем привет, а проблема такая:
генерирую отчеты в Word (office2000)

procedure TMainForm.Button1Click(Sender: TObject);
begin
ThreadNDS := TThreadNDS.Create(False);
end;

procedure TThreadNDS.Execute;
var
Unknown: IUnknown;
Result: HResult;
AppProdID: String;
App: variant;
Rng: variant;
Doc: variant;
I: Integer;
Flag: Boolean;
CurPar: Integer;
begin
inherited;
Flag := True;
try
repeat
CoInitializeEx(nil, 2);
AppProdID := "Word.Application";
Result := GetActiveObject(ProgIDToClassID(AppProdID), nil, Unknown);
if Result = MK_E_UNAVAILABLE then App := CreateOleObject(AppProdID)
else App := GetActiveOleObject(AppProdID);

App.Visible := True;
App.Documents.Add;

Doc := App.Documents.Item(App.Documents.Item(1).Name);

CurPar := 0;
for I := 0 to 50 do
begin
Doc.Paragraphs.Add;
Inc(CurPar);
Rng := Doc.Paragraphs.Item(CurPar).Range;
Rng.InsertBefore("Test"+IntToStr(I+1)+", ");
end;
App := UnAssigned;
CoUnInitialize;
until Flag;
except
on E:Exception do
begin
ShowMessage(E.Message);
end;
end;
end;

Все нормально работает, но! если в процессе генерации документа происходит некоторое событие в Ворде (для другого документа), требующее вмешательства пользователя (подтверждение сохранения документа при закрытии, диалог выбора принтера и т.д.) происходит исключение "Call was rejected by callee". Т.е. блокируются все документы до ответа пользователя и соответственно генерация прекращается. Возможно ли как с этим боротся и как? Останавливать поток и ждать пока пользователь ответит? Узнать это можно по идее реализовав в приложении сток для Ворда, где отлавливать соответствующие события. Но нормальной литературы под рукой нет, если кто реализовывал подобное, просьба показать примеры или оставить ссылки по теме.

PS
пока за нехваткой времени сделал так (т.е. для каждого генерируемого документа создаю свой экзэмпляр Ворда, но это шибко неправильно т.к. сильно жрет ресурсы и время):
procedure TThreadNDS.Execute;
var
Unknown: IUnknown;
Result: HResult;
AppProdID: String;
App: variant;
Rng: variant;
Doc: variant;
I: Integer;
Flag: Boolean;
CurPar: Integer;
begin
inherited;
Flag := True;
try
repeat
CoInitializeEx(nil, 2);
AppProdID := "Word.Application";
App := CreateOleObject(AppProdID);

App.Visible := True;
App.Documents.Add;

Doc := App.Documents.Item(App.Documents.Item(1).Name);

CurPar := 0;
for I := 0 to 50 do
begin
Doc.Paragraphs.Add;
Inc(CurPar);
Rng := Doc.Paragraphs.Item(CurPar).Range;
Rng.InsertBefore("Test"+IntToStr(I+1)+", ");
end;
App := UnAssigned;
CoUnInitialize;
until Flag;
except
on E:Exception do
begin
ShowMessage(E.Message);
end;
end;
end;


 
fool ©   (2003-09-04 16:23) [1]

Неужели у МАСТЕРОВ времени нет даже ссылки оставить, или никто контроллеры со стоками не реализовывал.

Грустно как-то...



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
1-48598
ЮРИЙ_К
2003-09-01 14:57
2003.09.15
Хинт на TreeView после себя сильно мусорит.


7-48819
DDDeN
2003-07-01 16:19
2003.09.15
Внесение в реестр изменений из reg-файла


1-48507
Suric
2003-09-01 18:40
2003.09.15
Как подключить к Delphi- проекту библиотеку *.Lib ?


1-48496
jack128
2003-09-02 19:11
2003.09.15
Инициализация переменных


1-48551
Ded Moroz
2003-09-01 23:53
2003.09.15
Хитрая менюшка из RXLib