Ops... estão corretos, só estão confundindo uma coisa:Eolo escreveu:O ReadExit(), que quer dizer “SairdoRead” e cujo default é .T. (ou seja, SIM)
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: 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: 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 ()
...
returnCódigo: Selecionar todos
static function fVR_PERDES ()
...
if lastkey () <> K_UP
CAD_PRODUTOS ()
// ?'após encerrar orçamento a vista FIM',FIM
// wait
endif
returnCó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
returnObservem que existem na última função acima, bem como na penúltima, 2 linhas comentadas, que repito:
Código: Selecionar todos
// ?'FIM' , FIM
// waitCódigo: Selecionar todos
// ?'após encerrar orçamento a vista FIM',FIM
// waitJá 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 typeaheadObservem 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
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!


