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,
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:
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:
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