FoxPro/Visual FoxPro - Variables public

   
Vista:

Variables public

Publicado por Dr. Casabe (134 intervenciones) el 18/12/2009 23:37:45
Hola a todos:

Controlo en mi sistema los tipos de usuarios y accesos mediante una variable publica. Funciona excelente, por ejemplo: si el usuario es un Operador, no le permite ciertas opciones del menu y de la barra de herramientas, que en cambio cuando es Administrador, si se le activan.

El problema esta, que cuando entra o ejecuta un formulario cualquiera, al salir del mismo, se activan las opciones del menu, aunque sea usuario Operador, pero si se cumple para la barra de herramientas. Salgo de los formularios con ThisForm.Release. No entiendo por que se activan las opciones en el menu.

Gracias por su orientacion.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Variables public

Publicado por xx (378 intervenciones) el 26/12/2009 13:06:48
Si tu caso es que tienes un formulario principal con el menu y desde el llamas a formularios secundarios: yo te recomendaria que actives y desactives tu menu es decir cuando tu pantalla principal que tiene el foco o sea en el evento ACTIVATE del form principal deberias activar tu menu y en el evento DEACTIVATE del form principal desactivarlo suponiendo que en ningun formulario se cambia el valor de tu variable!!.

**********************************************************************************************
Si te interesa este codigo lo uso con un menu dinamico es decir para un usuario crea un menu que lo levanta de una tabla DBF debe ir en el INIT del formlario principal:

OBS: _choice ==> .T. el menu esta habilitado _choice==>.F. menu deshabilitado

*******************
THISFORM.INIT()
*******************
*//----------------------------------------------------------------------------
*//............................................................................
*//......Fecha: 26-11-2003.............................................
*//......Autor: OMAR DUILIO ROJAS FORNERON.............................
*//......Localidad: Encarnación-Paraguay...................................
*//......Funcion: Definición del menu principal..........................
*//......Compatib.: Ha sido desarrollado y probado con VFP6.0..............
*//............................................................................
*//----------------------------------------------------------------------------

*//----------------------------------------------------------------------------
*// CONTROL DEL CONTENEDOR DE ESTE MENU
*//----------------------------------------------------------------------------
IF THISFORM.ShowWindow!=2
MESSAGEBOX( [EC:0X00], 16, [ERROR] )
RETURN
ENDIF
*//----------------------------------------------------------------------------

*IF !_XOPEN.XOPEN( [PROFILE.DBF], [PROFILE], 0, "3", .F. )
* RETURN .F.
*ENDIF
USE PROFILE.DBF IN 0 SHARED NOUPDATE
SELECT PROFILE
SET ORDER TO 1
GO TOP
DEFINE MENU _Xmenuprinc IN (THISFORM.NAME) BAR
_pos=1
DO WHILE !EOF()

IF SUBSTR(_profile,_pos,1)=='0'
SKIP +1
_pos=_pos+1
LOOP
ENDIF

*// PROCESA EL REGISTRO
_code=LEFT(XCODE,2)
IF RIGHT(XCODE,2)!=" "
MESSAGEBOX( [BAD PROFILE!], 16, [ERROR] )
EXIT
ENDIF
_Xmpad =[_Xpad]+ALLTRIM(_code)
_Xmpop =[_Xpop]+ALLTRIM(_code)
_title =ALLTRIM(XTITLE)
_xkey =ALLTRIM(XKEY)
_xcmmd =ALLTRIM(XCMMD)
DEFINE PAD (_Xmpad) OF _Xmenuprinc PROMPT _title SKIP FOR (!_choice) COLOR SCHEME 3 KEY &_xkey.,_xkey
DEFINE POPUP (_Xmpop) MARGIN RELATIVE SHADOW COLOR SCHEME 4
ON PAD (_Xmpad) OF _Xmenuprinc &_xcmmd
_pos=_pos+1
SKIP +1

*// CREAMOS CADA POPUP DEL PAD
DO WHILE !EOF() .AND. LEFT(XCODE,2)==_code
IF SUBSTR(_profile,_pos,1)=='0'
SKIP +1
_pos=_pos+1
LOOP
ENDIF
_bar =VAL(RIGHT(XCODE,2))
_title =ALLTRIM(XTITLE)
_xkey =ALLTRIM(XKEY)
_xcmmd =ALLTRIM(XCMMD)
DEFINE BAR _bar OF (_Xmpop) PROMPT _title
ON SELECTION BAR _bar OF (_Xmpop) &_xcmmd
_pos=_pos+1
SKIP +1
ENDDO

ENDDO
ON SELECTION PAD (_Xmpad) OF _Xmenuprinc &_xcmmd
CLOSE TABLES ALL
RELEASE _access,_profile

_choice=.T.
ACTIVATE MENU _Xmenuprinc NOWAIT
*//----------------------------------------------------------------------------
*// FIN DE DEFINICIONES DEL MENU PRINCIPAL
*//----------------------------------------------------------------------------
RETURN
END PROC
*****************************
THISFORM.DEACTIVATE()
*****************************
*//
*// Desactivamos menu mientras no tenga foco
*//
_choice=.F.
RETURN
ENDPROC
**************************
THISFORM.ACTIVATE()
**************************
*//
*// Desactivamos Menu principal
*//
IF !_choice
MESSAGEBOX( [CIERRE VENTANA SECUNDARIA!], 64, [MESSAGE] )
RETURN
ENDIF
SHOW MENU _Xmenuprinc
RETURN
ENDPROC

Descripcion de PROFILE.DBF
campos XCODEC(4),XTITLE C(40),XCMMD C(50),XKEY C(10)

1 |1-Contexto |ACTIVATE POPUP _Xpop1 |ALT+1
1 1|1-ABM Cuentas |DO FORM [FCUENTA.SCX] NAME _SFORM
1 2|2-ABM Personal |DO FORM [FPERSON.SCX] NAME _SFORM
1 3|3-Imp. Cuentas |DO FORM [FLPLACUE.SCX] NAME _SFORM
1 |4\-
1 5|4-Cambiar Password |DO FORM [FPASSWD.SCX] NAME _SFORM
2 |2-Otros |ACTIVATE POPUP _Xpop5 |ALT+2
2 1|1-Ayuda |HELP
2 2|2-About |DO FORM [FABOUT.SCX] NAME _SFORM
3 |3-Salir |KEYBOARD CHR(27) |ALT+6

Debes crear ademas un fichero que seguro lo tienes XUSUARIOS.DBF (para el logueo de usuarios) o como sea que se llame en donde seguro tienes el codigo de usuario nombre clave y un campo que debes agregar PROFILE C(cantidad de registros de PROFILE.DBF) donde tendra una secuencia de ceros y uno "0000000000" este campo define que opciones del menu esta habilitados y que no lo estan "1111001111" uno habilita cero deshabilita, obs siempre deben habilitarse los menus (titulos) no asi las opciones KEYBOARD CHR(27) es el comando que yo utilizo para salir del sistema si no te sirve cambialo de acuerdo a tu sistema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables public

Publicado por Dr. Casabe (134 intervenciones) el 26/12/2009 15:44:05
Gracias XX, has sido muy pero muy gentil en eviarme todo este codigo tan logico.

Me toca ahora ponerlo a prueba, para ver como salir de este problema que me tiene un tanto loco.

Gracias hermano de los codigos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables public

Publicado por xx (378 intervenciones) el 27/12/2009 02:04:29
Bueno mira te aseguro que el codigo funciona ya lo tengo implementado y funcional en varios sistemas, y cualquier duda lo posteas y vemos como solucionarlo he detectado algunos errores de tipeo como el campo de PROFILE.DBF es xcode y no xcodec, ademas creo que no te mencione que el campo PROFILE debe copiarse a una variable publica llamada _profile, Cualquier cosa lo posteas. Buena suerte con tu codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar