problema com a keysec() no Harbour

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

Moderador: Moderadores

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,

Acho que o problema neste caso está na sua UDF (User Defined Function) RESPONDE2(). Veja que a KeySec após o tempo coloca a tecla 27, porém, na condicional que você trata a tecla 27 (ESC) na UDF, ele altera a configuração do KeySec e retorna ao MemoEdit em modo de edição, ou seja, retorna o modo zero, que é edição, veja:
if nTecla2=27 .or. reccount()=0
keysec(277,125,-1,.t.)
rest scre from tlresp2
keyb "y"
return(0)
Se a idéia e sair do MemoEdit, tente alterar esse Return(0) por Return(23). Veja se funciona.
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, a intenção é sair da função de usuário Responde2. Eu sempre usei return(0) pra isso. Tá errado? Testei agora com Return(23) e não funcionou, nem manualmente.
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:Eu sempre usei return(0) pra isso. Tá errado?
Não. Está absolutamente certo. Peço, desculpas, pois me confundi. Analisei seu código pensando no MemoEdit(), e você usa o DbEdit(), que nada tem a ver com MemoEdit().

Os retornos de uma UDF do DbEdit realmente são:
0 - Encerra o DbEdit
1 - permanece no DbEdit
2 - faz o refresh das colunas
Da minha parte, não tenho como lhe ajudar, pois uso o TBrowse, e não tenho nenhuma experiência com o DbEdit. Espero que algum colega possa lhe dar uma luz.
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 »

Wow, acho que eu acabei induzindo do dbedit para memoedit. Eu tinha postado um exemplo em memoedit e o Inácio não disse que deveria ser com dbedit e não com memoedit...

Tabela 5-10: Valores de Retorno da Funçao de Usuário de DBEDIT()
&nbspValor&nbsp&nbspDbedit.ch&nbsp&nbspDescriçao&nbsp
&nbsp0&nbsp&nbspDE_ABORT&nbsp&nbspAborta DBEDIT()&nbsp
&nbsp1&nbsp&nbspDE_CONT&nbsp&nbspContinua DBEDIT()&nbsp
&nbsp2&nbsp&nbspDE_REFRESH&nbsp&nbspForça reler e reescrever a tela e continuar após&nbsp
&nbsp&nbsp&nbsp&nbsp&nbspreescrever, processa teclas e vai para iantiva&nbsp
Vou fazer um teste com dbedit no Harbour.
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.
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 »

Também não tem nada de errado com o keysec e dbedit !

Inácio, faça um teste, entenda o comportamento do exemplo a seguir:

Código: Selecionar todos

REQUEST HB_GT_WIN_DEFAULT

Function Main()
Local acColumns:={"Nome","Nasceu"}

SetMode(25,80)
SetColor("b/w")

If !File("Clientes.dbf")
   CAMPOS:={{"NOME"   ,"C",040,000},;
            {"NASCEU" ,"D",008,000} }
   DBCREATE("Clientes.dbf",CAMPOS)
   USE CLIENTES
   APPEND BLANK
   REPLACE NOME WITH "INACIO"
   APPEND BLANK
   REPLACE NOME WITH "JAIRO"
   APPEND BLANK
   REPLACE NOME WITH "PABLO"
ELSE   
   USE CLIENTES
Endif
GOTO TOP

keysec(27,15,-1,.t.)
@ 24,00 say "Pressione F10 para sair"
cTexto:=DBEDIT(05,10,18,60,acColumns,"responde2")
Cls
LIST nome  // soh para mostrar algo em tela apos saida
INKEY(0)
Return Nil

function responde2
if LastKey()=27
   alert("tecla ESC acionada !")
endif
if LastKey()=-9
   return 0
endif
return 1
Eu também não uso o dbedit. Mas este exemplo simples prova que não há nada de errado.
cjp escreveu:Infelizmente ainda não aprendi o suficiente para usá-la.
Não há muito que aprender. É só saber utilizar a IDE que é extremamente simples de aprender. Se pegar esse código que acabei de passar, abrir um novo projeto e compilar, você vai ver que é super simples !
Não tive tempo para estudá-la o suficiente.
Quanto a isso, não podemos fazer nada por você !
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 »

Colegas,

Testei exaustivamente.

Realmente o problema não é na keysec(), tanto que ela funciona corretamente em outras funções minhas, assim como funcionou corretamente nos dois exemplos que vcs me mandaram.

O problema só pode estar na minha função. É só nesta parte do meu programa que está dando o problema.

A grande questão é que eu não estou achando nada de errado nesta função para impedir o funcionamento da keysec(). Já olhei e re-olhei toda a função várias vezes, não consigo achar nada que esteja causando esse problema.

Será que alguém me ajuda com isso?

Quanto à IDE, terei que reinstalar, porque ela foi instalada num HD meu que pifou. Tentei buscar no site, mas não achei o tópico onde comecei a aprender a mexer com ela, para ver de onde baixar. Alguém poderia me indicar de onde baixo a IDE?
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:Alguém poderia me indicar de onde baixo a IDE?
Quando eu mencionei sobre a IDE (em mensagens anteriores) referia-me a IDE da HMG. Esta você encontra na seção Minigui e nesta mensagem você econtra a instalação da ultima versão clique aqui da IDE.
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 »

Já instalei. Mas não conseguir usar ela em modo console. Como faço?
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 »

Na versão 3.0.35 tem uma opção na própria IDE para habilitar e desabilitar em modo console. Mas nas versão posteriores você precisa incluir no módulo main das primeiras linhas do seu prg:

Código: Selecionar todos

// #include <hmg.ch> (pode desabilitar este include)

REQUEST HB_GT_WIN_DEFAULT

Function Main()
SetMode(25,80)  // Para deixar na tela como era normalmente como no Clipper
Eu explico isto na minha edições sobre HMG na seção Minigui.
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 »

Deu certo, muito obrigado.

Agora tentei rodar a minha função na IDE. Eu clicar em Run, ele abre a tela Build Log, mas não tem na Error List. Ou seja, aparentemente, não tem nenhum erro, e mesmo assim ele não roda.

Será que estou fazendo algo errado? Ou precisa fazer mais alguma alteração no programa para rodar na IDE?

Mais uma dúvida: vc acha que usando a IDE vai fazer alguma diferença na questão do problema do meu programa com a keysec()?
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:Agora tentei rodar a minha função na IDE. Eu clicar em Run, ele abre a tela Build Log, mas não tem na Error List. Ou seja, aparentemente, não tem nenhum erro, e mesmo assim ele não roda.
Caro Inácio, a minha sugestão de utilizar a IDE, foi apenas para facilitar as compilações. Uma vez que é gerado o executável, pronto ! A sua aplicação já estaria pronta para usar. Você diz que não roda, você executou a sua aplicação CONSOLE desde a linha de comando (no prompt do DOS) e ver se ocorre algo do seu programa ? Você adicionou as linhas que indiquei ?
Será que estou fazendo algo errado?
Você notou que gerou sem erros (não apareceu qualquer janela indicado erro algum) ? Só teria que dar uma olhada no seu código fontes. Eu não posso afirmar nada sem ver o seu código.
Ou precisa fazer mais alguma alteração no programa para rodar na IDE?
Como eu disse, a IDE serve para você compilar e também para desenvolver programas GUI (o que não é no seu caso agora, pois a sua aplicação é em modo CONSOLE). O que parece, é que o seu código (se for aquele que você postou uma vez) possui uma "salada" de coisas. Eu tinha aconselhado a você fazer aplicativos separados, funções separadas. Sabe lá se o seu problema é uma só coisa, podem ser vários problemas. Muito importante você postar o seu código. De preferência neste seu caso, postar o código completo.
Mais uma dúvida: vc acha que usando a IDE vai fazer alguma diferença na questão do problema do meu programa com a keysec()?
Eu falei a mensagens atrás, que você deixe de sofrer (nas compilações) e utilize a HMG para compilar. Você ainda não entendeu a minha indicação. Você disse que não tinha tempo para aprender a usá-la e eu disse que é extremamente fácil. Inclusive se você não quiser utilizar a IDE você pode compilar suas aplicações na linha de comando (prompt do DOS) através do Build.bat (que é o mesmo que a IDE utiliza para compilar). Ainda pode compilar em puro Harbour, mas aí você vai voltar a ter dificuldades para definir quais bibliotecas você precisa usar e dar os parâmetros que o hbmk2.exe requer. Então sigo te aconselhando você usar a IDE ou Build.bat, mas de preferência use a IDE. Está ai a sua vantagem, encontrar uma ferramentas que te auxilie na compilação, assim você tem um problema a menos e você preocupar-se com a QUALIDADE do seu código fonte. Ok ? Entendeu ?
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 »

Pablo,

Entendi perfeitamente o que vc disse com relação à IDE e estou tentando passar a usá-la. Só que não estou conseguindo neste particular (já consegui em outros programas, inclusive em modo console com o exemplo que vc mandou, e até no modo gráfico num teste que fiz há certo tempo; mas agora não está funcionando. Não está nem mesmo gerando o .exe. Não aparece nenhum erro no Build Log.

Quanto à keysec(), como eu havia dito, creio que o problema deve ser mesmo no meu programa, pois em outros pontos e também no exemplo que vc postou funciona corretamente.

A função está inteiramente postada acima. Concordo contigo que ela não é muito clara. Mas se vc puder tentar me ajudar a entender onde está o problema, eu te agradeço imensamente.
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:mas agora não está funcionando. Não está nem mesmo gerando o .exe. Não aparece nenhum erro no Build Log.
..//..
A função está inteiramente postada acima. Concordo contigo que ela não é muito clara. Mas se vc puder tentar me ajudar a entender onde está o problema, eu te agradeço imensamente.
Olha, eu trabalho diferente. Aliás cada um trabalha de forma diferente. Eu gosto de testar minhas indicações, não faço nada sem testar. No seu código, desculpe mas quero te ofender, só posso dizer que é extremamente difícil entende-lo. Eu mudei nesse seu código esse if, elseif... para Do Case e toma muito trabalho ajeita a sua identação. Fora que 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. Senão gera é porque há um erro e se você instalou o HMG da forma normal (sem trocar path, isto é deixar onde o programa de instalação recomenda) tudo deve funcionar perfeitamente. Desculpe, não querendo pre-julgar ou menosprezar teus conhecimentos, mas espero que você não tenha instalado no Meus Documentos ou outra área restrita do Windows (isto não precisa me responder). Apenas estou citando, porque teve colega aqui no fórum que fez algo assim. Então, quando você mandar as minhas exigências, eu poderei te ajudar sem problemas, mas gosto de testar o que eu estou indicando.
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.
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 »

Outra coisa...
cjp escreveu:Já instalei. Mas não conseguir usar ela em modo console. Como faço?
Qual é a versão que você instalou ?
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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

problema com a keysec() no Harbour

Mensagem por JoséQuintas »

Desde o tempo que usava Clipper, pra ter mouse passei a usar MyInkey() ao invés de Inkey()
Facilita em alguns casos pra mudar todo o sistema de uma vez.
Aqui uso pra funcionar o mouse wheel (rodinha do mouse), colar do windows (ctrl-V), e definir tempo para o usuário responder ou preencher GETs.
Antigamente a função usava DO WHILE e fazia uso de OL_Yield() pra liberar 100% de CPU, mas deixei de ser exigente.

Código: Selecionar todos

nKey := MyInkey( 50 )
IF nKey == 0 
   // usuario nao teclou nada
ENDIF

#include "inkey.ch"
#include "hbgtinfo.ch"
#include "set.ch"

FUNCTION MyInkey( nTempo,lHotKey)
   LOCAL nKey, bAcao
   lHotKey  := Iif( lHotKey==NIL, .t., lHotKey)
   nKey := Inkey( nTempo, INKEY_ALL - INKEY_MOVE ) // Teclado+clicks do mouse
   // adicionais
   IF ( bAcao := SetKey(nKey) ) != NIL .AND. lHotKey
      Eval( bAcao, ProcName(), ProcLine(), ReadVar() )
      nKey := 888
   ENDIF
   RETURN nKey
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Responder