Fechar o Word soh quando o documento for para a impressão

Delphi

02/12/2003

:cry: Olá Caros e Caras Colegas.

Estou com a seguinte dificuldade: Tenho um arquivo (*.doc), no qual carrego dados de uma ofício destino a uma ou mais pessoas.
Este documento deve logo que carregado ele deve ser impresso via programa.
O problema é eu uso um documento que é modelo para gerar os demais ofícios. Eu crio em outro documentos, primeiramente eu mando imprimir, através do comando:
[color=red:1b7e922476][size=18:1b7e922476]msword.activedocument.printout(copies:=1);[/size:1b7e922476][/color:1b7e922476]
[size=12:1b7e922476]E logo após passo a seguinte instrução:[/size:1b7e922476]
[color=darkblue:1b7e922476][size=18:1b7e922476]msword.activedocument.close(savechanges:=0);
msword.quit;[/size:1b7e922476][/color:1b7e922476]

[size=12:1b7e922476][/size:1b7e922476]Mas como o word ainda está enviando o documento para a fila da impressora, ele dá aquela msg:
[color=green:1b7e922476][/color:1b7e922476][i:1b7e922476]O Word está imprimindo. Encerrar o Word implicará no cancelamento de todos os trabalhos de impressão pendentes. Deseja encerrar o Word? [/i:1b7e922476]

Logicamente, esta mensagem aparece no meu sistema.
:wink: Então Colegas, existe alguma forma de evitar esta mensagem, ou seja, descobrir em que momento o word enviou a impressão para a impressora?

:P Obrigada, pela atenção. Bom trabalho a todos...


Eneblis

Eneblis

Curtidas 0

Respostas

Deus

Deus

02/12/2003

Bem, o existe uma saída para tal, mas depende de como você quer resolver o problema. A questão é que o status de impressão está em [i:78b8f73d26]BackgroundPrintingStatus[/i:78b8f73d26], então há a seguinte saída:

msword.ActiveDocument.Printout(Copies := 1); 
repeat until (msword.BackgroundPrintingStatus = 0);
msword.ActiveDocument.Close(SaveChanges := 0); 
msword.Quit;


Só que isso causa um inconveniente: a aplicação toda vai parar até que o documento tenha sido impresso. Se você não deseja isso - e quem deseja? ;) - você tem duas saídas: ou implementar isso num thread, ou colocar um timer para verificar de 5 em 5s ou 10 em 10s, tipo:

if not (msword.BackgroundPrintingStatus > 0) then
begin
  msword.ActiveDocument.Close(SaveChanges := 0); 
  msword.Quit;
end;


O timer seria bem mais rápido de se implementar, acho que seria uma solução ideal. :) Quando você for imprimir, ligue o timer. Quando entrar naquele bloco [i:78b8f73d26]begin / end[/i:78b8f73d26], desligue o timer. Simples. ;)

Espero ter ajudado! Abraços, dEUS.


GOSTEI 0
POSTAR