Duvidas com TBrowse
Moderador: Moderadores
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Duvidas com TBrowse
Ola caros colegas, tenho um problema com o uso da classe TBrowse e gostaria de uma solução se possível, lá vai ...
uso a classe tbrowse para montar uma tela de consulta de produtos no meu sistema;
a tela do tbrowse tem 10 linhas, e uso sistema de consulta por codigo ou descricao; (02 indices)
o que está acontecendo é o seguinte:
se estiver no inicio do dbf e, se o cursor (barra de destaque) estiver posicionado na linha 08 (vamos supor), e eu digitar o codigo do 1º item da tabela, A BARRA DE DESTAQUE NÃO VAI PARA CIMA ! Dá a entender que:
como o item está sendo visualizado, o tbrowse ignora e não posiciona o cursor em cima do objeto da pesquisa. Para esclarecer um pouco mais mando um trecho do codigo:
Tb4:= tbcolumnne(vcab, { || predsc+" "+premar+" "+trans(prevnd,"@ZE 999,999.99")+"/"+preemb})
Tb3:= tbrowseDB(07,05,17,74)
Tb3:headsep:= "Ä"
Tb3:colorspec:= "n/w,gr+/b,n+/w,n+/n,b/w"
Tb4:defcolor:= {5}
Tb4:colorblock:= {|tb3| iif(preest <= 0 , {3,4},{1,2})}
Tb3:addcolumn(Tb4)
do while .t.
do while !Tb3:stabilize()
enddo
Show_Cond()
tempo:= inkey(180)
do case
case tempo = 0
protect()
tb3:refreshall()
loop
case tempo == K_DOWN
Tb3:down()
tb3:refreshall()
case tempo == K_UP
Tb3:up()
tb3:refreshall()
case tempo == K_PGDN
Tb3:PageDown()
tb3:refreshall()
case tempo == K_PGUP
Tb3:PageUp()
tb3:refreshall()
case isalpha(Chr(lastkey())) .OR. lastkey() > 48 .AND. lastkey() < 58
pesqui:=savescreen(24,18,26,62)
if (lastkey() > 48 .AND. lastkey() < 58)
set order to tag indpre01
ord:= 1
else
set order to tag indpre02
ord:= 2
endif
Keyboard Upper(Chr(lastkey()))
pesquisa()
restscreen(24,18,26,62,pesqui)
Tb3:RefreshAll()
e por aí vai...
Se alguem tiver uma solução, desde já agradeço
uso a classe tbrowse para montar uma tela de consulta de produtos no meu sistema;
a tela do tbrowse tem 10 linhas, e uso sistema de consulta por codigo ou descricao; (02 indices)
o que está acontecendo é o seguinte:
se estiver no inicio do dbf e, se o cursor (barra de destaque) estiver posicionado na linha 08 (vamos supor), e eu digitar o codigo do 1º item da tabela, A BARRA DE DESTAQUE NÃO VAI PARA CIMA ! Dá a entender que:
como o item está sendo visualizado, o tbrowse ignora e não posiciona o cursor em cima do objeto da pesquisa. Para esclarecer um pouco mais mando um trecho do codigo:
Tb4:= tbcolumnne(vcab, { || predsc+" "+premar+" "+trans(prevnd,"@ZE 999,999.99")+"/"+preemb})
Tb3:= tbrowseDB(07,05,17,74)
Tb3:headsep:= "Ä"
Tb3:colorspec:= "n/w,gr+/b,n+/w,n+/n,b/w"
Tb4:defcolor:= {5}
Tb4:colorblock:= {|tb3| iif(preest <= 0 , {3,4},{1,2})}
Tb3:addcolumn(Tb4)
do while .t.
do while !Tb3:stabilize()
enddo
Show_Cond()
tempo:= inkey(180)
do case
case tempo = 0
protect()
tb3:refreshall()
loop
case tempo == K_DOWN
Tb3:down()
tb3:refreshall()
case tempo == K_UP
Tb3:up()
tb3:refreshall()
case tempo == K_PGDN
Tb3:PageDown()
tb3:refreshall()
case tempo == K_PGUP
Tb3:PageUp()
tb3:refreshall()
case isalpha(Chr(lastkey())) .OR. lastkey() > 48 .AND. lastkey() < 58
pesqui:=savescreen(24,18,26,62)
if (lastkey() > 48 .AND. lastkey() < 58)
set order to tag indpre01
ord:= 1
else
set order to tag indpre02
ord:= 2
endif
Keyboard Upper(Chr(lastkey()))
pesquisa()
restscreen(24,18,26,62,pesqui)
Tb3:RefreshAll()
e por aí vai...
Se alguem tiver uma solução, desde já agradeço
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Bom dia!
Tente fazer a seguinte alteração.
Tente fazer a seguinte alteração.
Código: Selecionar todos
case isalpha(Chr(lastkey())) .OR. lastkey() > 48 .AND. lastkey() < 58
pesqui:=savescreen(24,18,26,62)
if (lastkey() > 48 .AND. lastkey() < 58)
set order to tag indpre01
ord:= 1
else
set order to tag indpre02
ord:= 2
endif
Keyboard Upper(Chr(lastkey()))
pesquisa()
restscreen(24,18,26,62,pesqui)
// isso foi adicionado
while .not. oConsulta:Stabilize()
enddo
Tb3:RefreshAll()
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Caro amigo,
o erro pode estar na função de pesquisa.
Ela está atuando sobre o arquivo e índices atuais.
Você já verificou o resultado da pesquisa e o registro em que ela se encontra.
Com efeito, se você deslocou o ponteiro e registro no banco de dados e "deu" um refreshall() ou configure(), não tem erro, o tbrowse é redesenhado com base no local atual do ponteiro de registro.
Verifique e poste, por favor.
MarceloG
o erro pode estar na função de pesquisa.
Ela está atuando sobre o arquivo e índices atuais.
Você já verificou o resultado da pesquisa e o registro em que ela se encontra.
Com efeito, se você deslocou o ponteiro e registro no banco de dados e "deu" um refreshall() ou configure(), não tem erro, o tbrowse é redesenhado com base no local atual do ponteiro de registro.
Verifique e poste, por favor.
MarceloG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
bom dia caros amigos,
em 1º lugar agradeço o empenho.
Dudu, com as alteraçoes que vc sugeriu, não tive solução;
O curioso é:
nas pesquisas ( estando o cursor ) no inicio da tabela e pesquisando algum registro que esteja daí para baixo, funciona que é uma beleza !
porém como já disse, se o tbrowse estiver mostrando os 10 primeiros registros, o cursor estiver em cima do 4º (supomos), e pesquisarmos o codigo ou a descrição dos registros que estão acima do cursor, ele simplesmente não destaca a linha pesquisada, é como se o tbrowse entendesse que o registro já esta sendo visualizado, e que não precisa destacar a barra em cima do item da pesquisa !
já tentei com :hilite() em tudo que é lugar, porém não tem jeito.
isso causa um transtorno (voces bem podem imaginar), imagina o caboclo pesquisando os itens para um pedido, se ele for apressadinho e não prestar atenção na tela (o que é comum) vai incluir o item errado !
caso alguem tenha outras idéias,
antecipadamente agradeço
em 1º lugar agradeço o empenho.
Dudu, com as alteraçoes que vc sugeriu, não tive solução;
O curioso é:
nas pesquisas ( estando o cursor ) no inicio da tabela e pesquisando algum registro que esteja daí para baixo, funciona que é uma beleza !
porém como já disse, se o tbrowse estiver mostrando os 10 primeiros registros, o cursor estiver em cima do 4º (supomos), e pesquisarmos o codigo ou a descrição dos registros que estão acima do cursor, ele simplesmente não destaca a linha pesquisada, é como se o tbrowse entendesse que o registro já esta sendo visualizado, e que não precisa destacar a barra em cima do item da pesquisa !
já tentei com :hilite() em tudo que é lugar, porém não tem jeito.
isso causa um transtorno (voces bem podem imaginar), imagina o caboclo pesquisando os itens para um pedido, se ele for apressadinho e não prestar atenção na tela (o que é comum) vai incluir o item errado !
caso alguem tenha outras idéias,
antecipadamente agradeço
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Primeiro, é importante destacar que a cada verificação do teclado (do case isso ou aquilo), não há necessidade de um refreshall.
Se o volume de dados for grande, isso pode comprometer a rapidez do processamento.
Quanto a visualização, faça o seguinte:
Se a variável tb3 é local, torne a mesma private para torná-la visível na função/ procedure pesquisa()
Coloque antes da saída da função/procedure de pesquisa, mas depois do dbseek (ou seek) o seguinte:
alert(recno())
tb3:configure()
tb3:forcestable()
Isso vai possibilitar ver em qual registro o ponteiro(foco) do arquivo se encontra e determinar e forçar o redesenho de todo o tbrowse na próxima estabilização.
Se funcionar, é só desabilitar o alert e pronto.
Por favor, retorne.
MarceloG
Se o volume de dados for grande, isso pode comprometer a rapidez do processamento.
Quanto a visualização, faça o seguinte:
Se a variável tb3 é local, torne a mesma private para torná-la visível na função/ procedure pesquisa()
Coloque antes da saída da função/procedure de pesquisa, mas depois do dbseek (ou seek) o seguinte:
alert(recno())
tb3:configure()
tb3:forcestable()
Isso vai possibilitar ver em qual registro o ponteiro(foco) do arquivo se encontra e determinar e forçar o redesenho de todo o tbrowse na próxima estabilização.
Se funcionar, é só desabilitar o alert e pronto.
Por favor, retorne.
MarceloG
Caso ainda não tenha resolvido tenho 2 meios aqui que sempre funcionaram comigo:
1o
Esse pode ser meio demorado dependendo da sua base de dados pois o que ele faz é ir até o final e daí vai subindo o cursor do TBrowse até encontrar o registro que seja igual ao que está sendo procurado.
2o
Bem, o "oDiv:ForceStable" teoricamente é igual ao "While !DivBr:Stabilize() ; EndDo" porém em alguns casos só consegui o resultado desejado usando ele.
Tenta esses métodos (se ainda não tiver tentado) e depois fala se resolveu ou não seu problema.
1o
Código: Selecionar todos
nSaveRecno := RecNo()
oDivBr:RefreshAll()
While !oDivBr:Stabilize(); EndDo
While Recno() != nSaveRecno
oDivBr:up()
While !oDivBr:Stabilize() ; EndDo
EndDo2o
Código: Selecionar todos
nSaveRec := Recno()
oDivBr:RefreshAll()
oDivBr:ForceStable()Tenta esses métodos (se ainda não tiver tentado) e depois fala se resolveu ou não seu problema.
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
É MarceloG, a coisa tá preta, não funcionou não.
difícil hein ?
pensando e refletindo melhor o que acontece é que: o resultado da pesquisa é mostrado sempre na posição onde está o cursor, porém quando se está exibindo os registros iniciais e a barra de destaque está no quarto registro, e faz-se a pesquisa de um registro que esteja para cima, a barra de destaque não sai do lugar.
difícil hein ?
pensando e refletindo melhor o que acontece é que: o resultado da pesquisa é mostrado sempre na posição onde está o cursor, porém quando se está exibindo os registros iniciais e a barra de destaque está no quarto registro, e faz-se a pesquisa de um registro que esteja para cima, a barra de destaque não sai do lugar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Caro amigo,
verificando melhor o tópico, fiquei como algumas dúvidas para poder de ajudar.
Então, para entender vamos admitir que você está na primeira coluna e segunda linha do tbrowse.
Essa coluna é o código e o índice ativo é o código.
Logo, o tbrowse está destacando e eventualmente mostrando "000002". Acertei? Beleza!
Aí você faz a pesquisa do número "000006". Ele é encontrado e o tbrowse destaca a sexta linha do tbrowse. Certo? Beleza de novo!
Novamente você pesquisa o número "000003".
O tbrowse fica na sexta linha ou vai para a terceira?
Se ele foi para a terceira linha, ou destacou o terceiro registro, tudo bem!
É que o tbrowse tenta manter a posição relativa na janela.
Agora se você quer que essa linha fique destacada, mostrando uma cor diferente, isso vai depender da condição que você especificou em colorblock e se ela foi atendida. Sacou?
Todavia, se o tbrowse ficou quietinho na sexta linha e você tem certeza de que o registro "000003" existe, experimente refazer os índices.
Também, utilize todos os argumentos do comando SET ORDER.
Teste.
Use refresshal, configure ou invalidade.
Não deu?
Me manda um email com a função completa, inclusive de pesquisa pra poder analisar.
Uma simples pesquisa com tbrowse não pode dar essa "zebra" né.
MarceloG
verificando melhor o tópico, fiquei como algumas dúvidas para poder de ajudar.
Então, para entender vamos admitir que você está na primeira coluna e segunda linha do tbrowse.
Essa coluna é o código e o índice ativo é o código.
Logo, o tbrowse está destacando e eventualmente mostrando "000002". Acertei? Beleza!
Aí você faz a pesquisa do número "000006". Ele é encontrado e o tbrowse destaca a sexta linha do tbrowse. Certo? Beleza de novo!
Novamente você pesquisa o número "000003".
O tbrowse fica na sexta linha ou vai para a terceira?
Se ele foi para a terceira linha, ou destacou o terceiro registro, tudo bem!
É que o tbrowse tenta manter a posição relativa na janela.
Agora se você quer que essa linha fique destacada, mostrando uma cor diferente, isso vai depender da condição que você especificou em colorblock e se ela foi atendida. Sacou?
Todavia, se o tbrowse ficou quietinho na sexta linha e você tem certeza de que o registro "000003" existe, experimente refazer os índices.
Também, utilize todos os argumentos do comando SET ORDER.
Teste.
Use refresshal, configure ou invalidade.
Não deu?
Me manda um email com a função completa, inclusive de pesquisa pra poder analisar.
Uma simples pesquisa com tbrowse não pode dar essa "zebra" né.
MarceloG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Pois é meu caro
interessante não ?
Então, para entender vamos admitir que você está na primeira coluna e segunda linha do tbrowse. OK
Essa coluna é o código e o índice ativo é o código. OK
Logo, o tbrowse está destacando e eventualmente mostrando "000002". Acertei? Beleza! OK
Aí você faz a pesquisa do número "000006". Ele é encontrado e o tbrowse destaca a sexta linha do tbrowse. Certo? Beleza de novo! OK
Novamente você pesquisa o número "000003". Ok
O tbrowse fica na sexta linha ou vai para a terceira? Ele fica na sexta linha
estou certo de que não é indexação (Depois mando o fonte, e vc vai entender) ou melhor vou mandar uma demo do sistema com um minimo de dbf´s, vc vai entender melhor ainda
Por enquanto, obrigado
Então, para entender vamos admitir que você está na primeira coluna e segunda linha do tbrowse. OK
Essa coluna é o código e o índice ativo é o código. OK
Logo, o tbrowse está destacando e eventualmente mostrando "000002". Acertei? Beleza! OK
Aí você faz a pesquisa do número "000006". Ele é encontrado e o tbrowse destaca a sexta linha do tbrowse. Certo? Beleza de novo! OK
Novamente você pesquisa o número "000003". Ok
O tbrowse fica na sexta linha ou vai para a terceira? Ele fica na sexta linha
estou certo de que não é indexação (Depois mando o fonte, e vc vai entender) ou melhor vou mandar uma demo do sistema com um minimo de dbf´s, vc vai entender melhor ainda
Por enquanto, obrigado
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
