Nem precisa já postei o fonte, olhando o fonte já se vê isso.
o GetPreValidate() seria o WHEN.
E o nPos seria o GET onde foi feito o click - o próximo get.
Significa que o WHEN está posicionado em qualquer campo anterior quando é mouse.
Já quando é teclado, é usado nPos + 1 ou nPos -1, e só depois é verificado o WHEN (GetPreValidate()).
Simplificando é assim:
faz mais de 20 anos que acontece isso.
Em 20 anos muitos fontes foram feitos.
No caso do Clipper é aceitar.
No caso do Harbour, também, pelo motivo acima.
Vai de cada um, se quiser diferente, criar sua própria Getsys diferente.
Supondo que faça igual o mouse:
Código: Selecionar todos
@ 1, 0 GET a
@ 2, 0 GET b WHEN GetShow()
@ 3, 0 GET c WHEN GetShow()
@ 4, 0 GET d WHEN GetShow()
@ 5, 0 GET e WHEN GetShow()
READ
FUNCTION GetShow()
@ 1, 0 SAY ReadVar()
RETURN .T.
No fonte acima. Se teclar seta pra cima, que nome deveria aparecer em cada WHEN?
Percebeu?
O conserto pode se transformar em problema.
Talvez no Harbour, na versão de Getsys em classe, isso esteja resolvido por ser exclusivo do Harbour e não precisar compatibilidade.
Resolvendo isso de forma prática:
Porque verificar variável sendo digitada na cláusula WHEN, se nesse ponto nenhuma variável está sendo digitada?
Usar o Readvar() aí é que está errado.