Tenho uma função para visualizar relatórios na tela e que ao digitar 'P' faz uma procura da PALAVRA digitada no relatório, parando em cima desta quando encontrada. Isso funcionava uma beleza na versão 99.50 do xharbour. Mas quando atualizei pra vs 99.60 a função não funciona mais.
A primeira coisa estranha que notei é que precisei colocar EXCLUSIVE na linha --->>>> use &nomefil SHARED. Na vs anterior eu utilizava SHARED e funcionava... segue a função:
Código: Selecionar todos
********************************************************
** FUNCAO PARA MOSTRAR RELATORIO NA TELA (21.06.2004) **
********************************************************
Proce lertexto
Para arquivo
#INCLUDE "INKEY.CH"
#INCLUDE "SETCURS.CH"
local1:= {}
procura1 := SPACE(45)
oCONTA = 0
declare acamp:=[1]
cor_ant = setcolor() // Salva cor antiga
dbf_veio= select() // Salva arquivo que estava selecionado
aadd(Local1, {"TELA01", "C", 79, 0})
contafil:=1
nomefil:=space(8)
SET DEFAULT TO C:\WINDOWS
IF FILE('tela0001.dbf')
nomefil='tela'+strzero(contafil,4)
DO WHILE FILE(nomefil+'.dbf')
contafil+=1
nomefil='tela'+strzero(contafil,4)+'.dbf'
ENDDO
ELSE
nomefil:='tela0001.dbf'
ENDIF
dbcreate('&nomefil', Local1)
sele 99 // ou comando de rede
use &nomefil SHARED
append from C:\WINDOWS\&arquivo sdf //nomecompl_arq sdf
goto top
qtde_reg=lastrec()
set cursor off
// /-------------> Cor do TBrowse
// / /---------> Cor da barra em destaque
// / / /---> Cor da barra luminosa
set color to "w/N,n/w,,,g+/b"
oTab := TBrowseDB(00,00,23,79)
oTab:colsep := "" // CHR(219)+" "
OTAB:HEADSEP:= 'Ä' // CHR(205)+CHR(203)+CHR(205)
OTAB:COLSEP := '' // CHR(032)+CHR(186)+CHR(032)
OTAB:FOOTSEP:= 'Ä' // CHR(205)+CHR(202)+CHR(205)
for i = 1 to fcount()
OTAB:ADDCOLUMN(TBCOLUMNNEW("", FIELDWBLOCK(FIELDNAME(i),SELE() )))
next
lin_br=30
Do while .T.
nRow := ROW()
nCol := COL()
do while !oTab:Stabilize() ; enddo
oTAB:hilite()
set color to "w/N,n/w,,,g+/b"
dispbox(3,79,23,79,'°')
ult_pos=3+(((recno()*100)/qtde_reg)/(100/(21-1)))
if recno()=1 ; ult_pos=3
endif
@ ult_pos,79 say chr(219) Color('&vCOR_MOS') //colo 'bg/b'
setpos( nRow, nCol )
nKey := inkey()
IF oTAB:stable
setpos( nRow, nCol )
nKey := Inkey(0)
endif
if nKey == K_F1
elseif nKey == K_F2
elseif nKey == K_F3
elseif nKey == K_F4
elseif nKey == K_F5 ; R_Calc()
elseif nKey == K_F6 ; CALEND()
elseif nKey == K_F7
elseif nKey == K_UP ; oTab:UP()
elseif nKey == K_DOWN ; oTab:DOWN()
elseif nKey == K_LEFT ; oTab:LEFT()
elseif nKey == K_CTRL_LEFT ; oTab:PANLEFT()
elseif nKey == K_RIGHT ; oTab:RIGHT()
elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
elseif nKey == K_PGUP ; oTab:PAGEUP()
elseif nKey == K_CTRL_PGUP ; oTab:GOTOP()
elseif nKey == K_PGDN ; oTab:PAGEDOWN()
elseif nKey == K_CTRL_PGDN ; oTab:GOBOTTOM()
elseif nKey == K_HOME ; oTab:HOME()
elseif nKey == K_CTRL_HOME ; oTab:PANHOME()
elseif nKey == K_END ; oTab:END()
elseif nKey == K_CTRL_END ; oTab:PANEND()
elseif nKey == 16 ; IMPRIME()
elseif nKey == 80 ; PROCURA()
elseif nKey == K_ESC ; EXIT
endif
oTab:colorRect({1,1,lin_br,oTab:freeze},{2,5})
enddo
arq=dbf()
use
arq_dbf=alltrim(arq)+'.DBF'
erase C:\WINDOWS\&arq_dbf // apaga o arquivo dbf que mostra na tela a impressao.
**** erase &arquivo // apaga o arquivo prn que mostra na tela a impressao.
sele &dbf_veio // seleciona novamente o arquivo que estava aberto
set color to '&cor_ant.'
SET DEFAULT TO
RETURN
FUNCTION PROCURA
oCONTA = oCONTA + 1
@ 24, 00 SAY " "
@ 24, 02 SAY "Digite a palavra para Procura -> "
@ 24, 35 GET PROCURA1 PICT "@!"
READ
IF LASTKEY() = 27
RETURN .T.
ENDIF
IF oCONTA = 1
LOCATE FOR ALLTRIM(PROCURA1) $ TELA01
ELSE
CONTINUE
ENDIF
IF EOF()
MSG("PALAVRA NAO ENCONTRADA")
RETURN .F.
ELSE
KEYBOARD CHR(13)
ENDIF
RETURN
Janio
