Página 1 de 3

Erro no Tbrowse

Enviado: 21 Dez 2015 21:13
por asimoes
Pessoal,

Estou com um erro na chamada deste setkey :

oTBrowse:setKey(K_ENTER, {|| DiasAtraso("APA01")})

O Erro:
Error BASE/1004 Metodo nao exportado: HB_SETKEY
Called from ->TBROWSE:HB_SETKEY(0)

A versão do harbour é 3.4

Erro no Tbrowse

Enviado: 21 Dez 2015 23:54
por JoséQuintas
Tem certeza que é nessa parte?
Dá uma conferida nas linhas de erro.

A mensagem se refere a não existir hb_SetKey() como método, mas nessa linha está usando :SetKey() então não parece ser nela.
Procure nos fontes :hb_SetKey

Erro no Tbrowse

Enviado: 22 Dez 2015 08:12
por asimoes
Quintas,

O meu código parece estar correto, mas pode haver algum erro na chamada do setkey veja:

Compilado com harbour 3.4

Código: Selecionar todos


#include "inkey.ch"
#include "TBrowse.ch"

oTBrowse := TBrowseDb(nLinI, nColI, nLinF, nColF)

   oColuna := TBColumnNew( "Mˆs/Ano", {|| SubStr(APA01->AnoMes, 3, 2)+APA01->NovoAno})
   oColuna:picture := "@R 99/9999"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "T", {|| APA01->t_guia})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "S", {|| APA01->loc_pag})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew("  Vencto. ", {|| " "+HB_DTOC(APA01->d_venc,"DDMMYY")})
   oColuna:picture := "@R 999/99/99 "
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Vlr.Total", {|| APA01->vl_guia})
   //oColuna:picture := "@E 999,999,999.99"
   oColuna:picture := "@E 999,999.99"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Vlr.Pago", {|| APA01->vl_pgto})
   oColuna:picture := "@E 999,999.99"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Acr.Red.", {|| APA01->acr_red})
   oColuna:picture := "@E 999,999.99"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Data Pgt.", {|| " "+HB_DTOC(APA01->d_pgto,"DDMMYY")})
   oColuna:picture := "@R 999/99/99 "
   //oColuna:colorBlock := {||IF(Empty(d_pgto) .AND. (date()-d_venc) > 30, {4, 1}, {1, 1})}
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Nr.do Banco", {|| APA01->nr_banco})
   oColuna:picture := "@R 999999999999/9"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "CB", {|| APA01->em_cobr})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "EC", {|| APA01->ent_conf})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "BS", {|| APA01->baix_sol})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "BC", {|| APA01->baix_conf})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "Pc.Multa", {|| APA01->pc_multa})
   oColuna:picture := "@E 99.99"
   oTBrowse:addColumn( oColuna )

   oColuna := TBColumnNew( "RD", {|| APA01->rc_dg_ass})
   oColuna:picture := "X"
   oTBrowse:addColumn( oColuna )

   FOR I:=1 TO oTBrowse:ColCount
      oTBrowse:GetColumn(I):colorBlock := {||IF(Empty(APA01->d_pgto) .AND. (Date()-APA01->d_venc) > 30,;
                                          {1, 1}, {1, 1})}
   NEXT

   oTBrowse:setKey(K_F12, {|| DiasAtraso("APA01")})

   //... segue o restante do código.
Olhando o fonte tbrowse.prg na pasta src\rtl o método SetKey está aqui.

METHOD setKey( nKey, bBlock ) CLASS TBrowse

LOCAL bReturn
LOCAL nPos

Erro no Tbrowse

Enviado: 22 Dez 2015 08:29
por asimoes
Outra coisa, o método:
METHOD setKey( nKey, bBlock ) // get/set a code block associated with an Inkey() value

Está dentro deste ifdef

#ifdef HB_COMPAT_C53

Erro no Tbrowse

Enviado: 22 Dez 2015 08:36
por asimoes
O método SetKey está no tbrowse dentro do ifdef, mas onde esse define #ifdef HB_COMPAT_C53 é atribuido?

Código: Selecionar todos

#ifdef HB_COMPAT_C53
#ifdef HB_BRW_STATICMOUSE
   VAR mRowPos    AS INTEGER INIT 0             // numeric value indicating the data row of the mouse position
   VAR mColPos    AS INTEGER INIT 0             // numeric value indicating the data column of the mouse position
#else
   METHOD mRowPos SETGET                        // numeric value indicating the data row of the mouse position
   METHOD mColPos SETGET                        // numeric value indicating the data column of the mouse position
#endif

   METHOD setStyle( nStyle, lNewValue )         // maintains a dictionary within an object
   METHOD setKey( nKey, bBlock )                // get/set a code block associated with an Inkey() value
   METHOD applyKey( nKey )                      // evaluate the code block associated with given Inkey() value
   METHOD hitTest( mRow, mCol )                 // indicate position of mouse cursor relative to TBrowse
   METHOD nRow SETGET                           // screen row number for the actual cell
   METHOD nCol SETGET                           // screen column number for the actual cell
   METHOD border( cBorder ) SETGET              // get/set character value used for TBrowse are border
   METHOD message( cMessage ) SETGET            // get/set character string displayed on status bar
#endif

Erro no Tbrowse

Enviado: 22 Dez 2015 08:57
por JoséQuintas
Vamos recomeçar:

Código: Selecionar todos

Error BASE/1004 Metodo nao exportado: HB_SETKEY
Called from ->TBROWSE:HB_SETKEY(0)
Deu erro em hb_SetKey() porque ele não existe.
Se não existe hb_SetKey(), então olhe o fonte/linha anterior do erro, pra ver aonde foi chamado tbrowse:hb_SetKey()

Erro no Tbrowse

Enviado: 22 Dez 2015 08:59
por Jairo Maia
Olá Alexandre,

Código: Selecionar todos

oTBrowse:setKey(K_F12, {|| DiasAtraso("APA01")})
Se você usar isso nas versões 3.0 ou 3.2, isso apenas é ignorado, porém, a função DiasAtraso("APA01") não será chamada se pressionar F12. Ou seja não será atribuido esa chamada a tecla F12 no codblock SetKey. Esse método não é exportável.

Provavelmente na versão 3.4 isso ficou mais exigente, provocando o erro em tempo de execução. Se a idéia é pegar o conteúdo antigo da variável F12 para restaurá-la depois, precisa usar uma variável Local ou outra para restaurar depois:

Código: Selecionar todos

nk_f12:=setKey(K_F12, {|| DiasAtraso("APA01")})
Dessa forma a tecla F12 irá funcionar chamando a função DiasAtraso("APA01"), e na variável nk_f12 estará o valor antigo da F12 para restaurar depois:

Código: Selecionar todos

setKey(K_F12, nk_f12 )

Erro no Tbrowse

Enviado: 22 Dez 2015 09:04
por JoséQuintas
Jairo, ele já disse que é Harbour 3.4
Mas eu me confundi com a mensagem de erro.
É o que mencionei no último post, tem que ver o log de erro completo, olhando aonde foi a chamada que causou esse erro.
O erro foi justamente na chamada anterior a essa.

Erro no Tbrowse

Enviado: 22 Dez 2015 09:08
por Toledo
asimoes escreveu:O método SetKey está no tbrowse dentro do ifdef, mas onde esse define #ifdef HB_COMPAT_C53 é atribuido?
Alexandre, neste caso, resta saber se na compilação dos fontes que estão na pasta \SRC\RTL\ foi definido o #define HB_COMPAT_C53.

Abraços,

Erro no Tbrowse

Enviado: 22 Dez 2015 09:37
por asimoes
Quintas,

O erro:

Error BASE/1004 Metodo nao exportado: HB_SETKEY
Called from ->TBROWSE:HB_SETKEY(0)
Called from A040300.PRG->DBDATA(242)
Called from A040300.PRG->A040300(131)
Called from ->(b)MAIN(664)
Called from ->MAIN(664)

Erro no Tbrowse

Enviado: 22 Dez 2015 09:40
por asimoes
Achei isto no changelog

* src/rtl/tbrowse.prg
! fixed compilation with HB_BRW_STATICMOUSE
! do not cover dummy ivar with HB_COMPAT_C53 macro
* minor simplification

Uma alternativa , estou resolvendo assim no meu código:

oTBrowse:cargo:={|| DiasAtraso("APA01")}

DO CASE
CASE ( nTecla == K_F12 )
Eval(oTBrowse:cargo )

Erro no Tbrowse

Enviado: 22 Dez 2015 09:43
por JoséQuintas
Até testei aqui pra ver se não estava me confundindo.
Consegui gerar esse erro.

Código: Selecionar todos

Error BASE/1004  No exported method: HB_SETKEY
Called from TBROWSE:HB_SETKEY(0)
Called from FAZBROWSE(49)
Called from MAIN(26)
Pra gerar esse erro, fiz isto:

Código: Selecionar todos

      FOR nCont = 1 TO Len( oKeys )
         oBrowse:hb_SetKey( oKeys[ nCont, 1 ], oKeys[ nCont, 2 ] )
      NEXT
Chamei :hb_SetKey() que não existe, ao invés de :SetKey()

Então dê uma olhada em : Called from A040300.PRG->DBDATA(242)

Erro no Tbrowse

Enviado: 22 Dez 2015 09:46
por asimoes
Toledo,

O define HB_COMPAT_C53 é automático ou tem que ser informado na compilação e como?

Erro no Tbrowse

Enviado: 22 Dez 2015 09:47
por JoséQuintas
Não, acho que ele se confundiu como eu no início. Confundi hb_SetKey() com SetKey().
Aquela coisa do Harbour acrescentar HB_ no nome das funções...

Erro no Tbrowse

Enviado: 22 Dez 2015 09:52
por asimoes
Outra informação que eu achei em tbrowse.txt

This functions is Compatible with CA-Cl*pper 5.2. The applykey() and
SetKey() methods are only visible if HB_COMPAT_C53 is defined.

A pergunta é este define está dentro da lib só pode ser vista na compilação do harbour