Estava sem entender até hoje, como esse código funcionava.
oBrw:bOther := {|oBrw,msg,wp|fKeyDown(oBrw,msg,wp)}
...
Function fKeyDown( oBrw,msg,wp )
IF msg == WM_KEYDOWN
...
ENDIF
if msg == WM_CHAR
..
endif
Return .T.
A pergunta que ficava na minha cabeça é como pode MSG ser duas coisas ao mesmo tempo ?
Agora eu entendi que a função do teclado é chamada 2 vezes. Uma para VERIFICAR WM_CHAR e outra WM_KEYDOWN.
Pq, sempre existe WM_KEYDOWN, mas pode ou não existir WM_CHAR, tipo pressionei CTRL ou SHIFT...não é WM_CHAR
WM_CHAR = algum caractere do teclado.
WM_KEYDOWN = qualquer tecla do teclado
Saudações,
Itamar M. Lins Jr.