horacio wrote:Fijate si este hilo te ayuda
viewtopic.php?f=6&t=20108&p=106243&hilit=+setmenu#p106243
Saludos
MENU oMenu 2007
MENUITEM "&Archivo"
MENU
MENUITEM "Salir del Sistema" ;
RESOURCE "SALIR16" ;
ACTION ( oDatos:oWndPpal:END() ) ;
ENDMENU
MENUITEM "&Inventario"
MENU
MENUITEM "Productos" ACTION ( productos() )
MENUITEM "Marcas" ACTION ( marcas() )
MENUITEM "Clases" ACTION ( lineas() )
SEPARATOR
MENUITEM "Movimientos" ACTION ( movinv() )
SEPARATOR
MENUITEM "Reportes" ACTION msginfo("Listados y Reportes")
ENDMENU
ENDMENU
MENU oMenu 2007
MENUITEM "&Archivo"
MENU
MENUITEM "Salir del Sistema" ;
RESOURCE "SALIR16" ;
ACTION ( oDatos:oWndPpal:END() ) ;
ENDMENU
MENUITEM "&Inventario"
MENU
MENUITEM "Productos" ACTION ( productos() )
MENUITEM "Clases" ACTION ( lineas() )
MENUITEM "Reportes" ACTION msginfo("Listados y Reportes")
ENDMENU
ENDMENU
// --------------------------------------------------------------------//
// ------------- Funcion men£ de la pantalla principal ----------------//
// --------------------------------------------------------------------//
STATIC FUNCTION HazMenu(musuario,nItems) // Musuario es el nombre de un usuario válido, ;
// y nItems se pasa por referencia para poner en que nivel queda el menuinfo
LOCAL i, oMenu, j, oMenuItem, nivel, nivel1, ult
MEMVAR oWPpal
use menues ALIAS "menu1" SHARED NEW
SET INDEX TO menues
menu1->(DBSEEK(musuario))
MENU oMenu
j := 0
aproce :={}
nItems := 1
nivel := 1
ult := "N"
DO WHILE menu1->usuario = musuario
IF menu1->submenu = "S" && Si es submenu
MENUITEM ALLTRIM(menu1->detalle)
ult := "S"
MENU
ELSE
ult := "N"
IF menu1->submenu = "-" && Si un separador
SEPARATOR
ELSE && Si un proceso
j++
AADD(aproce,menu1->modulo) && Cargo la tabla de procesos
MENUITEM oMenuItem PROMPT ALLTRIM(menu1->detalle);
ACTION ejecfunc(oMenuItem:nHelpid) HELPID j
ENDIF
ENDIF
IF nivel = 1 && Si es un titulo
nItems++ && Cuento los items del menu principal
ENDIF
nivel1 := AT("0",menu1->orden1) - 1
menu1->(DBSKIP(1))
nivel := AT("0",menu1->orden1) - 1
IF nivel < nivel1 .and. menu1->usuario = musuario && Si retrocedo
FOR i := nivel TO (nivel1 - 1) && en nivel pongo
ENDMENU && los ENDMENU
NEXT i
IF ult = "S" .and. nivel = 1 && Si es titulo
ENDMENU && solo tambien
ENDIF
ELSE
IF ult = "S" .and. nivel = 1 && Si es titulo
ENDMENU && solo tambien
ENDIF
ENDIF
ENDDO
ENDMENU
** Esta parte del menu siempre va
MENUITEM "&Salir"
MENU
MENUITEM "&Salir" ACTION (oWPpal:end)
SEPARATOR
MENUITEM "Calc&uladora" ACTION WinExec( "Calc.exe" )
MENUITEM "Configuar &Impresora" ACTION PrinterSetup()
ENDMENU
ENDMENU
CLOSE menu1
RETURN oMenu
STATIC FUNCTION ejecfunc(mifunc)
LOCAL fun
fun := ALLTRIM(aproce[mifunc])
DO &fun
RETURN NIL
USUARIO MODULO DETALLE SUBMENU ORDEN1
// --------------------------------------------------------------------//
// ------------- Funcion men£ de la pantalla principal ----------------//
// --------------------------------------------------------------------//
STATIC FUNCTION HazMenu(musuario,nItems)
LOCAL i, oMenu, j, oMenuItem, nivel, nivel1, ult, oQry
MEMVAR oWnd
oQry := oServer:Query( "SELECT * FROM menues WHERE usuario="+ClipValue2SQL(musuario))
MENU oMenu 2007
j := 0
aproce :={}
nItems := 1
nivel := 1
ult := "N"
DO WHILE !oQry:Eof()
IF oQry:submenu = "S" && Si es submenu
MENUITEM ALLTRIM(oQry:detalle) RESOURCE ALLTRIM(oQry:icono)
ult := "S"
MENU
ELSE
ult := "N"
IF oQry:submenu = "-" && Si un separador
SEPARATOR
ELSE && Si un proceso
j++
AADD(aProce,oQry:modulo) && Cargo la tabla de procesos
MENUITEM oMenuItem PROMPT ALLTRIM(oQry:detalle);
ACTION ejecfunc(oMenuItem:nHelpid) HELPID j;
RESOURCE ALLTRIM(oQry:icono)
ENDIF
ENDIF
IF nivel = 1 && Si es un titulo
nItems++ && Cuento los items del menu principal
ENDIF
nivel1 := AT("0",oQry:orden1) - 1
oQry:Skip()
nivel := AT("0",oQry:orden1) - 1
IF nivel < nivel1 .and. oQry:usuario = musuario && Si retrocedo
FOR i := nivel TO (nivel1 - 1) && en nivel pongo
ENDMENU && los ENDMENU
NEXT i
IF ult = "S" .and. nivel = 1 && Si es titulo
ENDMENU && solo tambien
ENDIF
ELSE
IF ult = "S" .and. nivel = 1 && Si es titulo
ENDMENU && solo tambien
ENDIF
ENDIF
ENDDO
ENDMENU
** Esta parte del menu siempre va
MENUITEM "&Salir"
MENU
MENUITEM "&Salir" ACTION (oWnd:end) RESOURCE "SALIR1"
SEPARATOR
MENUITEM "&Acerca" ACTION MsgInfo("Sistema XXXXXXXXXX" +CHR(10)+;
"CM Soft - 2013"+CHR(10)+;
"www.cmsoft.com.ar"+CHR(10)+;
"Desarrollo de sistemas"+CHR(10)+;
"Todos los derechos reservados","Acerca de XXXXXXXXXXXXX")
MENUITEM "Calc&uladora" ACTION WinExec( "Calc.exe" ) RESOURCE "CALCU1"
MENUITEM "Configuar &Impresora" ACTION PrinterSetup()
ENDMENU
ENDMENU
oQry:End()
RETURN oMenu
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 58 guests