help with menu please - Ayuda con menu, por favor
Posted: Sun Oct 23, 2022 2:06 pm
by Jose Marte2
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
Re: help with menu please - Ayuda con menu, por favor
Posted: Sun Oct 23, 2022 5:33 pm
by rdonnay
Show us some of your code.
Do you use eXpress++ for the owner draw menu?
Re: help with menu please - Ayuda con menu, por favor
Posted: Mon Oct 24, 2022 3:52 am
by Jose Marte2
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
Re: help with menu please - Ayuda con menu, por favor
Posted: Mon Oct 24, 2022 8:24 am
by rdonnay
Did you try hBarra:disable() ?