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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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