Página 1 de 1

Inventar teclas Fx

Enviado: 22 Jul 2020 18:28
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

Inventar teclas Fx

Enviado: 22 Jul 2020 19:10
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.

Inventar teclas Fx

Enviado: 22 Jul 2020 19:17
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