problema com a keysec() no Harbour
Moderador: Moderadores
problema com a keysec() no Harbour
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.
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
problema com a keysec() no Harbour
Perfeito, se você adicionou as linhas que indiquei (RESQUEST HB_GT_WIN_DEFAULT...) para exibir em modo console.cjp escreveu:A HMG foi instalada na pasta normal, não alterei. A versão que instalei é a 3.1.1.
Compilando através da bat (seria a Build.bat ?). Gera executável ? Ou está falando compilando em puro Harbour ?Quando compilo com o .bat que costumo usar pra isso, ela compila normalmente. Portanto, acho que não há nenhum erro.
Você poderia relatar passo a passo como você faz para compilar através da IDE/HMG ?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.
Isso já sei. Só que você ainda não respondeu a minhas questões da minha mensagem anterior.A variável arq é o nome da base que será aberta no dbedit()
Note que no seu código estaria faltando: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.
- 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.
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.
problema com a keysec() no Harbour
Adicionei sim as linhas que vc indicou. Para vc conferir, minha função main() está assim:
Quando falei de compilar via .bat, quis dizer que fiz um .bat para compilar, não é o build.bat. Meu .bat está assim:
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.
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.
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
problema com a keysec() no Harbour
José,
Estou testando a tua função myinkey(), mas está dando erro nesta linha:
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()?
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 mouseSerá 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
problema com a keysec() no Harbour
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.
Estou dependendo da ajuda de vocês para resolver este problema.
Peço encarecidamente que me dêem alguma luz.
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
problema com a keysec() no Harbour
Olá Inácio,
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()
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:Também noto que inkey_all e inkey_move não estão definidos. É assim mesmo?
Não. A função passada não substitui a função KeySec().cjp escreveu:Outra dúvida: esta função substituiria a keysec()?
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.cjp escreveu:Meus amigos, por favor, não me abandonem.![]()
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)
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)
problema com a keysec() no Harbour
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.
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
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
problema com a keysec() no Harbour
Olá Inácio,
Não se apoquente. Sempre que pudermos estaremos dispostos a ajudar.cjp escreveu:Mas vou fazer uma revisão de toda a função com bastante detalhe antes de incomodar vocês novamente.
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)
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)
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
problema com a keysec() no Harbour
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...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.
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.
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.
problema com a keysec() no Harbour
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
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
problema com a keysec() no Harbour
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
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
problema com a keysec() no Harbour
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:
Acrescente o KeySec(), ficando assim:
Acho que pode ser isso, veja se vai funcionar.
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()Código: Selecionar todos
KEYSEC(27,20,,.t.)
nTecla2:=lastkey()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)
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)
problema com a keysec() no Harbour
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?
Mais alguma ideia?
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
problema com a keysec() no Harbour
Olá Inácio,
Não tenho ideia do que está ocorrendo, mas vou sugerir o seguinte:
Na função responde2, abaixo da linha:
Acrescente o seguinte:
Obviamente, isto é para que você possa saber que tecla está chegando depois de 20 segundos.
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()Código: Selecionar todos
Clear Typeahead
Alert( Str( nTecla2 ) )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)
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)
problema com a keysec() no Harbour
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?
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
