Clipper On Line • Ver Tópico - ALT+C personalizado

ALT+C personalizado

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

Moderador: Moderadores

 

ALT+C personalizado

Mensagempor ssflavio » 14 Out 2021 13:21

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
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 86
Data de registro: 10 Jul 2008 09:57
Cidade/Estado: São Paulo / SP
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

ALT+C personalizado

Mensagempor Jairo Maia » 14 Out 2021 15:21

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.
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ALT+C personalizado

Mensagempor vcatafesta » 15 Out 2021 07:27

Olá,

Use SetKey para essa finalidade.

Ex:
#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

Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

ALT+C personalizado

Mensagempor Jairo Maia » 15 Out 2021 09:00

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.
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ALT+C personalizado

Mensagempor vcatafesta » 15 Out 2021 09:56

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.
Anexos
Capture2.PNG
Capture2.PNG (4.43 KiB) Visualizado 531 vezes
Capture1.PNG
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

ALT+C personalizado

Mensagempor vcatafesta » 15 Out 2021 09:58

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.
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

ALT+C personalizado

Mensagempor Jairo Maia » 15 Out 2021 10:42

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. ).
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ALT+C personalizado

Mensagempor JoséQuintas » 19 Out 2021 20:12

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ALT+C personalizado

Mensagempor Jairo Maia » 20 Out 2021 15:29

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().
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ALT+C personalizado

Mensagempor JoséQuintas » 20 Out 2021 18:09

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...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro