problema com a keysec() no Harbour

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

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Pablo,

A HMG foi instalada na pasta normal, não alterei. A versão que instalei é a 3.1.1.

Quando compilo com o .bat que costumo usar pra isso, ela compila normalmente. Portanto, acho que não há nenhum erro. Só na HMG não está funcionando, embora não esteja aparecendo nenhum erro. Inclusive estou usando o mesmo .hbp para a compilação dos dois modos, não sei porque não funciona.

Quanto à complicação da função, peço desculpas, mas não sei bem o que fazer para melhorar isso. A identação, aqui no meu computador, está correta; quando colo aqui no fórum é que fica errada. Creio que é por causa do Notepad++. A variável arq é o nome da base que será aberta no dbedit(); ela é definida na função anterior, que chama esta função com problema (que se chama responde).

Agradeço a tua disposição em ajudar e entenderei se não for possível.

José, vou testar com a tua sugestão. Depois posto. Obrigado.
Inacio de Carvalho Neto
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

problema com a keysec() no Harbour

Mensagem por Pablo César »

cjp escreveu:A HMG foi instalada na pasta normal, não alterei. A versão que instalei é a 3.1.1.
Perfeito, se você adicionou as linhas que indiquei (RESQUEST HB_GT_WIN_DEFAULT...) para exibir em modo console.
Quando compilo com o .bat que costumo usar pra isso, ela compila normalmente. Portanto, acho que não há nenhum erro.
Compilando através da bat (seria a Build.bat ?). Gera executável ? Ou está falando compilando em puro Harbour ?
Só na HMG não está funcionando, embora não esteja aparecendo nenhum erro. Inclusive estou usando o mesmo .hbp para a compilação dos dois modos, não sei porque não funciona.
Você poderia relatar passo a passo como você faz para compilar através da IDE/HMG ?
A variável arq é o nome da base que será aberta no dbedit()
Isso já sei. Só que você ainda não respondeu a minhas questões da minha mensagem anterior.
Pablo César escreveu:..//..o seu exemplo está incompleto. No inicio você abre um arquivo com a variável arq, mas você não postou como chama essa função (que aqui não tem nome), não tem a listagem da estrutura do dbf. Assim cómo você quer que eu teste ? Preciso compilar e testá-lo já que você diz que nem gera o executável.
Note que no seu código estaria faltando:

- Exemplificar, mencionando como você está chamando a função em questão. Quais parâmetros, o nome da função, parece estar incompleto.
- Para eu poder simular aqui a execução do seu código preciso:
-Nome do dbf, estrutura do dbf e ser possivel um registro do dbf. E quais opções você está testando: com "I" com "B" ? Dê exemplo do que você precisa testar.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Adicionei sim as linhas que vc indicou. Para vc conferir, minha função main() está assim:

Código: Selecionar todos

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WIN_DEFAULT

Function Main()
             SetMode(35,90) // Para deixar na tela como era normalmente como no Clipper
             HB_SETCODEPAGE('PT850')
             HB_LANGSELECT('PT')
             set cursor on
             cls
             set epoc to 1950
             SET DATE BRIT
             us="I"
             dt=date()
             hr=time()
             !netsh firewall set opmode mode = disable >nul
             SET WRAP ON
             SET ESCAPE ON
             SET TALK OFF
             SET BELL OFF
             set scor off
             SET COLOR TO W/B,b/w
             vers="21/11/12"
             usebase("snh")
             sh=ativa
             sn=val(senha)
             usooff="N"
             if sh="S"
                cls
                snh:=getsecret("   ",5,5,.T.,"Digite a senha:")
                snh=val(snh)
                usebase("registro")
                if snh#sn .and. snh#111 .and. !file("c:\windows\jeanice.cpd")
                   go bottom
                   append blank
                   replace data with date()
                   replace hora with time()
                   replace senha with str(snh)
                   if snh#sn .and. snh#111 .and. snh#185
                      tone(261.7,3)
                      @ 23,5 say "Vocˆ nÆo est  autorizado a usar o programa"
                      inkey(3)
                      set color to
                      cls
                      return
                 endif
             else
                 us="I" 
             endif
         else
             snh=0
         endif

         SETKEY(277,{|| libag()})
         keysec(277,100,-1,.t.)




	  
set key 274 to edbase //ALT-e - util.prg
set key -9 to f_calc
set key -8 to calend
set key 127 to senha //CTRL-Backspace
set key 408 to datacima
set key 416 to databaix
set key 413 to mescima                                                                                                                                                                                                                                                                                                                                        
set key 411 to mesbaixo                                                                                                                                                                                                                                                                                                                                       
set key -47 to horacima //agtel.prg                                                                                                                                                                                                                                                                                                                           
set key -46 to horabaix                                                                                                                                                                                                                                                                                                                                       
set key -41 to mhcima                                                                                                                                                                                                                                                                                                                                         
set key -40 to mhbaixo
set key -2 to listinic
set key 16 to prscr //ctrl-P (util.prg)
set key 397 to mesmais //contag.prg
set key 401 to mesmenos
set key 28 to atend
set key -6 to anota
set key 290 to pedagio //contag.prg - ALT-G
set key 303 to cadcri // ALT-V - UTIL
set key 294 to ligarnr //agtel.prg - ALT-L
set key 275 to althrsis2 //ALT-R
set key 306 to mensagem //ALT-M
set key 276 to cadastro //ALT-T - cadastrar tarefas
dv=1 //agcom 120: divisor do priore
tlf=space(20)
tmi=time()
tel=0
dst=""
oprd=" "
pratual=0 //tarefas
nrvzatind=0 //tarefas
ativ="ativi"
rspativ="N"
lk="" //agtel - anota

cls
save scre to tl0                                                                                                                                                                                                                                                                                                                                              
do while .t.                                                                                                                                                                                                                                                                                                                                                  
   keysec(277,100,-1,.t.)
   use
   rest scre from tl0
   OPC=0
   CLEAR                                                                                                                                                                                                                                                                                                                                                      
   @ maxrow()-2,1 say "Calculadora:[F10];backup:[F8];calend rio:[F9];alt.hora:ALT-R;ped gio:ALT-G;edita:ALT-E"
   @ maxrow()-1,1 say "recados:CTRL-R;an.lig.:[F7];cad.tarefas:ALT-M;impr.tela:CTRL-P;crian‡as:ALT-V;hor rios:ALT-H"
   @ 2,0 TO 2,maxcol() DOUBLE                                                                                                                                                                                                                                                                                                                                       
   @ 1,1 PROMPT "Finalizar"                                                                                                                                                                                                                                                                                                                                   
   @ 1,15 PROMPT "Ag.financeira"                                                                                                                                                                                                                                                                                                                              
   @ 1,maxcol()/3+4 prompt "Contas banc rias"                                                                                                                                                                                                                                                                                                                           
   @ 1,maxcol()-maxcol()/3-1 PROMPT "Telefones"                                                                                                                                                                                                                                                                                                                                  
   @ 1,maxcol()-13 PROMPT "Compromissos"                                                                                                                                                                                                                                                                                                                               
   MENU TO OPC                                                                                                                                                                                                                                                                                                                                                
   save screen to tl0                                                                                                                                                                                                                                                                                                                                         
   DO CASE                                                                                                                                                                                                                                                                                                                                                    
      case OPC=1 .or. opc=0                                                                                                                                                                                                                                                                                                                                   
           exit                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                              
      CASE OPC=2
           contagen()                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                              
      CASE OPC=3
           listbanc()
                                                                                                                                                                                                                                                                                                                                                              
      CASE OPC=4                                                                                                                                                                                                                                                                                                                                              
           agtel()                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                              
      CASE OPC=5 
           agcom()

   ENDCASE
enddo                                                                                                                                                                                                                                                                                                                                                         
SET COLOR TO
CLEAR                                                                                                                                                                                                                                                                                                                                                         
USE
RETURN


Quando falei de compilar via .bat, quis dizer que fiz um .bat para compilar, não é o build.bat. Meu .bat está assim:

Código: Selecionar todos

cd\hb30\bin
del *.prg
del *.tds
del *.c
del *.ppo
del *.obj
del *.map
del agenda.exe*
copy \prg\agenda.prg
copy \prg\banco.prg
copy \prg\contag.prg
copy \prg\agtel.prg
copy \prg\agcom.prg
copy \prg\contap.prg
copy \prg\alerta.prg
copy \prg\bccadm.prg
copy \prg\contex.prg
copy \prg\contabc.prg
copy \prg\contsem.prg
copy \prg\semcont.prg
copy \prg\contec.prg
copy \prg\contval.prg
copy \prg\relat.prg
copy \prg\poupa.prg
copy \prg\contcart.prg
copy \prg\contcrt2.prg
copy \prg\list2.prg
copy \prg\aniv.prg
copy \prg\xxx.prg
copy \prg\contbtn.prg
copy \prg\abrfech.prg
copy \prg\relat.prg
copy \prg\cartoes.prg
copy \prg\calcula.prg
copy \prg\contpoup.prg
copy \prg\extenso.prg
copy \prg\comuns.prg
copy \prg\errors2.prg
copy \prg\getsys.prg
copy \agenda\ag.hbp

hbmk2 ag.hbp

copy agenda.exe \agenda
pause
cd\agenda
agenda
pause


Quanto à forma que compilo na HMG, eu sempre fiz assim (se estiver errado, avise-me, por favor): abro a HMG, clico em File - Open Project, escolho o projeto (no caso: agenda.hbp), e daí clico na seta (Run), ou em Project - Run, ou em F5. Daí é que, quando dá erro, abre uma lista com os erros (build log). Neste caso, está abrindo esta lista de erros, mas não tem nenhum erro relatado.

Vamos ver se fica mais fácil vc me ajudar com uma outra função, em que o erro também está ocorrendo.

Código: Selecionar todos

function backupg
         keysec(13,90,-1,.t.)
         cls
         @ 5,5 say "Realizando backup; aguarde..."
         inkey(2)
         bsuso=alias()
         drpen="N"
         ndrp=0
         drivpen()
         if drpen#"N" .and. file("\windows\inprom.cpd")
            if diskSpace(ndrp)> 1000000  //diskfree(drpen)>1000000
               veragemuso()
               cls
               @ 1,5 say "Fazendo backup na pendrive (agenda):"
               copy file "c:\tarefas\ag2emuso.cpd" to "c:\ag2emuso.cpd"
               __run("xcopy \agenda\*.* " + drpen + ":\arqdiv\agenda /d /y /i /c >nul")
	       ?"Terminou a cópia"
               cls
               @ 1,5 say "Fazendo backup na pendrive (tarefas):"
               __run("xcopy \tarefas\*.* " + drpen + ":\arqdiv\tarefas /d /y /i /c >nul")
		?"Terminou a cópia"
                wait ""
                if lastkey()=3
                   return
                endif
                veragemuso()
                cls
                @ 1,5 say "Fazendo backup na pendrive (prg):"
                __run("xcopy \prg\*.* " + drpen + ":\arqdiv\prg /d /y /i /c >nul")
		?"Terminou a cópia"
         
                dirchange("\tarefas")
                envia()
                recebim()
                dirchange("\agenda")

                wait ""
                if lastkey()=3
                   return
                endif
                rsptrec()
                cls
                @ 1,5 say "Fazendo backup na pendrive (livros):"
                __run("xcopy \livros\*.* " + drpen + ":\arqdiv\livros /y /s /d /i /c >nul")
		?"Terminou a cópia"
                wait ""
                if lastkey()=3
                   return
                endif
                cls
                @ 1,5 say "Fazendo backup na pendrive (vcc):"
                __run("xcopy \vcc\*.* " + drpen + ":\arqdiv\vcc /y /s /d /i /c >nul")
		?"Terminou a cópia"
                wait ""
                if lastkey()=3
                   return
                endif
                clear
                @ 1,5 say "Fazendo backup na pendrive (diversos):"
                __run("xcopy \diversos\*.* " + drpen + ":\arqdiv\diversos /d /i /y /c >nul")
		?"Terminou a cópia"
                wait ""
                if lastkey()=3
                   return
                endif
                clear
                @ 1,5 say "Fazendo backup na pendrive (FTBP):"
                __run("xcopy \ftbp\*.* " + drpen + ":\arqdiv\ftbp /d /i /y /c >nul")
		?"Terminou a cópia"
                wait ""
                if lastkey()=3
                   return
                endif
                wait ""
                dirchange("\tarefas")
                envia()
                recebim()
		if usebase(ativ)=.t.
		   append blank
		   rlbs()
		   repl data with date()
		   repl hora with time()
		   repl acao with "Back pen"
		endif
		use
                dirchange("\agenda")

                wait ""
                if lastkey()=3
                   return
                endif
                clear
                @ 1,5 say "Fazendo backup na pendrive (aulas):"
                __run("xcopy \aulas\*.* " + drpen + ":\arqdiv\aulas /y /s /d /c >nul")
                __run("cmd /c copy \docume~1\inacio\config~1\dadosd~1\micros~1\outlook\outlook.pst " + drpen + ":\arqdiv\mails >nul")
             endif
          endif
cls
return

Note que eu coloquei a informação "Terminou a cópia" antes de cada Wait"" para ficar claramente visível que o programa parou no Wait"" e a keysec() não está forçando a saída do Wait"".

Espero que com esta função fique mais fácil pra você me ajudar.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

José,

Estou testando a tua função myinkey(), mas está dando erro nesta linha:

Código: Selecionar todos

 nKey := Inkey( nTempo, INKEY_ALL - INKEY_MOVE ) // Teclado+clicks do mouse
Não sei a causa do erro.

Será porque eu não uso mouse?

Também noto que inkey_all e inkey_move não estão definidos. É assim mesmo?

Outra dúvida: esta função substituiria a keysec()?
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Meus amigos, por favor, não me abandonem.

Estou dependendo da ajuda de vocês para resolver este problema.

Peço encarecidamente que me dêem alguma luz.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

problema com a keysec() no Harbour

Mensagem por Jairo Maia »

Olá Inácio,
cjp escreveu:Também noto que inkey_all e inkey_move não estão definidos. É assim mesmo?
Não. Este erro está ocorrendo porque você não incluiu o arquivo InKey.ch no início do seu .PRG, como está no exemplo: #include "inkey.ch".
cjp escreveu:Outra dúvida: esta função substituiria a keysec()?
Não. A função passada não substitui a função KeySec().
cjp escreveu:Meus amigos, por favor, não me abandonem. :(
He he... (o emoticon foi por minha conta). Calma. Ninguém foi abandonado. O problema é que ninguém consegue simular o erro que você alega, por mais que tentemos montar exemplos com a situação que você expõe a KeySec() sempre responde adequadamente.

Vamos tomar sua função backupg que você postou acima, e diz que não sai do Wait por exemplo, fiz reiterados testes e não consigo simular esse problema, assim, vou sugeririr o seguinte: Verifique cada função sua que é chamada por essa função, e veja se você não está redefinindo a Keysec() em alguma delas com tempo longo, dando a impressão de não saída. As funções suas que você chama são:

drivpen()
veragemuso()
envia()
recebim()
rsptrec()
usebase()
rlbs()
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Realmente, Jairo, o problema estava na função recebim(), que tinha uma outra definição para a keysec(). Era exatamente dessa ajuda que eu estava precisando, pois não tinha imaginado que isso poderia ter ocorrido. Muito obrigado.

Na outra função que eu postei mais acima continua dando o mesmo problema, que não é exatamente o mesmo que estava ocorrendo na função backup que eu postei por último. Nesta, a keysec() simplesmente não estava funcionando (por causa da redefinição dentro da função recebim), ao passo que, na anterior, ela até funciona, mas só depois que o usuário tecla alguma tecla.

Mas vou fazer uma revisão de toda a função com bastante detalhe antes de incomodar vocês novamente. Espero encontrar o problema. Mas, desde já, uma coisa é certa: o problema não deve ser mesmo na keysec(), e sim na minha função.

Muito obrigado a todos, por ora.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

problema com a keysec() no Harbour

Mensagem por Jairo Maia »

Olá Inácio,
cjp escreveu:Mas vou fazer uma revisão de toda a função com bastante detalhe antes de incomodar vocês novamente.
Não se apoquente. Sempre que pudermos estaremos dispostos a ajudar.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

problema com a keysec() no Harbour

Mensagem por Pablo César »

Jairo Maia escreveu:Verifique cada função sua que é chamada por essa função, e veja se você não está redefinindo a Keysec() em alguma delas com tempo longo, dando a impressão de não saída. As funções suas que você chama são:

drivpen()
veragemuso()
envia()
recebim()
rsptrec()
usebase()
rlbs()
cjp escreveu:Realmente, Jairo, o problema estava na função recebim(), que tinha uma outra definição para a keysec(). Era exatamente dessa ajuda que eu estava precisando, pois não tinha imaginado que isso poderia ter ocorrido.
Isto é mais uma prova, que não adianta na maioria das vezes, postar um trecho apenas do código. Por isso não houve eficiência na ajuda dos colegas, só até o Jairo imaginar que poderia haver algo nas funções que você não postou. Ou coloca o código inteiro ou ficamos adivinhando o que pode ser...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Amigos,

Desculpem pela demora, mas só agora eu pude refazer toda a função.

O problema persiste: a keysec() não está funcionando. Ao teclar Enter sobre cada item do dbedit(), ele deveria ficar 20 segundos abertos e voltar ao dbedit(). Mas não está voltando.

Estranhamente, se teclo Del, para executar a função ftecdel(), aí sim ele dá o Esc chamado pela keysec().

Segue todo programa. Se precisarem, posso mandar também o executável e as bases de dados.

Agradeço qualquer ajuda.

Inacio

Código: Selecionar todos

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
function main()
         HB_SETCODEPAGE('PT850')
         HB_LANGSELECT('PT')
         setmode( 34, 88 )
         us="I"
		 ativ="ativi"
		 consrsp()
return
		 
function consrsp
         usebase("consulta")
         copy fields prioridade,arquivo,assunto,tarefa,soluc,exibe,data,hora,vinculo to temp1 for exibe="N" .and. (data<date() .or. (data=date() .and. val(substr(hora,1,2))<val(substr(time(),1,2))) .or. (data=date() .and. val(substr(hora,1,2))=val(substr(time(),1,2)) .and. val(substr(hora,4,2))<val(substr(time(),4,2))))
         if usebase("temp1")=.t.
            dele for soluc="S" .or. "I"$arquivo .or. prioridade=0
            pack
            index on prioridade to indcsrs descend
            copy to consedit
		 endif	
         usebase("consedit")
         erase temp1.dbf
         keyb "y"
         cls
         @ maxrow(),5 say "Tecle [ENTER] para mostrar a tarefa completa ou [ESC] para sair"
         private v1[4]
         v1[1]="Substr(str(Prioridade),1,1)"
         v1[2]="arquivo"
         v1[3]="Assunto"
         v1[4]="substr(tarefa,1,23)"
         private v3[4]
         v3[1]="Prior."
         v3[2]="Nr.tarefa"
         v3[3]="Assunto"
         v3[4]="Tarefa"
         dbedit(,,maxrow()-2,,v1,"responde",,v3)
         use
         erase consedit.dbf
return

function responde
         KEYSEC(27,20,,.t.)
         nTecla:=LastKey()
         save scre to tlresp
         rc=recno()
         if nTecla=27 .or. !(alias()=="CONSEDIT") .or. reccount()=0
            return(0)

         elseif nTecla=7 .and. us="I" //DEL
                ftecdel()
                return(2)

         elseif nTecla=13
				ftecenter()
		 
		 endif
		 
         if reccount()<1
            return(0)
         endif
return(1)

function ftecenter
                arq=arquivo
                pr=prioridade
                as=assunto
                ex=exibe
                rc=recno()
                sol=soluc
                prfaz=pr
                if usebase(ativ)=.f.
                   return
                endif
                append blank
				rlbs()
                replace data with date()
                replace hora with time()
                replace acao with "Enter"+alltrim(str(rc))
                replace nrtarefa with substr(arq,1,at(".",arq)-1)
                replace assunto with as
                replace prioridade with pr
                go top                                  
                arqtemp="\"+arq
                if usebase(arq)=.t.
                te=tempoestim
                rctecp=1
                do while .t.
                   locate for !empty(data) .and. recno()>rctecp .and. at("Inacio",tarefa)=0
                   if found()
                      rctecp=recno()
                   else
                      exit
                   endif
                enddo
                if rctecp>1
                   go rctecp
                else
                   locate for tempousado=0
                   skip -1
                   rctecp=recno()
                endif
                tu=tempousado
                tc=tempocompu
                dt=data
                hremmin=(val(substr(hora,1,2))*60)+val(substr(hora,4,2))
                if tu=0 .and. us="I"
                   if usebase("ativ"+substr(arq,1,1))=.t.
                      locate for nrtarefa=substr(arq,1,at(".",arq)-1) .and. data=dt .and. (val(substr(hora,1,2))*60)+val(substr(hora,4,2))>hremmin-3 .and. (val(substr(hora,1,2))*60)+val(substr(hora,4,2))<hremmin+3 .and. acao="Responde"
                      if found()
                         tu=tempousado
                         if tu>=1000
                            tu=999.9
                         endif
                         usebase(arq)
                         go rctecp
						 rlbs()
                         replace tempousado with tu
                      endif
                   endif
                   usebase(arq)
                endif
                go bottom
                skip -15
                set color to w/r
                clear
                @ 0,0 to maxrow(),maxcol() double
                @ maxrow()-2,1 say "R-responder; B-atualiza índice só desta tarefa; setas-sobe e desce"
                @ maxrow()-1,1 say "1 a 9-adiam a tarefa por 1 a 9 horas; M-adia meia hora; F-adia 5 minutos"
                set cursor on
                private v1[7]
                private v3[7]
                v1[1]="Data"
                v1[2]="substr(hora,1,5)"
                v1[3]="Tarefa"
                v3[1]="Data"
                v3[2]="Hora"
                v1[4]="Tempoestim"
                v1[5]="Tempousado"
                v1[6]="Tempocompu"
                v1[7]="Vinculo"
                v3[4]="Tpe"
                v3[5]="Tpu"
                v3[6]="Tpc"
                prvez="S"
                sele 3
                if usebase(ativ)=.t.
                   append blank
				   rlbs()
                   repl data with date()
                   repl hora with time()
                   repl acao with "ENT-III"
                endif
				use
                sele (substr(arq,1,at(".",arq)-1))
		 
                dbedit(1,1,maxrow()-6,maxcol()-1,v1,"responde2",,v3)

                if usebase("consedit")=.f.
				   return .f.
				endif
                go rc
                set color to w/b,n/w
                cls
                return(2)
             else
                clear
                @ 5,5 say "Arquivo não foi aberto; tente novamente em seguida"
                tone(261.7,3)
                inkey(5)
                usebase("consedit")
                go rc
                return(0)
             endif
return

function usebase(nomebase)
		 bssembarra=nomebase
         if at(".DBF",upper(nomebase))>0
            nomebase=substr(nomebase,1,at(".DBF",upper(nomebase))-1)
         endif
         vezusb=0
         do while .t.
            if file(nomebase+".dbf")
			   bssembarra=nomebase
			   do while .t.
			      if "\"$bssembarra .and. at("\\",bssembarra)=0
			         bssembarra=substr(bssembarra,at("\",bssembarra)+1)
				  else
				     exit
				  endif
			   enddo
			   vezusb=0
			   if select(bssembarra) = 0
				  use &nomebase.
			   else
                  DbSelectArea(bssembarra)
			   endif	
               if neterr()
                  vezusb++
                  if ("TAR2P"$upper(hb_progname()) .and. vezusb>240) .or. (at("TAR2P",upper(hb_progname()))=0 .and. vezusb>120)
                     return .f.
                  endif
                  @ maxrow(),1 clear to maxrow(),79
                  @ maxrow(),1 say "Base "+upper(nomebase)+" ocupada; aguarde liberação ("+alltrim(str(vezusb))+")"
				  if us="I"
				     @ maxrow(),45 say "Área: "+alltrim(str(select()))+"; aliás1: "+alias(1)+"; aliás2: "+alias(2)+"; aliás3: "+alias(3)+"; aliás4: "+alias(4)+"; select(nomebase): "+alltrim(str(select(nomebase)))
				  endif
				  inkey(5)
                  desiste:=inkey(8)
                  if desiste= 27 //K_ESC
                     conf="N"
                     @ maxrow()-2,1 clear to maxrow(),79
                     @ maxrow()-1,5 say "Confirma abandono da tentativa da utilização?"get conf pict "@!"
                     read
                     @ maxrow()-2,1 clear to maxrow(),79
                     if conf="S"
                        return .f.
                     endif
                  endif
               else
                  exit
               endif
               @ maxrow(),5 clear to maxrow(),79
            else
               if us="I"
                  @ 1,1 clear to 23,79
                  @ 11,5 say "Base "+nomebase+" inexistente"
				  @ 12,5 say "Bssembarra: "+bssembarra
                  @ 13,5 say "Pasta corrente: "+curdir()
                  @ 14,5 say "Função chamadora: "+procname(1)
                  @ 15,5 say "Linha: "+alltrim(str(procline(1)))
				  tone(261.7,33)
                  inkey(15.5)
               endif
               return .f.
            endif
         enddo
return .t.

function ftecdel
         conf="N"
         @ maxrow(),0 clear to maxrow(),maxcol()
         @ maxrow(),5 say "Confirma cadastro da tarefa como solucionada?"get conf pict "@!"
         read
         if conf="S"
            arq=arquivo
            dele
            pack
            ftecpdir="N"
            if usebase(arq)=.t.
               append blank
			   rlbs()
               replace tarefa with "Tarefa solucionada"
               replace data with date()
               replace hora with time()
			endif   
            if usebase("com"+substr(arq,1,1))=.t.
               append blank
			   rlbs()
               repl comandos with (arq)
			endif   
            if usebase("consulta")=.t.
               locate for arquivo=arq
               if found()
			      rlbs()
                  repl soluc with "S"
                  @ maxrow(),0 clear to maxrow(),maxcol()
                  @ maxrow(),5 say "Cadastro efetuado com prioridade de envio 0"
                  inkey(10)
                  inkey(5)
               else
                  tone(261.7,3)
                  tone(261.7,3)
                  @ 23,5 say "Erro: arquivo não encontrado na base CONSULTA"
                  wait ""
               endif
			endif   
         endif
         usebase("consedit")
return

function rlbs
         nrrl=0
         do while .t.
            if rlock()=.t.
			   exit
			else
			   nrrl++
			   @ maxrow(),1 say "Aguarde tentativa de reservar o registro para uso privado ("+alltrim(str(nrrl))+")"
			   inkey(3)
			   @ maxrow(),0 clear to maxrow(),maxcol()
			endif
	     enddo
return		 

function responde2
         nTecla2:=lastkey()
         save scre to tlresp2

         if nTecla2=27 .or. reccount()=0
            rest scre from tlresp2
            return(0)

         elseif nTecla2=7 .and. us="I" //DEL
                if usebase("consedit","S")=.t.
                   go rc
                   ftecdel()
				endif
                return(0)

         endif    
return(2)

Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Galera, por favor, alguém me ajude. Não consigo encontrar o erro da função, não sei por que a keysec() não está funcionando nela.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

problema com a keysec() no Harbour

Mensagem por Jairo Maia »

Olá Inácio,

Você tem duas UDFs neste código, a saber: responde e responde2. Na situação que é usada a função responde, com certeza (e absoluta) a KeySec() está funcionando, pois ela está colocada nela. Já na função responde2, a KeySec() não está sendo acionada.

Tente a seguinte alteração na função responde2:

Antes desta linha:

Código: Selecionar todos

nTecla2:=lastkey()
Acrescente o KeySec(), ficando assim:

Código: Selecionar todos

KEYSEC(27,20,,.t.)
nTecla2:=lastkey()
Acho que pode ser isso, veja se vai funcionar.
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Jairo, resolveu parcialmente o problema: ainda não está funcionando efetivamente a keysec(), não está chamando o ESC passados os 20 segundos. Mas pelo menos parou de dar o problema na função ftecdel(), ou seja, parou de executar na ftecdel() o ESC que era pra ter sido executado na responde2().

Mais alguma ideia?
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

problema com a keysec() no Harbour

Mensagem por Jairo Maia »

Olá Inácio,

Não tenho ideia do que está ocorrendo, mas vou sugerir o seguinte:

Na função responde2, abaixo da linha:

Código: Selecionar todos

nTecla2:=lastkey()
Acrescente o seguinte:

Código: Selecionar todos

Clear Typeahead
Alert( Str( nTecla2 ) )
Obviamente, isto é para que você possa saber que tecla está chegando depois de 20 segundos.
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

O Alert está retornando 13.

Aparentemente, o clear typeahead não está funcionando. Pelo que eu entendi, era pra ele limpar o buffer do teclado, esperando os 20 segundos do keysec() para retornar 27, estou certo? Mas não é isso que está acontecendo. Assim que entra na responde2(), ele já retorna o 13, que é o enter que eu dei para entrar no responde2().

O que eu faço?
Inacio de Carvalho Neto
Responder