GARANTIR DESCONTO

Fórum Fechar o Word soh quando o documento for para a impressão #198536

02/12/2003

0

: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

Responder

Posts

03/12/2003

Deus

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar