Главная страница
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.034 c
1-48500
_MAD_
2003-09-02 15:56
2003.09.15
Чекбокс


1-48613
elshad_s
2003-09-03 13:42
2003.09.15
TabOrder в MDIChild форме вызванной из DLL


1-48558
Vest
2003-09-01 19:17
2003.09.15
Убрать ScrollBar MDI формы


3-48443
Clonnyc
2003-08-25 02:44
2003.09.15
Ошибка при открытии .db - файла


14-48756
pavlentii
2003-08-23 12:49
2003.09.15
Глючит чаты