Página 1 de 1

Divergência entre DbEdit e TBrowse atualização da tela

Enviado: 23 Mai 2021 16:09
por ANDRIL
Identifiquei uma divergência entre o DbEdit e TBrowse quanto a posição do cursor na tela, que causa a impressão de ter problema de indice no arquivo de dados.

Antes sempre utilizava o Dbedit porem com necessidade de pintar algumas linhas conforme o status do produto passei alguma rotinas para uso com TBrowse. Na coluna Descrição permito que o usuário digite as iniciais do item a ser localizado e assim faço a busca e caso exista a tela sofre um refresh e o item é exibido. No caso do TBrowse faço a mesma busca e as vezes não era posicionado no item buscado mesmo sendo localizado.
Fiz vários testes e descobri que se usar a seta para baixo ou chegar até o final da lista de itens, fazer a busca mesmo dando um refreshAll no TBrowse o item não mostra como posicionado.

Pensei que fosse devido no meu TBrowse ter outras rotinas, mas isolei o código e montei um sistema a parte para testes entre o DbEdit e o TBrowse e aconteceu o mesmo.
Creio que o problema esteja na função que vai no brw:skipblock({|_1| MOV_PTR(_1)}) lembro de ter pego aqui no fórum em algum exemplo, como funcionou de boa para o trivial passei a usá-la.

Anexei o sistema que fiz a parte esta em um arquivo RAR e mudei a extensão de RAR para TXT para poder anexar aqui no fórum.
Já esta compilado é só testar o roteiro que coloquei.

Compilado com Hb 3.2

Divergência entre DbEdit e TBrowse atualização da tela

Enviado: 25 Mai 2021 03:48
por JoséQuintas
Se olhar harbour/src/rtl/dbedit.prg, vai ver que o dbedit é feito usando tbrowse.
Só confirmar e ajustar sua rotina pra fazer a mesma coisa.

Em todo caso, talvez prefira assim:

Código: Selecionar todos

      IF retBrowse=1
         brw:refreshCurrent()
      ELSEIF retBrowse=2
         brw:Configure()
         brw:refreshALL()
      ELSEIF retBrowse=0
         EXIT
      ENDIF

Divergência entre DbEdit e TBrowse atualização da tela

Enviado: 25 Mai 2021 08:57
por ANDRIL
Quintas, já havia tentado com o brw:Configure(); brw:refreshAll(), mas não surtiu efeito algum.
JoséQuintas escreveu:Se olhar harbour/src/rtl/dbedit.prg, vai ver que o dbedit é feito usando tbrowse.
Minha pasta harbour não tem esta subpasta SRC. Já havia procurado pelo fonte do dbedit.prg para comparar com meu TBrowse, só que não tem este fonte. Tem como anexá-lo neste post?

Divergência entre DbEdit e TBrowse atualização da tela

Enviado: 25 Mai 2021 10:01
por JoséQuintas
ANDRIL escreveu:Quintas, já havia tentado com o brw:Configure(); brw:refreshAll(), mas não surtiu efeito algum.
Aqui testei no Harbour 3.4.
brw:Configure() refaz o browse como se fosse do zero.
O resultado é sempre o registro encontrado como a primeira linha do browse.
ANDRIL escreveu:Minha pasta harbour não tem esta subpasta SRC. Já havia procurado pelo fonte do dbedit.prg para comparar com meu TBrowse, só que não tem este fonte. Tem como anexá-lo neste post?
Só baixar do github

https://github.com/harbour/core/blob/ma ... dbedit.prg

Divergência entre DbEdit e TBrowse atualização da tela

Enviado: 25 Mai 2021 11:57
por ANDRIL
Solucionado!
Em retBrowse=2 adicionei o código abaixo em negrito e agora funcionou.

if retBrowse = 2
nPrevRecNo := RecNo()
brw:refreshAll():forceStable()
DO WHILE nPrevRecNo != RecNo()
brw:Up():forceStable()
ENDDO

brw:refreshAll()
endif
Consultei o fonte do DbEdit() do link que postou.
Obrigado Quintas!