Página 4 de 4

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 15:56
por JoséQuintas
criar coluna

Código: Selecionar todos

tbrowse  { "x", { || cliente_em_atraso( cli->cc_codcli ) } }
No codeblock somente testar a coluna
Confirmar se não está atualizando todo browse mais do que deveria.

Nota:
Desse jeito a função vai pesquisar o código recebido, desde que altere a função.
E o colorblock não vai ser executado centenas de vezes para a tela atual ao usar setas, se é que colocou pra consultar somente se mexer em alguma tecla.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 16:06
por JoséQuintas
vixe, não está nada otimizado.

Código: Selecionar todos

do while .T.
    oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{})
    do while !oTab:Stabilize() ; enddo
    [b]IF CLIENTES_EM_ATRASO() == 'S'       [/b]                                                
      oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif                                                                                
    oTab:hilite()                                                                        
     setpos( nRow, nCol )                                                                 
     //nKey := inkey(0)                                                                      
     nKey := Inkey( 0, HB_INKEY_ALL )
Tá jogando tempo fora, isso também deixa lento.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 16:15
por JoséQuintas
Apenas exemplo:

Código: Selecionar todos

      nkey := 0
      DO WHILE nkey == 0 .AND. ! oBrowse:Stable
         oBrowse:Stabilize()
         nkey := Inkey()
      ENDDO
Imagine o usuário clicar várias vezes pagedown.
Do jeito que fez, atualiza a cada aperto de tecla.
Do jeito acima, além de aproveitar pausa, se o usuário clicar vários pagedown. nem perde tempo atualizando, só atualiza quando o usuário parar de apertar a tecla.

Serão muitos SEEKs economizados.

Só não esqueça de obrigatoriamente atualizar antes de chamar alguma função do usuário.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 16:21
por Itamar M. Lins Jr.
Olá!
Quer dizer, ele só esqueceu do método :stabilize.
Como não uso mais esse tipo de browse, não percebi.
Por isso ficava super lento.

Olhando novamente tem o método, a posição é que está em cima.

Saudações,
Itamar M. Lins Jr.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 16:34
por JoséQuintas
Isto também

Código: Selecionar todos

  nKey := Inkey( 0, HB_INKEY_ALL )
Se balançar a mesa, tá fazendo seek.

A não ser que esteja usando, o que acho difícil, não tem porque receber eventos de movimentar mouse:

Código: Selecionar todos

   INKEY_ALL - INKEY_MOVE

Código: Selecionar todos

#define INKEY_MOVE              1
#define INKEY_LDOWN             2
#define INKEY_LUP               4
#define INKEY_RDOWN             8
#define INKEY_RUP               16
#define INKEY_MMIDDLE           32  /* Harbour extension middle button mask */
#define INKEY_MWHEEL            64  /* Harbour extension mouse wheel mask */
#define INKEY_KEYBOARD          128
#define INKEY_ALL               ( INKEY_KEYBOARD + INKEY_MOVE + INKEY_LDOWN + INKEY_LUP + INKEY_RDOWN + INKEY_RUP + INKEY_MMIDDLE + INKEY_MWHEEL )

#define HB_INKEY_RAW            256 /* Harbour extension */
#define HB_INKEY_GTEVENT        1024 /* Harbour extension */
#define HB_INKEY_EXT            2048 /* Harbour extension */
#define HB_INKEY_ALL            ( INKEY_ALL + HB_INKEY_GTEVENT )

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 17:24
por deividdjs
criei a coluna assim .. como faço para testar a coluna?

Código: Selecionar todos

   if i = 4
	    oCol:COLORBLOCK :={|X| IIF ( CC_FJ = "F" , {6,2} ,;
                              IIF ( CC_FJ = "J" , {8,2},{1,2} ))} 
   endif                               

   [b]oCol:= { "x", { || clientes_em_atraso( cli->cc_codcli ) } }[/b]

next
  
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / len(aCamp) // Para iluminar o TBrowser

oTab:Freeze := 2 // Definindo Coluna fixa
oTab:ColPos := 1
 
do while .T.

 //   oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{})

    do while !oTab:Stabilize() ; enddo
  
	 IF CLIENTES_EM_ATRASO() == 'S'                                                       
      oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif                                                                                

    oTab:hilite()   
como eu testo a coluna aqui ela aqui nesta parte ?? e como eu testo pra ver o valor codeblock ??

Código: Selecionar todos

	 IF CLIENTES_EM_ATRASO() == 'S'                                                       
      oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif              

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 18:41
por JoséQuintas
Dê uma olhada no manual do tbrowse, tem lá no harbour.
Olhe também sobre a cor, não é aí que se coloca. e sim na coluna.
Aí é pra mexer com linha selecionada.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 23:19
por rochinha
Amiguinhos,

Vou deixar este tópico aqui para tentar ajuda um pouquinho.

Talvez o código ilustre algumas peculiaridades.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 07 Jun 2024 08:32
por deividdjs
vou buscar informaciones .... gracias amigos !!

saludos!

DJS

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 12 Jun 2024 15:15
por deividdjs
Obrigado amigos pela ajuda de sempre .. consegui fazer desta maneira e ficou muito rápido em ambiente de rede ... criei um array com os clientes em atrasado assim a leitura fica somente na memoria ... o que vocês acham ?? dá pra melhorar algo mais ?? posso usar um array sem problema para essa finalidade??


Pra quem achar útil .. segue a ajuda ai tbm ...

exemplo de como mudar a cor de um cadastro de cliente de acordo com uma condição de outra tabela usando array ....

Código: Selecionar todos

*-------------------*
 procedure DB_CADCLI  && TABELA DE CLIENTES
*-------------------*
local Regra := "ClienteAtrasado(CLI->cc_codcli,aContas)", aContas := {}   /// meu TBROWSER tem uma REGRA com um codeblock para mudar a cor .. //DB_CLIENTE

Código: Selecionar todos

*----------------------------------------------------------------*
 function DB_CLIENTE( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*----------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA, v_atraso 

select( cAlias )
set order to nOrdem
go top

setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )

aContas := CarregarContas() // carrego as contas atrasadas no array

X:=aCamp[2]
oTab           := TBrowseNew( 05, 02, 21, 77 ) // GERA UM TBROWSE
oTab:colsep    := CHR(179)
oTab:headsep   := CHR(194)+CHR(196)
oTab:footsep   := CHR(193)+CHR(196)
oTab:ColorSpec := "N/W*,W+/B+,R+/W*,R+/N+,GR+/N"
oTab:SkipBlock := {| nSkip | dbSkipBlock( nSkip, oTab ) }

for i = 1 TO len( aCamp )
   if valtype(aCamp[I]) == "B"
       oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
       oCol:Picture:=aPict[I]
   else
      oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
      oCol:Picture:=aPict[I]
   endif
   If Regra # Nil
      oCol:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}  // AQUI ESTA A REGRA
   EndIf
   oTab:addColumn( oCol )
next

do while .T.
	  
	 do while !oTab:Stabilize() ; enddo

    // EU FAÇO ISSO PRA MUDAR A COR DE FUNDO QUANDO A LINHA ESTA VERMELHA ... OU BRANCA 	    

    IF ClienteAtrasado(CLI->cc_codcli,aContas)
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif                                                                                
         
    oTab:hilite()                                                                        
    setpos( nRow, nCol )                                                                 
    nKey := Inkey(0)

........... aqui segue o baile rsrsrs...


Código: Selecionar todos


*********************************************************************************************
//----------------------------------------------// 
 FUNCTION ClienteAtrasado(nCodCliente, aContas)
//----------------------------------------------// 
   
	 LOCAL lAtrasado, dHoje, i, nLen
    lAtrasado := .F.
    dHoje := DATE()
    nLen := LEN(aContas)
    
    FOR i := 1 TO nLen
        IF aContas[i][1] == nCodCliente
            lAtrasado := .T.
            EXIT
        ENDIF
    NEXT

    RETURN lAtrasado
    
//------------------------//    
  FUNCTION CarregarContas()
//------------------------//  
   
   LOCAL aContas, dHoje, cliant, oElement
    aContas := {}
    dHoje := DATE()

	 RECEBER->(ORDSETFOCUS("RECCX_18"))
	 RECEBER->(DBGOTOP())
	 do while RECEBER->cd_dtvenc < date() .and. RECEBER->cc_receb == ' ' .and. RECEBER->(!EOF())
		
	  	 if RECEBER->cc_codcli <> cliant 
          AADD(aContas, { receber->cc_codcli})
		 endif   
 		 cliant := RECEBER->cc_codcli 
		 RECEBER->(DBSKIP())
		
	 enddo
	 
	 ClienteAtrasado(CLI->cc_codcli,aContas)

    RETURN aContas
 
 //------------------------------------------------------------------------------------------------------------------


se alguém tiver alguma ideia para otimizar estamos aí

Abraço a todos!!