Amigos del Foro
Se puede en MENU cuando el usuario haya seleccionado un MENUITEM
al ejecutado una funcion seleccionada desde una MENUITEM, al salir de la funcion regresar a dicho MENUITEM ?
david
argentina
dobfivewin wrote:Amigos del Foro
Se puede en MENU cuando el usuario haya seleccionado un MENUITEM
al ejecutado una funcion seleccionada desde una MENUITEM, al salir de la funcion regresar a dicho MENUITEM ?
david
argentina
#define KEYEVENTF_KEYUP 2
//----------------------------------------------------------------------------//
Function ShowMenu( oM, nNiv )
Local cMv
Local nChr
Local nItem
Local oLItM
Local cMov := ""
Default oM := WndMain():oMenu
Default nNiv :=0
oLItM := oM : LastItem()
For nItem := 1 to Len( oM : aItems )
If( ValType( oM : aItems[ nItem ] : bAction ) == 'O' )
cMv := ShowMenu( oM : aItems[ nItem ] : bAction, nNiv + 1 )
If( Right( cMv, 1 ) == "x" )
cMov += Chr( If( nNiv =0, VK_DOWN, VK_RIGHT ) ) + cMv
If( nNiv == 0 )
cMov := Left( cMov, Len( cMov ) - 1 )
keybd_event( VK_MENU, 0, 0, 0 )
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 )
For nChr := 1 to Len( cMov )
keybd_event( Asc( SubStr( cMov, nChr, 1 ) ), 0, 0, 0 )
keybd_event( Asc( SubStr( cMov, nChr, 1 ) ), 0, KEYEVENTF_KEYUP, 0 )
Next i
Return( .t. )
End
Return cMov
End
Else
If( oM : aItems[ nItem ] : nId == oLItM : nId )
Return cMov + "x"
End
End
If( !Empt( oM : aItems[ nItem ] : cPrompt ) ) // se não for um separador
cMov +=Chr( If( nNiv == 0, VK_RIGHT, VK_DOWN ) )
End
Next nItem
Return if( nNiv ==0, .f., "" )
DLL32 FUNCTION keybd_event ( bVk as _INT,bScan as _INT, dwFlags as LONG, dwExtraInfo as LONG ) AS LONG ;
PASCAL LIB "user32.dll"
MenuItem 'Tabla &empresas' Action( SeleccionaEmpresa(), ShowMenu() )
horacio wrote:Fijate si es la función que necesitas
- Code: Select all Expand view
#define KEYEVENTF_KEYUP 2
//----------------------------------------------------------------------------//
Function ShowMenu( oM, nNiv )
Local cMv
Local nChr
Local nItem
Local oLItM
Local cMov := ""
Default oM := WndMain():oMenu
Default nNiv :=0
oLItM := oM : LastItem()
For nItem := 1 to Len( oM : aItems )
If( ValType( oM : aItems[ nItem ] : bAction ) == 'O' )
cMv := ShowMenu( oM : aItems[ nItem ] : bAction, nNiv + 1 )
If( Right( cMv, 1 ) == "x" )
cMov += Chr( If( nNiv =0, VK_DOWN, VK_RIGHT ) ) + cMv
If( nNiv == 0 )
cMov := Left( cMov, Len( cMov ) - 1 )
keybd_event( VK_MENU, 0, 0, 0 )
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 )
For nChr := 1 to Len( cMov )
keybd_event( Asc( SubStr( cMov, nChr, 1 ) ), 0, 0, 0 )
keybd_event( Asc( SubStr( cMov, nChr, 1 ) ), 0, KEYEVENTF_KEYUP, 0 )
Next i
Return( .t. )
End
Return cMov
End
Else
If( oM : aItems[ nItem ] : nId == oLItM : nId )
Return cMov + "x"
End
End
If( !Empt( oM : aItems[ nItem ] : cPrompt ) ) // se não for um separador
cMov +=Chr( If( nNiv == 0, VK_RIGHT, VK_DOWN ) )
End
Next nItem
Return if( nNiv ==0, .f., "" )
DLL32 FUNCTION keybd_event ( bVk as _INT,bScan as _INT, dwFlags as LONG, dwExtraInfo as LONG ) AS LONG ;
PASCAL LIB "user32.dll"
Y se usa de la siguiente manera
- Code: Select all Expand view
MenuItem 'Tabla &empresas' Action( SeleccionaEmpresa(), ShowMenu() )
Saludos
MENUITEM "PRUEBAS"
MENU
MENUITEM "Pruebas varias"
MENU
MENUITEM "Volver al sub menu"
MENU
MENUITEM "Probando volver a este menu-item" ACTION ( MsgInfo("Primer sub-menu"), ShowMenu() )
MENUITEM "Probando2 volver a este menu-item" ACTION ( MsgInfo("Ajai segundo sub-menu"), ShowMenu() )
ENDMENU
joseluisysturiz wrote:Francisco, estas usando menu dinamico.? es decir contruido desde una tabla o dbf dependiendo del usuario.? si es asi, podrias compartir el codigo de construccion y lectura desde la tabla o dbf.? gracias, saludos...
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 49 guests