Inventar teclas Fx

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Inventar teclas Fx

Mensagem por JoséQuintas »

Acabei inventando teclas pras minhas telas, pros botões, mas... só funciona nas telas/botões.
Pra facilitar, inventei de F1 a F40, usando shift-F1, control-F1 e alt-F1.
Mas pra telas, isso é traduzido como texto "F11" por exemplo.
Até aí... tudo bem.

Mas pra tbrowse, isso tem que ser pelo Inkey(), e aí é que a coisa pega
Além da definição de teclas, existem o F11 e F12 que saem do padrão normal.

Será que vai ser uma má idéia remapear as teclas Fx ?

Usando Fx, shift-Fx, control-Fx, ALt-Fx, são 40 teclas, F1 é 28, e as demais -1 a -39

Basicamente seria remapear F11 e F12
As demais, seria só criar o #define
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Inventar teclas Fx

Mensagem por JoséQuintas »

É... o maior trabalho foi alterar uns 20 fontes, onde #include "josequintas.ch" vinha antes de #include "inkey.ch"

Um remapeamento no inkeyfilter

Código: Selecionar todos

   CASE -40 /*K_F11*/  ; RETURN K_SH_F1
   CASE -41 /*K_F12*/  ; RETURN K_SH_F2
e outro no josequintas.ch

Código: Selecionar todos

#ifdef K_F11
   #undef K_F11
#endif
#ifdef K_F12
   #undef K_F12
#endif
#define K_F11    K_SH_F1
#define K_F12    K_SH_F2
#define K_F13    K_SH_F3
#define K_F14    K_SH_F4
#define K_F15    K_SH_F5
#define K_F16    K_SH_F6
#define K_F17    K_SH_F7
#define K_F18    K_SH_F8
#define K_F19    K_SH_F9
#define K_F20    K_SH_F10
#define K_F21    K_CTRL_F1
#define K_F31    K_ALT_F1
Onde vou usar isso?
Basicamente nos buttons, o usuário nem precisa saber que isso existe.

Digamos que agora posso colocar 39 buttons na tela, numerados de -2 a -39
E isso não dá conflito com as letras normais já existentes.

É que alterando os browses pra ADO, as letras servem como filtro, e não vou poder usar letras nos buttons.
A alternativa que encontrei foi essa, e facilita usar -2 a -39, e texto F1 a F40, ao invés de "shift-F1", "ctrl-F1", e "alt-F1".

Acabam sendo exceções mesmo só F11 e F12, que são teclas que no começo não existiam no teclado.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Inventar teclas Fx

Mensagem por JoséQuintas »

Pra curiosidade, no uso que eu já fazia antes:

Código: Selecionar todos

   IF pw_TemAcesso( "PJPPEDIDOFATURA" )
      AAdd( oFrm:acMenuOptions, "<F3>Duplicata" )
   ENDIF
   IF pw_TemAcesso( "PJPPEDIDOCUPOM" )
      AAdd( oFrm:acMenuOptions, "<F12>ReemiteC" )
   ENDIF
   IF pw_TemAcesso( "ADMPEDJUN" )
      AAdd( oFrm:acMenuOptions, "<F14>Juntar" )
   ENDIF
   IF AppUserLevel() < 2
      AAdd( oFrm:acMenuOptions, "<F16>Config" )
   ENDIF

Código: Selecionar todos

METHOD UserFunction( lProcessou ) CLASS JPPEDIDOClass

   LOCAL nIdPedido, oXmlPdf

   nIdPedido := ::axKeyValue[ 1 ]
   DO CASE
   CASE ::cOpc == "J"; PJPPEDIDONFE( nIdPedido )
   CASE ::cOpc == "O"; PJPREGUSO( "JPPEDIDO", nIdPedido )
   CASE ::cOpc == "D"; ClonarPedido( @nIdPedido )
   CASE ::cOpc == "F"; ::MostraFinanceiro()
   CASE ::cOpc == "F3"; PJPPEDIDOFATURA( nIdPedido )
   CASE ::cOpc == "F12"; PJPPEDIDOCUPOM( nIdPedido )
   CASE ::cOpc == "F14"; ::JuntarPedido()
   CASE ::cOpc == "F16"; ::GUIHide()
   OTHERWISE
      lProcessou := .F.
   ENDCASE

   RETURN lProcessou
Pois é... até agora não era problema, e nem precisava saber do valor de Inkey
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