Erro no Tbrowse

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro no Tbrowse

Mensagem 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
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro no Tbrowse

Mensagem 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()
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
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Erro no Tbrowse

Mensagem 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 )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro no Tbrowse

Mensagem 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.
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Erro no Tbrowse

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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 )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro no Tbrowse

Mensagem 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)
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem por asimoes »

Toledo,

O define HB_COMPAT_C53 é automático ou tem que ser informado na compilação e como?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro no Tbrowse

Mensagem 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...
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Tbrowse

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder