Pelo menos agora tem uma referência.
Uma chamada que quase sempre funciona, e outra que quase sempre não funciona.
O que elas tem de diferente?
Chamadas por SET KEY, ou num prompt, ou misturadas com tbrowse?
Lembro daquele fonte que precisou ajuda, onde misturava o tbrowse com rotina de menu.
Eu tenho dois tipos de tbrowse, que agora reduzi pra ... sei lá... um e meio...
Um deles é um tbrowse passando coordenadas, que só tem o tbrowse.
Esse é usado, por exemplo, em telas compostas, como em pedidos/produtos de pedido, onde pode sofrer alteração
O outro é pra pesquisas em geral, abre na tela inteira, coloca Ãcones, etc.
Este cuida apenas da tela, e chama o anterior.
Então, não tem comportamento diferente, é sempre igual.
O normal do tbrowse é passar função de usuário, e essa função de usuário é que desvia pra outras rotinas.
Desta forma o funcionamento fica sempre igual.
Até uma coisa interessante no Harbour é que o tbrowse tem um SetKey(), onde a gente pode programar teclas pra serem acionadas no tbrowse.
A idéia do tbrowse é justamente adicionar opções, sem ter que ficar criando várias e várias rotinas.
E com isso, vai ter o mesmo comportamento no aplicativo inteiro.
Outra coisa boa no Harbour é o tbrowse aceitar codeblock como função de usuário.
Isso permite criar uma função que pode ser STATIC, o que facilita pra não ter que ficar inventando nomes.
Acho que cheguei a criar um "esqueleto" pra isso naquela rotina do post que mencionei.
Algo como MeuBrowse( linha, coluna, linha, coluna, { || FuncaoDeUsuario() } )
Então, de um modo geral é chamar a rotina de tbrowse e passar a função.
Depois, na função, trata o que precisar.
STATIC FUNCTION FuncaoDeUsuario()
IF LastKey() == K_INS
RotinaInclusao()
ELSEIF LastKey() == K_DEL
RotinaExclusao()
ELSEIF LastKey() == K_ENTER
RotinaSelecao()
ENDIF
RETURN NIL
Dessa forma, não precisa ficar mexendo na rotina de tbrowse, basta passar a função de usuário com adicionais.
E o mais importante: o comportamento do tbrowse vai ser sempre o mesmo.
Se começa a fazer rotinas de tbrowse variadas, cada uma com suas exceções/diferenças... com certeza vai acabar com comportamentos diferentes.
Na função de usuário acima, por exemplo, se chega em alguma rotina sem cursor, coloca nessa função de usuário o SET CURSOR ON.
Isso vai fazer com que qualquer rotina chamada tenha cursor.
Agora verifique as suas duas rotinas, e veja se consegue descobrir algum detalhe diferente, alguma mistura de tbrowse com outras coisas.