Hay alguna manera de poder capturar si se ha pulsado ALF+F1 por ejemplo io cualquier combinaci贸n de tecla ALT mas tecla de funci贸n.
ALT + letra lo tengo resulto, pero no consigo capturar ALT+ telca de funcion.
Hay alguna manera de poder capturar si se ha pulsado ALF+F1 por ejemplo io cualquier combinaci贸n de tecla ALT mas tecla de funci贸n.
ALT + letra lo tengo resulto, pero no consigo capturar ALT+ telca de funcion.
oControl:bKeyDown:={|nkey,nFlag| IF( GetKeyState(VK_F1) .AND. nKey=17 , MsgInfo("Probando") , )}Gracias Esteban,
pero el c贸digo que me pasaste no me funciona. No se si en otro control funciona pero en concreto en un txBrowse que es donde lo estoy probando no hace nada.
El tema es que la tecla ALT no activa el metodo KeyDown, para capturar alt he a帽adido un nuevo metodo SysCommnad, que si me permite capturar ALT + una tecla, pero no con las teclas de funci贸n.
Con los dos ALT sigue sin hacer nada??
No alt no hace nada, no activa KeyDown.
Esteban y Biel,
he estado probando diferentes caminos y no he podido haer que ALT funcione, probando en un keydown de dialogo AltGr si me devuelve valor de 17 pero al hacer + cualquier funcion ya no va.
yo hago utilizo con keydown GETKEYSTATE(VK_CONTROL)+asc(nKey) y me funciona bien,
saludos
paco
DATA bAltKey
METHOD SysCommand( nType, nLoWord, nHiWord )
METHOD Syscommand( nType, nLowOrd, nHiWord ) Class TWBrowse //Era TcBrowse
Local oFolder, nItem, nButton
Local hCtrl
DO CASE
Case nType == SC_KEYMENU // Alt+...
If ::bAltKey != Nil
Eval( ::bAltKey, nLoWord )
Endif
ENDCASE
Return Super:SysCommand( nType, nLoWord, nHiWord )
//
Ejemplo:
oLbx:bAltKey := { | nKey, nFlags | Teste( nKey, nFlags ) }
Static Function Teste( nKey, nFlags )
local cKey:= CHR( nKey )
If GetKeyState( VK_CONTROL ) .And. ;
GetKeyState( VK_SHIFT )
MsgInfo( " CONTROL + SHIFT + " + cKey )
ElseIf GetKeyState( VK_CONTROL )
MsgInfo( " ALT + CONTROL + " + cKey )
ElseIf GetKeyState( VK_SHIFT )
MsgInfo( " ALT + SHIFT + " + cKey )
ElseIf GetKeyState( VK_MENU ) // alt key
MsgInfo( " ALT + " + cKey )
EndIf
cKey:= Upper( cKey )
IF cKey == "I" // Alt+I
MsgInfo( " INCLUIR" )
ELSEIF cKey == "A" // Alt+A
MsgInfo( " ALTERAR" )
ELSEIF cKey == "E" // Alt+E
MsgInfo( " EXCLUIR" )
ELSEIF cKey == "P" // Alt+P
MsgInfo( " IMPRIMIR" )
ELSEIF cKey == "R" // Alt+R
MsgInfo( OemToAnsi( " RELAT脿RIOS" ) )
ENDIF
Return( nKey )Hola Karinha,
si tu ejemplo funciona casi bien. Ya lo tenia implementado en la clase txBrowse, pero no se activa por la combinacion de teclas ALT+ F2, F3. Funciona bien con el resto de teclas, pero no con las de funci贸n.
#include "FiveWin.ch"
#define WM_SYSKEYDOWN 聽 0x0104
function Main()
聽 聽local oWnd := TMyWindow():New()
聽 聽ACTIVATE WINDOW oWnd
return nil
CLASS TMyWindow FROM TWindow
聽 聽METHOD HandleEvent( nMsg, nWParam, nLParam )
聽 聽
ENDCLASS
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TMyWindow
聽 聽if nMsg == WM_SYSKEYDOWN
聽 聽 聽 if nWParam >= 112 .and. nWParam <= 123
聽 聽 聽 聽 聽MsgInfo( "Alt + F" + AllTrim( Str( nWParam - 111 ) ) )
聽 聽 聽 endif 聽
聽 聽endif
聽 聽
return Super:HandleEvent( nMsg, nWParam, nLParam )Perfecto Antonio, he a帽adido el metodo en xBrowse que es donde realmente lo necesitaba y funciona ok.
Muchas gracias.
Biel,
Si nos envias 贸 publicas aqui los cambios realizados, con mucho gusto los incluiremos en la pr贸xima versi贸n de FWH. Gracias ![]()
聽DATA 聽 bKeyAlt 聽// Para acionar 聽Tecla ALT+Keys
...
聽METHOD HandleEvent( nMsg, nWParam, nLParam )
...
//-------------------------------------------------------------//
METHOD HandleEvent( nMsg, nWParam, nLParam )
聽 聽if nMsg == WM_SYSKEYDOWN
聽 聽 聽 IF ::bKeyAlt!=NIL
聽 聽 聽 聽 聽Eval( ::bKeyAlt, nWparam )
聽 聽 聽 ENDIF
聽 聽ENDIF
RETURN Super:HandleEvent( nMsg, nWParam, nLParam )Biel,
gracias ![]()
Para cambiar el comportamiento de F1 tendr铆as que implementar el m茅todo Help() en tu clase derivada y modificarlo seg煤n tus necesidades. Por defecto al pulsarse F1 Windows env铆a un mensaje WM_HELP que FiveWin ruta automaticamente al m茅todo Help().
Help
, no consigo evitar el mensaje No help file defined with SetHelpFile.
Consigo detectar la puslaci贸n de F1 en el metodo HandleEvent, he creado el metodo Help(), pero no pasa por ese metodo, tambien he creado el metodo HelpTopic que si pasa por 茅l, pero despues sigue aparareciendome el mensaje de aviso de que no hay fichero de ayuda definido ( creo que viene de la funci贸n isHelpFile ).
Mira 贸 busca por ac谩: HELP32.PRG
Te basta hacer los cambios necesarios en el.
Saludos.