{--------------------------------------------------------}
{    Programa WordWtil
{    Interface com o Word
{    Biblioteca de opcoes do menu Editar
{--------------------------------------------------------}

unit WuMeEd;

interface

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

{$I-}

Procedure menuEditar;
procedure edicao;

implementation

{--------------------}
procedure editarAjuda;
{--------------------}
begin
   mensagem ('wumeede',1);   { E - editar bloco }
   mensagem ('wumeedr',1);   { R - remove linha }
   mensagem ('wumeedc',1);   { C - copiar }
   mensagem ('wumeedl',1);   { L - colar }
   mensagem ('wumeedt',1);   { T - recortar }
   while sintFalando do;
end;

{----------------------------------------------------}
procedure copiar;     { copia uma determinada regiao }
{----------------------------------------------------}
var
   opc :char;
   isolou:boolean;

label fim;
begin
   repeat
      textcolor (WHITE); textbackground (BLUE);
      mensagem ('wucooq',0);   { O que deseja copiar ? }
      textcolor (7); textbackground (BLACK);

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


      if opc = F1 then
         blocoAjuda;

   until (opc = 'T') or (opc = ESC) or (opc = 'L') or (opc = 'P');

   trocaJanela (Jan_Prog);

   if opc = ESC then
      goto fim
   else if opc = 'T' then
      marcaTudo
   else if opc = 'L' then
      marcaLinha
   else if opc = 'P' then
      begin
         isolou := isolaPalavra;
         trocaJanela (Jan_prog);
         (* se foi cancelado o isolamento *)
         if not isolou then
            begin
               opc := ESC;
               goto fim;
            end;
         marcaLinha;
      end;


   (* copia o bloco marcado *)
   playInit (300);
   playVirtKey (ord ('C'), true, false, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   getClipBoard (Clip_Board,8000);

   (* desmarcando *)
   enviaCarac (VK_LEFT);

   if opc = 'P' then
      juntaAsLinhas;

fim:
   trocaJanela (Minha_Jan);

   if opc = ESC then
      mensagem ('wucoca',1)   { Comando cancelado.}
   else
      mensagem ('wuco',1);    { Copiado }
end;

{--------------------------------------------------------}
procedure recortar;     { recorta uma determinada regiao }
{--------------------------------------------------------}
var
   opc :char;
   isolou:boolean;

label fim;
begin
   repeat
      textcolor (WHITE); textbackground (BLUE);
      mensagem ('wureoq',0);   { O que deseja recortar ? }
      textcolor (7); textbackground (BLACK);

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

      opc := upcase (opc);

      if opc = F1 then
         blocoAjuda;

   until (opc = 'T') or (opc = ESC) or (opc = 'L') or (opc = 'P');

   trocaJanela (Jan_Prog);

   if opc = ESC then
      goto fim
   else if opc = 'T' then
      marcaTudo
   else if opc = 'L' then
      marcaLinha
   else if opc = 'P' then
      begin
         isolou := isolaPalavra;
         trocaJanela (Jan_prog);
         (* se foi cancelado o isolamento *)
         if not isolou then
            begin
               opc := ESC;
               goto fim;
            end;
         marcaLinha;
      end;

   (* recorta o bloco marcado *)
   playInit (300);
   playVirtKey (ord ('X'), true, false, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   getClipBoard (Clip_Board,8000);

   (* desmarcando *)
   enviaCarac (VK_LEFT);
   if opc = 'P' then
      juntaAsLinhas;
fim:
   trocaJanela (Minha_Jan);

   if opc = ESC then
      mensagem ('wucoca',1)   { Comando cancelado. }
   else
      mensagem ('wure',1);    { Recortei }
end;

{-------------------------------------------------------------}
procedure colar;  {  cola o conteudo da area de transferencia }
{-------------------------------------------------------------}
var
   i:integer;
begin
   trocaJanela (jan_Prog);

   enviaCarac (VK_HOME);

   for i := 0 to (sintCursorX - 2) do
      enviaCarac (VK_RIGHT);

    putClipBoard (Clip_Board);

   (* cola o bloco *)
   playInit (300);
   playVirtKey (ord ('V'), true, false, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   trocaJanela (minha_Jan);

end;

{-------------------------------------------------}
procedure deletarLinha;   { apaga a linha atual   }
{-------------------------------------------------}
begin
   trocaJanela (Jan_Prog);

   enviaCarac (VK_HOME);

   playInit (300);
   playVirtKey (VK_END, false, true, false, 1);
   playStart;
   while  playIsActive do;
   delay (50);

   enviaCarac (VK_DELETE);

   trocaJanela (Minha_Jan);
   mensagem ('wulire',1);   { Linha removida }

end;

{----------------------------------}
procedure edicao; { edita um bloco }
{----------------------------------}
var i:integer;

begin
    trocaJanela (Minha_Jan);
   (* abre o edivox *)
   if executaProg ('\winvox\edivox.exe', '','\dosvox\~temp._t_') < 32 then
      begin
         writeln ('Não executei');
         delay (1000);
      end
   else
      esperaProgVoltar;  (* espera que saia do edivox *)

   trocaJanela (Minha_Jan);
   mensagem ('wuagin',1);   { Aguarde um instante }
   trocaJanela (jan_Prog);

(*   enviaCarac (VK_HOME);

   for i := 0 to (sintCursorX - 2) do   (* posiciona o cursor *)
  (*    enviaCarac (VK_RIGHT);
    *)
   importar (false);

end;

{--------------------------------------------}
procedure menuEditar;   { comandos de edicao }
{--------------------------------------------}
var
   op:char;

label retorno;
begin

retorno:

   textcolor (WHITE); textbackground (RED);
   mensagem ('wumeedop',0);     { menu Editar - 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
      'E': begin
              if modulo = 'edicao' then edicao (* edita bloco *)
              else mensagem ('wuesexed',1); { Esse comando so pode ser executado em modulo de edicao' }
           end;
      'C': copiar;  (* copia um determinado bloco*)
      'R': deletarLinha; (* deleta uma linha *)
      'L': begin
              if modulo = 'edicao' then colar (* Cola um determinado bloco *)
              else mensagem ('wuesexed',1); { Esse comando so pode ser executado em modulo de edicao' }
           end;
      'T': begin
              if modulo = 'edicao' then recortar (* recorta um determinado bloco *)
              else mensagem ('wuesexed',1); { Esse comando so pode ser executado em modulo de edicao' }
           end;
      ESC: mensagem ('wucoca',1);   { Comando cancelado. }
      F1 : begin    (* ajuda do sistema *)
              editarAjuda;
              goto retorno;
           end;
      else
         mensagem ('wuopin',1);    { Opcao invalida }
   end;
end;
end.