Página 1 de 1
ALT+C personalizado
Enviado: 14 Out 2021 13:21
por ssflavio
Boa tarde amigos!
tenho um problema que chega a ser bobo, mas está me incomodando no desenvolvimento.
vamos supor que eu esteja em um menu, onde o cursor esta desligado
quando teclo ALT+C ele volta para o prompt, porem sem o cursor
eu gostaria de poder personalizar o meu ALT+C, ligando o cursor e posicionando o cursor no final da tela.
este mesmo problema acontece quando paro o programa dentro do debug
ALT+C personalizado
Enviado: 14 Out 2021 15:21
por Jairo Maia
ssflavio escreveu:eu gostaria de poder personalizar o meu ALT+C
Quero muito estar errado, mas o que sei até esse momento,
ALT+C (o mesmo que:
CTRL+BREAK) não é customizável.
Você pode neutralizá-las com a função:
SetCancel( .F. ), mas não customizá-las. Elas interrompem a aplicação abruptamente na linha que estiver em execução, e apenas informa onde foi interrompido o sistema.
ALT+C personalizado
Enviado: 15 Out 2021 07:27
por vcatafesta
Olá,
Use SetKey para essa finalidade.
Ex:
Código: Selecionar todos
#Define TECLA_ALTC 302
SetKey( TECLA_ALTC, {|| Altc() })
function Altc( cTexto )
LOCAL cScreen := SaveScreen()
LOCAL cCor := SetColor()
SetColor("")
Cls
ErrorBeep()
if Conf("Encerrar a Execucao do Aplicativo ?")
DbCommitAll()
DbCloseAll()
FChDir( oAmbiente:xBase )
Cls
F_Fim( cTexto )
ltrue := false
Quit
endif
SetColor( cCor )
ResTela( cScreen )
return
ALT+C personalizado
Enviado: 15 Out 2021 09:00
por Jairo Maia
vcatafesta escreveu:Use SetKey para essa finalidade.
Não funciona! Ao pressionar ALT+C ou CTRL+BREAK a matriz de definições de teclas NÂO é lida.
ALT+C personalizado
Enviado: 15 Out 2021 09:56
por vcatafesta
Funciona sim, uso aqui!
O que não funciona é o CTRL + BREAK (mas é possível alterar via C o comportamento),
mas o ALT+C como o cavalheiro informou em sua mensagem funciona perfeitamente.
ALT+C personalizado
Enviado: 15 Out 2021 09:58
por vcatafesta
As combinações das teclas CTRL+C e CTRL+BREAK recebem tratamento especial por processos de console.
Por padrão, quando uma janela do console tem o foco do teclado, CTRL+C ou CTRL+BREAK é tratado como um sinal (SIGINT ou SIGBREAK) e não como entrada de teclado. Por padrão, esses sinais são passados para todos os processos de console anexados ao console.
(Os processos desanexados não são afetados. Confira Criação de um console.)
O sistema cria um thread em cada processo de cliente para manipular o evento. O thread gerará uma exceção se o processo estiver sendo depurado. O depurador pode manipular a exceção ou continuar com a exceção sem tratamento.
CTRL+BREAK é sempre tratado como um sinal, mas um aplicativo pode alterar o comportamento padrão CTRL+C de duas maneiras que impedem que as funções do manipulador sejam chamadas:
A função SetConsoleMode pode desabilitar o modo de entrada ENABLE_PROCESSED_INPUT para o buffer de entrada de um console, portanto CTRL+C é relatado como entrada de teclado, e não como um sinal.
Quando SetConsoleCtrlHandler é chamado com os valores NULL e TRUE para os parâmetros dele, o processo de chamada ignora os sinais CTRL+C. O processamento normal de CTRL+C é restaurado chamando SetConsoleCtrlHandler com os valores NULL e FALSE. Esse atributo de ignorar ou não ignorar os sinais CTRL+C é herdado por processos filho, mas pode ser habilitado ou desabilitado por qualquer processo sem afetar os processos existentes.
ALT+C personalizado
Enviado: 15 Out 2021 10:42
por Jairo Maia
vcatafesta escreveu:mas é possível alterar via C o comportamento
E você tem a função em C que faz isso? Poste pra gente por favor, seria interessante tratar isso ao invés de desabilitar com SetCancel( .F. ).
ALT+C personalizado
Enviado: 19 Out 2021 20:12
por JoséQuintas
Jairo.
Como você mesmo disse, o Alt-C pode ser anulado no programa.
A partir daí, o set key permite configurar outra tecla pra desviar pra uma rotina própria.
Pode até ter uma pergunta de sim ou não antes de sair.
Na época troquei por Alt-Q.
ALT+C personalizado
Enviado: 20 Out 2021 15:29
por Jairo Maia
JoséQuintas escreveu:Como você mesmo disse, o Alt-C pode ser anulado no programa.
A partir daí, o set key permite configurar outra tecla pra desviar pra uma rotina própria.
Então José, pior que não! Fiz vários testes e não funciona, mesmo desativando com SetCancel(.F.).
Porém, o que me deixa "bolado" é que tenho um sistema de delivery para lanchonetes, nele, SetKey() com o ALT+C funciona, direciono para onde eu quiser, mas não sei identificar o que ele tem (obviamente, que coloquei, ou que tirei), que permite isso.
Vou continuar tentando entender, se eu entender posto aqui. Mas me deixa muito "bolado" porque somente nele direciono ALT+C para onde eu quiser, e pasme, ele não tem SetCancel().
ALT+C personalizado
Enviado: 20 Out 2021 18:09
por JoséQuintas
Código: Selecionar todos
FUNCTION AppInitSets( lVisible )
...
SetCancel(.F.)
SET KEY K_ALT_Q TO AltC
Fiz isso apenas pra evitar, acho que era o C cedilha, de abortar o programa.
Inclusive fui testar nestes dias, e o Alt-Q nem funciona mais kkkk
Deve estar sendo usado por algum atalho do Windows...