Página 5 de 5

Cancelar Operação

Enviado: 07 Jan 2016 21:43
por microvolution
Eolo escreveu:O ReadExit(), que quer dizer “SairdoRead” e cujo default é .T. (ou seja, SIM)
Ops... estão corretos, só estão confundindo uma coisa:
O default é (.f.) .

Bom, dentro do assunto de "cancelar operação", descobri algo estranho no meu código.
No módulo onde é feito os orçamentos (por cliente [à prazo ou à vista] ou à vista sem cliente), com a compilação com visual (percebi isso tanto usando a HMG quanto a GTWVG)...
o "tal estranho" é o seguinte:
no à vista quando é terminado o cadastro de produtos, a função PEDE_OPÇÃO que é pra gravar ou não o orçamento, não é apresentado e tudo é cancelado, como se fosse pressionado um ESC. Vejam a imagem abaixo no momento em que é perguntado se é pra confirmar os produtos, e, sempre usei o ESC para sair desses GETs que são dentro dos GETs iniciais:
confirma produtos
confirma produtos
A imagem acima, é para finalizar a função CAD_PRODUTOS() que é acionada no GET mPERDES (% Desconto).
Agora, vou mostrar uma tela de um orçamento à prazo, onde após a confirmação dos produtos, é apresentada as opções de (G)ravar ou (D)esistir. Vejam:
orçamento à prazo
orçamento à prazo
Tudo isso ocorre na função CAD_PRODUTOS (como já disse) que é acionada dentro do GET (PERDES), então, vejam os 3 códigos:
1º - local de todos os GETs da tela - exceto do cadastro de produtos no orçamento.

Código: Selecionar todos

...
static function TRATA_DADOS ()
...
@ lVR_PERDES,cVR_PERDES get mVR_PERDES picture pVR_PERDES valid fVR_PERDES ()
...
return
2º - dentro da função fVR_PERDES():

Código: Selecionar todos

static function fVR_PERDES ()
...
          if lastkey () <> K_UP
               CAD_PRODUTOS ()
               // ?'após encerrar orçamento a vista FIM',FIM
               // wait
          endif                        
return
3º - agora dentro da função CAD_PRODUTOS():

Código: Selecionar todos

static function CAD_PRODUTOS ()
      local   ARQUIVO := select ()
      LOCAL bSetKey // acrescentado p/ recuperar a funcionalidade do ESC 29/12/15w.
      bSetKey := Setkey( K_ESC, NIL ) // isto salva a configuração do ESC e volta o ESC ao normal 29/12/15w.
      Priva   lCONF_DADOS := .f.

      private GETLIST := {}
      private nLinGet := 12 // pctoledo em 9/3/15w.
...
      do while .t.
...
           mIND := achoice (12,01,16,77,mLINHA,.T.,'fACH_001',mIND) 
           if lastkey () = 27 // () = K_F10 // 27
               if .not. CONFIRMA3 ('Confirma Produtos Inseridos', 6 ,'SiCCA v3.6 - Conclusão do Orçamento') == 1
                     loop
               endif
               SetKey( K_ESC, bSetKey ) // isto devolve a configuração do ESC que estava antes 29/12/15w.
               exit
           elseif lastkey () = 13
                @ 12 + nLinGet,01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()  // modificado pela linha abaixo, pois na migração do clipper/harbour o cursor na hora de cadastrar um produto aparece 6 linhas abaixo do lugar correto 6/3/15w. // pctoledo novamente em 9/3/15w.
                @ row(),48 get mCD_GRADE  picture pCD_GRADE       when .not. EXISTE_PRD  valid fCD_GRADE () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
                private mQT_ESTOQ2 := nil         // Acrescentado para que qd§ o estoque estiver zerado, pe‡a senha para liberara‡Æo. Walcledson 09/09/02.
                @ row(),51 get mQT_VENDA  picture pQT_VENDA   valid fQT_VENDA () // Modificado p/Walcledson em 27/01/03 p/func. mt,cm,kg.
                read
           endif
      enddo
...
      // ?'FIM' , FIM
      // wait
return
Bom, só postei os locais onde achei realmente necessário, para não ficar muito grande, pois todas essas linhas, estão já no início deste ou de outros posts.
Observem que existem na última função acima, bem como na penúltima, 2 linhas comentadas, que repito:

Código: Selecionar todos

      // ?'FIM' , FIM
      // wait
ou

Código: Selecionar todos

               // ?'após encerrar orçamento a vista FIM',FIM
               // wait
Então prezados professores, se eu habilitar (liberá-las) no código, a opção de gravar/desistir (simulação de botões no clipper antigo).
Já tentei de tudo pra barrar esse ESC (que parece que está causando todo esse estrago), acrescentado individual ou em conjunto, as seguintes funções/comandos:

Código: Selecionar todos

keyboard "" ou keyboard "G"
setkey(0)
clear typeahead
Nem sei mais o que tentar, mas, o sistema só apresenta os botões num orçamento à vista se for colocado um wait para forçar a paralisação do programa.
Observem que existe uma variável do tipo lógica que chama-se FIM, que se ela estiver em .f. os botões são acionados. A função que os chama está nos 2 códigos abaixo, que antecedem a tudo e que ficam em loop e só são cancelados se a variável FIM estiver em .T., e, como ela está em .f. o sistema deveria apresentar o PEDE_OPCAO(). Vejam as 2 partes do código que faltam:

Código: Selecionar todos

do while .not. (FIM)
     INICIALIZA_CAMPOS ()
     TELA_ENTRADA ()
     TRATA_CAMPOS ()
     // ? FIM, 'FIM antes do if'
     // wait
     if .not. FIM
     // if FIM
         // ? FIM , 'FIM dentro do if'
         // wait
          PEDE_OPCAO ()
     endif
     // ? FIM , 'FIM após o if'
     // wait
enddo
Observem que no código acima (é o meu jeito de debugar, pois nunca soube usar o debug do clipper), coloquei linhas (atualmente estão comentadas) para verificar o estado da variável FIM no momento de se chamar a função que cria os botões PEDE_OPCAO(). Se o conteúdo dela for .f. os botões são chamados.
Isso é um controle, pois antes de colocar o método ponto chave deste tópico ("cancelar operação") já funcionava corretamente, até antes de começar a colocar os botões e mensagens gráficas (da HMG e agora da GTWVG). Aparentemente não tem nada a ver com o "cancelar operação" que apliquei conforme aprendizado das linhas anteriormente respondidas por mim e por todos aqui neste post.
Na minha próxima postagem, vou habilitar essas linhas acima comentadas e postar as telas com o conteúdo da variável FIM para que me ajudem a entender o que não estou entendendo, ou seja, não alterei essas coisas no código fonte original do clipper e nem na migração para o harbour, e, nem muito muito menos para botões e mensagens gráficas com HMG e/ou GTWVG.
Vlw!

Cancelar Operação

Enviado: 07 Jan 2016 22:04
por asimoes
Depois do botão Confirma Produtos Inseridos

Coloca:
KEYBOARD Chr(0)
Inkey()

Vai invalidar o Esc do botão.

Cancelar Operação

Enviado: 07 Jan 2016 23:09
por microvolution
asimoes escreveu:Coloca:
KEYBOARD Chr(0)
Inkey()
Vai invalidar o Esc do botão.
gente, só tem "nego" bruto aqui neste fórum de clipper; ops, ou melhor, pra não discriminar nenhum, também os "branco", "amarelo", "pardo", "caufuso" (como eu), e tantos outros...
é asimoes, não esperou nem eu postar a tela da variável FIM em todos os lugares...
rsrsrs :))
é bom que ajuda o Toledo a economizar espaço em disco/cache...
deu "certíssmo" (com C ou S), como anzol, vcs escolhem...
rsrsrs

Cancelar Operação

Enviado: 07 Jan 2016 23:19
por JoséQuintas
Ainda estou tentando entender o fonte, e o que acontece.
Tá difícil.

Cancelar Operação

Enviado: 07 Jan 2016 23:25
por microvolution
talve
JoséQuintas escreveu:Ainda estou ...
Tá difícil.
Talvez seja porque não coloquei todos os conteúdos dos fontes... fiz como no seu "quote" acima...
rsrsrs

Cancelar Operação

Enviado: 07 Jan 2016 23:28
por Jairo Maia
Olá Pessoal,

Voltando um pouco atrás para corrigir um outro equivoco:
microvolution escreveu:Ops... estão corretos, só estão confundindo uma coisa: O default é (.f.) .
Nope!!!! O default é .T.

Cancelar Operação

Enviado: 07 Jan 2016 23:35
por JoséQuintas
NÃO. Acabo de testar, o default é .F.

O pior de tudo, sinceramente, não lembro porque comecei a usar ReadExit(.T.)
Pra mim era pra funcionar alguma coisa entre os campos.

Fazem décadas e não lembro mais.
É uma coisa que vou eliminar do meu aplicativo a partir de hoje.


Só me vém uma coisa na cabeça: alguma situação especial com reads, tipo esta.

Código: Selecionar todos

nCont := 1
DO WHILE .T.
   DO CASE
   CASE nCont == 1
     @ 1, 0 GET a
      READ
      ...
   CASE nCont == 2
      @ 2, 0 GET b
      READ
      ...
   CASE nCont > 2
      EXIT
  ENDCASE
   nCont = iif( Lastkey() == 5, nCont - 1, nCont + 1 )
ENDDO

Cancelar Operação

Enviado: 07 Jan 2016 23:44
por JoséQuintas
Mas voltando ao Microevolution:

Eu estou achando seu fonte meio complicado.
Pelo jeito você também, porque está se perdendo no que está fazendo.

Talvez fosse melhor dar uma revisada em tudo.

E você mesmo acabou de citar algo:

Dependendo da tela, ESC pode abandonar ou salvar o que foi feito.

Pense bem: Será que para o usuário não vai complicar cada hora uma tecla diferente?

Só pra dar uma idéia:
Aqui eu uso o padrão ESC Sai , pra TUDO.
Mais que isso: aqui o clique direito do mouse funciona como ESC.
Nunca tive reclamação.

Caso não saiba, também encerram os GETS o Ctrl-W, Ctrl-R e Ctrl-C (ou PgUp PgDn).
Estes salvam o conteúdo.

Cancelar Operação

Enviado: 07 Jan 2016 23:54
por microvolution
Jairo Maia escreveu:Nope!!!! O default é .T.
bom, desde que entendo por clipper sempre considerei como padrão .f., pois se não fizer nada, ou seja, se o readexit() não for acionado no aplicativo não habilita as setas para encerrar o READ.
Só pra desencargo de consciência fiz um teste aqui no clipper novamente e por padrão é .f.

Só se no harbour é .t. . Ah´! estou usando o harbour 3.4.0.
Pra matar de vez esse assunto, foi pegar o meu velho e bom livro de clipper que tenho que é:
CLIPPER SUMMER 87 de Antº Geraldo da Rocha Vidal vol.1 de 1990.
pág. 398:
diz ele no final do tópico "argumentos":
...
O padrão é falso (.F.), ou seja, teclas desabilitadas.
vlw!

Cancelar Operação

Enviado: 08 Jan 2016 08:15
por Jairo Maia
microvolution escreveu:O padrão é falso (.F.), ou seja, teclas desabilitadas.
Isso mesmo, o padrão é .F., comi bola... Para sair do READ com as setas tem que setar .T.. Apenas eu não diria: teclas desabilitadas, eu diria: saída do READ com as setas desabilitada, já que com ou sem ReadInsert() pode alternar entre os Gets com as setas. Valeu...

Cancelar Operação

Enviado: 08 Jan 2016 08:25
por asimoes
Quanto ao ReadExit tirem as conclusões, a fonte é o chm do xHarbour, a informação pode ser encontrado no NG
Porcurei no velho NG (norton Guide ) lembram?
Tirem as conclusões.
ReadExit
ReadExit

Cancelar Operação

Enviado: 08 Jan 2016 08:29
por JoséQuintas
E como não.
Tem TODOS aqui on-line, pra Clipper 5.2, 5.3, SIXCDX, outras LIBs existentes no Harbour, e muitos outros NGs.

http://www.ousob.com/norton.php

Cancelar Operação

Enviado: 08 Jan 2016 15:46
por Jairo Maia
Olá Alexandre,
asimoes escreveu:Porcurei no velho NG (norton Guide ) lembram?
Uma vez alguém fez essa brincadeira com outro colega que tinha escavado coisas do arco da velha. Então vou repetir:

Alexandre, tá novinha, use a vontade...
PáDePedreiro.jpg
PáDePedreiro.jpg (3.49 KiB) Exibido 3487 vezes