Page 1 of 1

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() ?