Página 2 de 4
problema com a keysec() no Harbour
Enviado: 16 Mar 2013 10:49
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.
problema com a keysec() no Harbour
Enviado: 16 Mar 2013 22:37
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.
problema com a keysec() no Harbour
Enviado: 17 Mar 2013 09:41
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.
problema com a keysec() no Harbour
Enviado: 17 Mar 2013 09:49
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()
|  Valor  |  Dbedit.ch  |  Descriçao  |
|---|
|  0  |  DE_ABORT  |  Aborta DBEDIT()  |
|  1  |  DE_CONT  |  Continua DBEDIT()  |
|  2  |  DE_REFRESH  |  Força reler e reescrever a tela e continuar após  |
|    |    |  reescrever, processa teclas e vai para iantiva  |
Vou fazer um teste com dbedit no Harbour.
problema com a keysec() no Harbour
Enviado: 17 Mar 2013 10:34
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ê !
problema com a keysec() no Harbour
Enviado: 22 Mar 2013 23:25
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?
problema com a keysec() no Harbour
Enviado: 23 Mar 2013 06:11
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.
problema com a keysec() no Harbour
Enviado: 24 Mar 2013 01:42
por cjp
Já instalei. Mas não conseguir usar ela em modo console. Como faço?
problema com a keysec() no Harbour
Enviado: 24 Mar 2013 09:26
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.
problema com a keysec() no Harbour
Enviado: 24 Mar 2013 23:10
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()?
problema com a keysec() no Harbour
Enviado: 25 Mar 2013 09:04
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 ?
problema com a keysec() no Harbour
Enviado: 28 Mar 2013 02:06
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.
problema com a keysec() no Harbour
Enviado: 28 Mar 2013 08:40
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.
problema com a keysec() no Harbour
Enviado: 28 Mar 2013 08:42
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 ?
problema com a keysec() no Harbour
Enviado: 28 Mar 2013 15:50
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