Главная страница
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
3-48479
dot
2003-08-22 13:11
2003.09.15
Доступ к таблице


3-48409
aleman
2003-08-26 10:16
2003.09.15
Может ли Oracle 8i работать с файлами по сети?


14-48733
Delphi5.01
2003-08-26 19:49
2003.09.15
Linux


1-48630
Basilio
2003-09-04 16:08
2003.09.15
TStringList невзирает на регистр!


1-48491
ЮРИЙ_К
2003-09-03 12:06
2003.09.15
Как привязаться к относительным координатам ветки дерева TreeView