Caros colegas,
Alguem pode me ajudar com este problema?
Seguinte: Dentro de um laço while / enddo, gostaria de chamar uma funçao especifica atraves do pressionamento de uma sequencia de teclas de função (F3, F5 e F7).
No meu caso, tenho o menu principal do sistema e quero chamar um modulo oculto com funcoes para o suporte tecnico.
Tentei com a função LASTKEY() apos o MENU TO e não obtive exito.
Obrigado!
// HbMake v1.20 - xHarbour Make Utility
// xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6406) / Borland C++ 5.5.1 (32 bit)
Sequencia de teclas de função
Moderador: Moderadores
-
Mauricio Portela
- Usuário Nível 1

- Mensagens: 2
- Registrado em: 18 Out 2012 13:36
- Localização: Encruzilhada/Bahia
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Sequencia de teclas de função
Mauricio, seja bem vindo ao fórum !
Veja se assim serve para você:Apenas faltou a extração da sequências das teclas certas para o buffer do teclado. O Inkey 5, dará 5 segundos e cairá fora se nada foi digitado antes. O INKEY_KEYBOARD aguardará qualquer tecla a se pressionada, sem sofre interferência do mouse.
Anexei outra versão mostrando em forma de mensagem o comportamento para cada evento no teclado.
Veja se assim serve para você:
Código: Selecionar todos
#include "box.ch"
#include "inkey.ch"
#include "fileio.ch"
// #define K_F2 -1 /* F2 */
// #define K_F4 -3 /* F4 */
// #define K_F6 -5 /* F6 */
REQUEST HB_GT_WIN_DEFAULT
Function Main()
Local cTela := savescreen(00,00,24,79)
Local cCor := setcolor()
SetMode(25,80)
SETKEY( K_F2, { || SECRETA() } )
@ 00, 00, 24, 79 box B_SINGLE + space(1)
@ 01, 02 say "Sistema Exemplo"
@ 02, 02, 23, 77 box B_SINGLE + space(1)
while .t.
@ 03, 04 prompt " Cadastro "
@ 04, 04 prompt " Movimento "
@ 05, 04 prompt " Relatorios "
@ 06, 04 prompt " Sair "
menu to nOpcao
/*
if lastkey() = -1
if lastkey() = -3
if lastkey() = -5
alert("Combinacao de Teclas;1 - F2;2 - F4;3 - F6")
endif
endif
endif
*/
do case
case nOpcao = 1 ; alert("Cadastro")
case nOpcao = 2 ; alert("Movimento")
case nOpcao = 3 ; alert("Relatorios")
case nOpcao = 4 ; exit
endcase
enddo
setcolor(cCor)
Set Key K_F2 to
restscreen(00,00,24,79,cTela)
Return Nil
Function Secreta()
Local nKey2,nKey3
nKey2:=Inkey(5,INKEY_KEYBOARD)
If nKey2=K_F4
nKey3:=Inkey(5,INKEY_KEYBOARD)
If nKey3=K_F6
alert("Combinacao de Teclas;1 - F2;2 - F4;3 - F6")
Endif
Endif
Return NilSe bem que as teclas não são as mesmas que estão no seu código-exemplo. As que implementei são: F2, F4 e F6. Caso não for na sua conformidade é só mudar os seus valores.Dentro de um laço while / enddo, gostaria de chamar uma funçao especifica atraves do pressionamento de uma sequencia de teclas de função (F3, F5 e F7)
Anexei outra versão mostrando em forma de mensagem o comportamento para cada evento no teclado.
- Anexos
-
Teste53.rar- (504.78 KiB) Baixado 106 vezes
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.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Sequencia de teclas de função
Olá!
Bem-vindo ao fórum Maurício!
Outra opção:
Bem-vindo ao fórum Maurício!
Outra opção:
Código: Selecionar todos
#include "box.ch"
#include "inkey.ch"
#include "fileio.ch"
// #define K_F2 -1 /* F2 */
// #define K_F4 -3 /* F4 */
// #define K_F6 -5 /* F6 */
FUNCTION Main()
LOCAL cTela := savescreen(00,00,24,79)
LOCAL cCor := setcolor()
// associa a tecla Alt+F12 a uma função chamada F_Hidden()
LOCAL bOldSetKey := SetKey( K_ALT_F12, { || F_Hidden() } ), bKeyBlock
//
@ 00, 00, 24, 79 box B_SINGLE + space(1)
@ 01, 02 say "Sistema Exemplo"
@ 02, 02, 23, 77 box B_SINGLE + space(1)
WHILE .T.
@ 03, 04 prompt " Cadastro "
@ 04, 04 prompt " Movimento "
@ 05, 04 prompt " Relatorios "
@ 06, 04 prompt " Sair "
menu to nOpcao
/*
if lastkey() = -1
if lastkey() = -3
if lastkey() = -5
alert("Combinacao de Teclas;1 - F2;2 - F4;3 - F6")
endif
endif
endif
*/
DO CASE
// verifica se a tecla de função foi pressionada
CASE ( bKeyBlock := SETKEY( LastKey() ) ) != NIL
EVAL( bKeyBlock, PROCNAME( 2 ), PROCLINE( 2 ) )
case nOpcao = 1 ; alert("Cadastro")
case nOpcao = 2 ; alert("Movimento")
case nOpcao = 3 ; alert("Relatorios")
case nOpcao = 4 ; exit
ENDCASE
ENDDO
setcolor(cCor)
restscreen(00,00,24,79,cTela)
// Restaura set key
SetKey( K_ALT_F12, bOldSetKey )
RETURN NIL
//----------------------------------------------------------------------------------
STATIC FUNCTION F_Hidden()
Alert( "Inside F_Hidden()" )
RETURN NIL
//----------------------------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
Mauricio Portela
- Usuário Nível 1

- Mensagens: 2
- Registrado em: 18 Out 2012 13:36
- Localização: Encruzilhada/Bahia
Sequencia de teclas de função
Pablo,
Boa noite!
Muito obrigado pela ajuda! É exatamente esse metodo que quero colocar no sistema.
Quanto a sequencia das teclas de funcão do texto e do codigo: foi erro meu mesmo! Desculpa!
Agradeço tambem ao alxsts!
Boa noite!
Muito obrigado pela ajuda! É exatamente esse metodo que quero colocar no sistema.
Quanto a sequencia das teclas de funcão do texto e do codigo: foi erro meu mesmo! Desculpa!
Agradeço tambem ao alxsts!