Greetings, I hope you are well as well as your families.
Please if you could help me with this question.
I am starting to migrate a system that I have on clipper
I am using the menu called ownerdrw
The question is when selecting an option is there any way to disable that option or the menu that cannot be used until closing or returning from the selected option
thanks in advance
Español
Saludos, espero que esten bien al igual que sus familias.
Por favor si pudieran brindarme su ayuda con esta pregunta
Estoy comenzando a migrar un sistema que tengo en clipper
Estoy usando el menu que se llama ownerdrw
La pregunta es al momento de seleccionar una opcion hay alguna manera para desactivar esa opcion o el menu que no se pueda utilizar hasta cerrar o volver de la opcion selecciona
Las gracias anticipadas
help with menu please - Ayuda con menu, por favor
- Jose Marte2
- Posts: 46
- Joined: Thu Nov 16, 2017 2:19 pm
- Location: República Dominicana
help with menu please - Ayuda con menu, por favor
José Marte
Software & Servicios
Software & Servicios
Re: help with menu please - Ayuda con menu, por favor
Show us some of your code.
Do you use eXpress++ for the owner draw menu?
Do you use eXpress++ for the owner draw menu?
The eXpress train is coming - and it has more cars.
- Jose Marte2
- Posts: 46
- Joined: Thu Nov 16, 2017 2:19 pm
- Location: República Dominicana
Re: help with menu please - Ayuda con menu, por favor
Thank you
// Creacion De Los Menus
STATIC FUNCTION CrearMenu( oDlgSisAdco )
PUBLIC hBarraMenu := {}
PUBLIC hBarSubMenu:= NIL
PUBLIC hBarra := NIL
PUBLIC hSubMenu := {}
hBarra:= oDlgSisAdco:menuBar()
hBarra:measureItem := {|nItem,aDims,self| MeasureMenubarItem(oDlgSisAdco,self,nItem,aDims) }
hBarra:drawItem := {|oPS,aInfo,self | DrawMenubarItem(oDlgSisAdco,self,oPS,aInfo) }
DC_SETKEYACTIVE(.T.)
DBUSEAREA(.T.,,"USUARIOS",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE USUARIOS","*** AVISO ***")
BREAK
Else
DBSETINDEX("USUARIO1")
ENDIF
DBUSEAREA(.T.,,"OPCMENUG",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE OPCIONES DEL MENU","*** AVISO ***")
BREAK
Else
DBSETINDEX("OpcMeng2")
ENDIF
DBUSEAREA(.T.,,"ACCESOGE",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE ACCESO AL SISTEMA","*** AVISO ***")
BREAK
Else
DBSETINDEX("ACCESOG")
ENDIF
cCodiUsua = Codifica(cNombre)
DBSelectArea("OPCMENUG")
DBSeek("B")
Do While !Eof() .and. TipoMenu="B"
cCodiMenu := CodiMenu
If Estatus="A" .or. accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
// Barra De Menu
AAdd(hBarraMenu, {CodiMenu, NuevoMenu() } )
EndiF
EndiF
DBSkip()
EndDo
For J := 1 To Len(hBarraMenu)
cBar := Left(str(hBarraMenu[J][1],5,0), 1)
DBSeek("P"+cBar)
Do While !Eof() .And. Str(CodiMenu,5,0) = cBar
cCodiMenu := CodiMenu
If !accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
AddAccOpc( cCodiUsua, CodiMenu, NivelMenu)
EndiF
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
If TipoSub == "S"
cSub := Left(Str(CodiMenu,5,0), 3)
//Barra SubMenu
AAdd( hSubMenu, NuevoSubMenu(hBarraMenu) )
DBSkip(1)
Do While !Eof() .And. Str(CodiMenu,5,0) = cSub
cCodiMenu := CodiMenu
If !accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
AddAccOpc( cCodiUsua, CodiMenu, NivelMenu)
EndiF
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
//Opciones De SubMenu
MenuProcedure(CodiMenu)
EndiF
DBSkip(1)
EndDo
Else
//Opciones Normales Del Menu
MenuProcedure(CodiMenu)
DBSkip(1)
Endif
Else
DBSkip(1)
Endif
Enddo
Next
//Salir Del Sistema
hBarMenu:= XbpImageMenu():new()
hBarMenu:BarText:= ""
hBarMenu:title := "~Salir"
hBarMenu:create( oDlgSisAdco )
hBarMenu:addItem( {"~Salir"+Chr(9)+"Alt+F4",;
{|| SalirMenu() },, XBPMENUBAR_MIA_OWNERDRAW },;
120 )
hBarra:addItem( {hBarMenu,,, XBPMENUBAR_MIA_OWNERDRAW} )
END SEQUENCE
DBSelectArea("OPCMENUG")
DBCloseArea()
DBSelectArea("ACCESOGE")
DBCloseArea()
DBSelectArea("USUARIOS")
DBCloseArea()
Return (hBarra != NIL)
// Salir Del Sistema
Static Function SalirMenu()
LOCAL nButton, nEvent, mp1, mp2
LOCAL oXbp := SetAppFocus()
nButton := ConfirmBox( , ;
"Desea Salir Del Sistema SISADCO?", ;
"SALIR DEL SISTEMA SISADCO", ;
XBPMB_YESNO , ;
XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )
IF nButton == XBPMB_RET_YES
DBCLOSEALL()
PostAppEvent(xbeP_Quit)
ELSE
DO WHILE NextAppEvent() <> xbe_None
nEvent := AppEvent(@mp1,@mp2,@oXbp)
oXbp:handleEvent(nEvent,mp1,mp2)
ENDDO
ENDIF
SetAppFocus(oXbp)
RETURN .F.
// Chequear Acceso Al Menu
STATIC FUNCTION ChkAccOpc()
RETURN .t.
// Anadir Opccion De Acceso Al Menu
STATIC FUNCTION AddAccOpc( cCodiUsua, cCodiMenu, nNivelMenu)
LOCAL nPrevArea
FIELD CodiUsua, CodiMenu, Estatus
nPrevArea := SELECT()
DBSelectArea("ACCESOGE")
While !RLock(); EndDo
DBAppend()
CodiUsua := cCodiUsua
CodiMenu := cCodiMenu
Estatus := IIF(nNivel >= nNivelMenu, "x", " ")
DBUnlock()
DBCommit()
DBSelectArea(nPrevArea)
Return .t.
// Opciones Para Ejecucion De Progrmas y Funciones
STATIC PROCEDURE MenuProcedure(pNumeroOpcion)
DO CASE
CASE pNumeroOpcion == 10107 // Egresos De Caja
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| RECCAJA() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
CASE pNumeroOpcion == 10108 // Caja Chica
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| CAJCHICA() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
CASE pNumeroOpcion == 10109 // Envios De Mercancias
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| ENVIOS() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
ENDCASE
Return
// Creacion De Los Menus
STATIC FUNCTION CrearMenu( oDlgSisAdco )
PUBLIC hBarraMenu := {}
PUBLIC hBarSubMenu:= NIL
PUBLIC hBarra := NIL
PUBLIC hSubMenu := {}
hBarra:= oDlgSisAdco:menuBar()
hBarra:measureItem := {|nItem,aDims,self| MeasureMenubarItem(oDlgSisAdco,self,nItem,aDims) }
hBarra:drawItem := {|oPS,aInfo,self | DrawMenubarItem(oDlgSisAdco,self,oPS,aInfo) }
DC_SETKEYACTIVE(.T.)
DBUSEAREA(.T.,,"USUARIOS",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE USUARIOS","*** AVISO ***")
BREAK
Else
DBSETINDEX("USUARIO1")
ENDIF
DBUSEAREA(.T.,,"OPCMENUG",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE OPCIONES DEL MENU","*** AVISO ***")
BREAK
Else
DBSETINDEX("OpcMeng2")
ENDIF
DBUSEAREA(.T.,,"ACCESOGE",,.T.,.F.)
IF NETERR()
MsgBox("NO SE PUEDE ABRIR BASE DE DATOS DE ACCESO AL SISTEMA","*** AVISO ***")
BREAK
Else
DBSETINDEX("ACCESOG")
ENDIF
cCodiUsua = Codifica(cNombre)
DBSelectArea("OPCMENUG")
DBSeek("B")
Do While !Eof() .and. TipoMenu="B"
cCodiMenu := CodiMenu
If Estatus="A" .or. accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
// Barra De Menu
AAdd(hBarraMenu, {CodiMenu, NuevoMenu() } )
EndiF
EndiF
DBSkip()
EndDo
For J := 1 To Len(hBarraMenu)
cBar := Left(str(hBarraMenu[J][1],5,0), 1)
DBSeek("P"+cBar)
Do While !Eof() .And. Str(CodiMenu,5,0) = cBar
cCodiMenu := CodiMenu
If !accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
AddAccOpc( cCodiUsua, CodiMenu, NivelMenu)
EndiF
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
If TipoSub == "S"
cSub := Left(Str(CodiMenu,5,0), 3)
//Barra SubMenu
AAdd( hSubMenu, NuevoSubMenu(hBarraMenu) )
DBSkip(1)
Do While !Eof() .And. Str(CodiMenu,5,0) = cSub
cCodiMenu := CodiMenu
If !accesoge->(DBSeek(cCodiUsua+Str(cCodiMenu,5,0)))
AddAccOpc( cCodiUsua, CodiMenu, NivelMenu)
EndiF
If (Estatus="A" .or. accesoge->estatus != " ") .and. ChkAccOpc()
//Opciones De SubMenu
MenuProcedure(CodiMenu)
EndiF
DBSkip(1)
EndDo
Else
//Opciones Normales Del Menu
MenuProcedure(CodiMenu)
DBSkip(1)
Endif
Else
DBSkip(1)
Endif
Enddo
Next
//Salir Del Sistema
hBarMenu:= XbpImageMenu():new()
hBarMenu:BarText:= ""
hBarMenu:title := "~Salir"
hBarMenu:create( oDlgSisAdco )
hBarMenu:addItem( {"~Salir"+Chr(9)+"Alt+F4",;
{|| SalirMenu() },, XBPMENUBAR_MIA_OWNERDRAW },;
120 )
hBarra:addItem( {hBarMenu,,, XBPMENUBAR_MIA_OWNERDRAW} )
END SEQUENCE
DBSelectArea("OPCMENUG")
DBCloseArea()
DBSelectArea("ACCESOGE")
DBCloseArea()
DBSelectArea("USUARIOS")
DBCloseArea()
Return (hBarra != NIL)
// Salir Del Sistema
Static Function SalirMenu()
LOCAL nButton, nEvent, mp1, mp2
LOCAL oXbp := SetAppFocus()
nButton := ConfirmBox( , ;
"Desea Salir Del Sistema SISADCO?", ;
"SALIR DEL SISTEMA SISADCO", ;
XBPMB_YESNO , ;
XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )
IF nButton == XBPMB_RET_YES
DBCLOSEALL()
PostAppEvent(xbeP_Quit)
ELSE
DO WHILE NextAppEvent() <> xbe_None
nEvent := AppEvent(@mp1,@mp2,@oXbp)
oXbp:handleEvent(nEvent,mp1,mp2)
ENDDO
ENDIF
SetAppFocus(oXbp)
RETURN .F.
// Chequear Acceso Al Menu
STATIC FUNCTION ChkAccOpc()
RETURN .t.
// Anadir Opccion De Acceso Al Menu
STATIC FUNCTION AddAccOpc( cCodiUsua, cCodiMenu, nNivelMenu)
LOCAL nPrevArea
FIELD CodiUsua, CodiMenu, Estatus
nPrevArea := SELECT()
DBSelectArea("ACCESOGE")
While !RLock(); EndDo
DBAppend()
CodiUsua := cCodiUsua
CodiMenu := cCodiMenu
Estatus := IIF(nNivel >= nNivelMenu, "x", " ")
DBUnlock()
DBCommit()
DBSelectArea(nPrevArea)
Return .t.
// Opciones Para Ejecucion De Progrmas y Funciones
STATIC PROCEDURE MenuProcedure(pNumeroOpcion)
DO CASE
CASE pNumeroOpcion == 10107 // Egresos De Caja
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| RECCAJA() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
CASE pNumeroOpcion == 10108 // Caja Chica
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| CAJCHICA() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
CASE pNumeroOpcion == 10109 // Envios De Mercancias
hBarSubMenu:addItem( {AllTrim(OpcMenuG->DescrMenu),;
_ActiveBlock({|o| ENVIOS() },.T. ),,XBPMENUBAR_MIA_OWNERDRAW } )
ENDCASE
Return
José Marte
Software & Servicios
Software & Servicios
Re: help with menu please - Ayuda con menu, por favor
Did you try hBarra:disable() ?
The eXpress train is coming - and it has more cars.