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

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

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

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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 )
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
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

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

Mensagem 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              
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

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

Mensagem por rochinha »

Amiguinhos,

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

Talvez o código ilustre algumas peculiaridades.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

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

Mensagem por deividdjs »

vou buscar informaciones .... gracias amigos !!

saludos!

DJS
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

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

Mensagem 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!!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder