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

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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
Anexos
testeDbeditxTBrowse.txt
após baixar este arquivo, altere a extensão para .RAR e descompacte em uma pasta de sua preferência.
(598.96 KiB) Baixado 60 vezes
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder