{--------------------------------------------------------}
{    Programa WordWtil
{    Interface com o Word
{    Biblioteca de opcoes para impressao
{--------------------------------------------------------}

unit WuMeImpr;

interface

uses dvcrt, winprocs, strings, WuUtil, wintypes, dvwin, dvmacro,
     WuVars, WuMensa;

procedure menuImprimir;

implementation

{---------------------------}
procedure menuImprimirAjuda;
{---------------------------}
begin
   mensagem ('wumeimi',1);   { I - impressao padrao }
   mensagem ('wumeimp',1);   { P - impressao personalizada }
   while sintFalando do;
end;

{-------------------------------------}
procedure ajudaImpressaoPersonalizada;
{-------------------------------------}
begin
   mensagem ('wuippet',1); { T - todas as páginas }
   mensagem ('wuippel',1); { P - página atual }
   mensagem ('wuippeg',1); { G - páginas determinadas }
   while sintFalando do;

end;

{-----------------------------------------------------------}
procedure impressaoPadrao;  { uma copia, documento completo }
{-----------------------------------------------------------}
begin
   trocaJanela (Jan_Prog);

   (* menu imprimir *)
   playInit (300);
   playVirtKey (ord ('P'), true, false, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   keyBoardClick (ENTER);
   delay (2000);

   (* nao conseguiu imprimir *)
   if getActiveWindow <> Jan_prog then
      begin
         mensagem ('wuimdes',1);   { Impressora provavelmente desconectada }
         enviaCarac (VK_ESCAPE);
      end
   else
      mensagem ('wudocenv',1);    { Docunto enviado para impressao }

   trocaJanela (Minha_Jan);

end;

{--------------------------------}
procedure impressaoPersonalizada;
{--------------------------------}
var
   i,Num_Copias,erro :integer;
   intervalo   :char;
   paginas,s_Copias :string;
   paginas_Char :array [0..40] of char;
label fim;
begin
   mensagem ('wunuco',0);   { Numero de copias: }
   sintReadln (s_Copias);
   val (s_Copias,Num_Copias,erro);

   (* nao digitou um numero *)
   if (erro <> 0) or (Num_Copias = 0) then
      begin
         mensagem ('wucancel',1);   { Cancelado }
         goto fim;
      end;

   repeat
      if intervalo = F1 then
         ajudaImpressaoPersonalizada;

      mensagem ('wuquinpa',0);   { Qual o intervalo de pagina? }
      intervalo := upcase (ReadKey);
      if intervalo = #$0 then
          intervalo := upcase (ReadKey);

      writeln;

      (* cancelou com a tecla ESC *)
      if intervalo = ESC then
         begin
            mensagem ('wucancel',1);   { Cancelado }
            goto Fim;
         end;
   until (intervalo = 'T') or (intervalo = 'P') or (intervalo = 'G');

   (* determina as paginas *)
   if intervalo = 'G' then
      begin
          mensagem ('wuqupa',0);   { Quais as paginas? }
          sintReadln (paginas);
          strPCopy (paginas_Char,paginas);
          putClipBoard (paginas_Char);
      end;

   trocaJanela (Jan_Prog);

   (* ativa manu imprimir *)
   playInit (300);
   playVirtKey (ord ('P'), true, false, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   (* Numero de copias *)
   for i := 0 to (Num_Copias - 1) do
      enviaCarac (VK_UP);

   (* vai para o intervalo das paginas *)
   for i := 0 to 9 do
      enviaCarac (VK_TAB);

   (* somente a pagina atual *)
   if intervalo = 'P' then
       enviaCarac (VK_DOWN)
   (* paginas *)
   else if intervalo = 'G' then
      begin
         enviaCarac (VK_DOWN); enviaCarac (VK_DOWN);

         (* cola as paginas da area de transferencia *)
         playInit (300);
         playVirtKey (VK_INSERT, false, true, false, 1);
         playStart;
         while  playIsActive do;
         delay (50);
      end;

   keyBoardClick (ENTER);
   delay (2000);

   (* nao conseguiu imprimir *)
   if getActiveWindow <> Jan_Prog then
      begin
         trocaJanela (Minha_Jan);
         mensagem  ('wuerroim',1);  { ERRO. Impressao cancelada. }
         enviaCarac (VK_ESCAPE); enviaCarac (VK_ESCAPE);
         goto fim;
      end;

   trocaJanela (Minha_Jan);
   mensagem ('wudocenv',1);   { Documento enviado para impressao. }
fim:  (* operacaoa cancelada *)
end;

{-------------------------------------------------}
procedure menuImprimir;     { opcoes de impressao }
{-------------------------------------------------}
var
   op:char;

label retorno;
begin

retorno:

   textcolor (WHITE); textbackground (RED);
   mensagem ('wumeimqu',0);   { Menu Imprimir - Qual sua opcao? }
   textcolor (7); textbackground (BLACK);

   op := sintReadKey;
   writeln (op);
   if op = #$0 then
      op := ReadKey;

   if op = F9 then while keypressed do;

   case upcase (op) of
      (* so permite a substituicao se estiver no modulo de edicao *)
      'I': impressaoPadrao;
      'P': impressaoPersonalizada;
      ESC: mensagem ('wucoca',1); { Comando cancelado. }
      F1 : begin    (* ajuda do sistema *)
              menuImprimirAjuda;
              goto retorno;
           end;
      else
         mensagem ('wuopin',1);  { Opcao invalida. }
   end;

end;
end.