FoxRibbon - Habilitar, deshabilitar botones al iniciar

453 views
Skip to first unread message

Eric Natareno Guerra

unread,
May 14, 2012, 2:14:45 AM5/14/12
to publicesvfoxpro
Hola amigos, estoy implementando la maravillosa clase de Guillermo Carrero a un proyecto pero no logro hacer que me deshabilite algunos botones a la hora de iniciar la aplicacion, esto porque quiero evitar que algunos usuarios ingresen a algunos formularios.  La pregunta es donde debo escribir el codigo para deshabilitar ThisEnabled(.f.) algunos botones. Por su ayuda muchas gracias.

Guillermo Carrero

unread,
May 14, 2012, 12:22:24 PM5/14/12
to publice...@googlegroups.com
Hola Tqanyouman:

Si los botones están contenidos dentro de RibbonGroup y estos a su vez en RibbonTab, prevalece el ThisEnabled() de las clases contenedoras. Al inicio todos estarán habilitados.

Si estos botones fueran autónomos no tendrías este inconveniente.

Para solucionar el tema creas un nuevo método en tu formulario (Ej. Privilegios invocado desde el INIT()) en donde habilitas o deshabilitas con la ayuda de ThisEnabled() tus RibbonPage o RibbonGroup o directamente tus botones en función de tus condiciones.

Ejemplo:

Suponiendo que un usuario final no tiene permisos a Compras. En tu método de privilegios pondrías:

THIS.MiRibbon.RibbonPageCompras.ThisEnabled(IIF(nNivel = 4, .F., .T.))  && Suponiendo que nNivel 4 son compras

Evitando así procesar uno a uno todos los botones relacionados con compras

Si tuvieras un proceso de cambio de usuario solo tendrías que invocar a THISFORM.Previlegios para que el cambio sea actualizado.

Esperando te sirva de ayuda.

Un saludo,

Guillermo Carrero

Eric Natareno Guerra

unread,
May 14, 2012, 2:29:28 PM5/14/12
to publice...@googlegroups.com
Muchas gracias Guillermo por tomar de tu tiempo para ayudarme, fijate que hice lo que me indicas, pero me da el siguiente error:

Allowed DO nesting or expression evaluation level exceeded, 

Hice el método privilegios en el Formulario con el siguiente codigo:

THIS.Ribbon1.Ribbontab3.ThisEnabled(IIF(nNivel = 0, .F., .T.))

y lo invoco en el init del formulario asi, despues de tu código:

LOCAL lnCon
_SCREEN.WINDOWSTATE = 1
WITH THIS
*--Do not use the property WindowState = 2
*--
*--.MyTitleBar.MaximizeForm()
*--
= AFONT(lafontnames)
FOR lnCon = 1 TO ALEN(lafontnames)
.PropertiesPanel.xFont.ADDITEM(lafontnames(lnCon))
ENDFOR

= ADIR(laFilesLng, "lng\*.lng")
FOR lnCon = 1 TO ALEN(laFilesLng, 1)
.Ribbon1.LNGCombo.ADDITEM(PROPER(SUBSTR(laFilesLng(lnCon, 1), 1, LEN(laFilesLng(lnCon, 1)) - 4)))
NEXT

.Old_cFontName = _SCREEN.oRibbon.cFontName
.Old_SeeOutLineGroup = _SCREEN.oRibbon.SeeOutLineGroup
.Old_AutoTabClick = _SCREEN.oRibbon.AutoTabClick
.Old_ShowAnimationPage = _SCREEN.oRibbon.ShowAnimationPage
ENDWITH

thisform.privilegios

Disculpa la molestia, pero con FoxRibbon estoy aprendiendo mucho sobre manejo de clases, métodos, etc., además será posible afectar los botones que están dentro de las clases que son llamadas desde RibbonTab?
Gracias

Guillermo Carrero

unread,
May 14, 2012, 3:18:13 PM5/14/12
to publice...@googlegroups.com
Hola de nuevo:

Tengo la impresión que estás llamando recursivamente al método privilegios(), comenta ThisForm.Privilegios() provisionalmente y prueba para descartar otros métodos.

Un saludo,

Guillermo

Eric Natareno Guerra

unread,
May 14, 2012, 3:40:26 PM5/14/12
to publice...@googlegroups.com
En efecto tienes toda la razón, por estar probando se me olvidó quitar un segmento de código de uno de los botones, pero ya lo quité y funciona de maravillas, a nivel de Ribbontab pero como afecto a los bottones por separado de cada ribbontab, Gracias Guillermo

Guillermo Carrero

unread,
May 14, 2012, 3:47:23 PM5/14/12
to publice...@googlegroups.com
Siguiendo tu ejemplo con:

THIS.Ribbon1.Ribbontab3.MiBoton.ThisEnabled(IIF(nNivel = 0, .F., .T.))

Un saludo,

Eric Natareno Guerra

unread,
May 14, 2012, 4:04:36 PM5/14/12
to publice...@googlegroups.com
Fijate Guillermo que me da este error -Unknown memver miboton- pues lo que sucede es que el boton en cuestion se encuentra en una clase llamada prueba01 y no en el formulario. La clase es invocada por ribbontab3 y el boton se llama boton1. Que podrá ser?  o no se si estoy escribiendo algo mal

Eric Natareno Guerra

unread,
May 14, 2012, 4:50:45 PM5/14/12
to publice...@googlegroups.com
Guillermo, ya encontré lo que estaba escribiendo mal

THIS.Ribbon1.Ribbontab3.MiBoton.ThisEnabled(IIF(nNivel = 0, .F., .T.))                           (Malo)

this.Ribbon1.prueba01.RibbonGroup1.boton1.ThisEnabled(IIF(nNivel = 0, .F., .T.))             (Bueno)

Muchisimas gracias por toda tu ayuda, ahora ya puedo hacer gracias a ti que active o desactive botones y pestañas, fantastico.

Guillermo Carrero

unread,
May 14, 2012, 5:33:11 PM5/14/12
to publice...@googlegroups.com
Te pido disculpas, me olvide de intercalar el RibbonGroup correspondiente.

Saludos

Eric Natareno Guerra

unread,
May 14, 2012, 5:57:51 PM5/14/12
to publice...@googlegroups.com
Al contrario Guillermo yo te pido disculpas a ti por robar tu tiempo. Como te comentaba gracias a ti estoy aprendiendo mucho sobre las clases. Saludos

Mario Oviedo

unread,
May 23, 2012, 12:40:23 PM5/23/12
to publice...@googlegroups.com
que generosidad de sr. Carrero

Ronald Castro

unread,
Jul 25, 2018, 5:42:54 PM7/25/18
to Comunidad de Visual Foxpro en Español
hola amigos buenas tardes les agradezco de antemano una ayudita, estuve revisando y ya logre mi proyecto para activar los botones del ribbontab, ahora en mi proyecto le inserte un sidebar, pero me sale el mismo error "scrollmenu es un miembro desconocido"

el codigo es algo asi

this.scrollmenu.sidebargroup1.ribbonbuttonh1.thisenabled (.F.) && es aquí donde me sale el error

o que es lo que hago mal o me falta hacer

Viktor .

unread,
Jul 26, 2018, 3:08:57 PM7/26/18
to publice...@googlegroups.com
Hola estoy aplicando esta excelente herramienta de Guillermo Carrero(qepd).. estoy en la seguridad precisamente en la clase scrollcontainer1 es donde estoy aplicando los permisos
IF myuser.nivel=1
.Designer.visible=.T.
.Ribbontab1.visible=.T.
.Ribbontab2.visible=.T.
.Ribbontab3.visible= .T.
.Ribbontab4.visible= .T.
.Ribbontab5.visible= .F.
.Ribbontab2.click()
de los botones del menu no de la barra que depende el menu,,

Ronald Castro

unread,
Jul 26, 2018, 9:30:57 PM7/26/18
to Comunidad de Visual Foxpro en Español

Gracias por tu pronta respuesta, te comento mejor con una pantalla del mensaje que me aparece y lo que quiero lograr, para poder desactivar al iniciar el programa los privilegios, agradezco la ayuda

Viktor .

unread,
Jul 27, 2018, 11:25:55 AM7/27/18
to publice...@googlegroups.com
te anexo mis pantallas con los roles por usuario.. pero dejame en el transcurso inventigo por que tengo dos menus laterales que tambien les voy a dar permiso..
aqui lo que hago es asignarle a StatusBarText del boton principal un numero.. creo una tabla de atributos con estos atributos y se los asigno al usuario.. te anexo otra patalla de los atributos..

atrib1.png
login1.png
login2.png
login3.png

Ronald Castro

unread,
Jul 28, 2018, 2:49:00 PM7/28/18
to publice...@googlegroups.com
Muy buena opción, pero te agradezco si tienes la forma para administrar el scroll, gracias 

Carlos E. JR.

unread,
Jul 28, 2018, 3:49:59 PM7/28/18
to publice...@googlegroups.com
hola
en el texto y en la imagen en ambas escribes....... thisenabled
en lugar de.....this.enabled
saludos 

Ronald Castro

unread,
Jul 28, 2018, 4:12:47 PM7/28/18
to publice...@googlegroups.com
Si en la versión del foxribbon para desactivar debes utilizar el método thisenabled

Clemente Acevedo

unread,
Jul 29, 2018, 9:24:00 AM7/29/18
to publice...@googlegroups.com
Participo poco en el grupo, por el tiempo que tengo para dar respuestas.  
Te doy una idea. Yo lo haría en el (INI) del scrollmenu1 ....... según veo en la pantalla que adjuntas...
Algo asi:
(INI del scrollmenu1)
*---
*1.Te hago la observación de que no se como das acceso  al usuario a esta opción.... así que lo supongo.....
*---
WITH THIS 
IF (USUARIO CON ACCESO)
.sidegroup1.ribbonbuttomv1.thisenabled(.T.)
ELSE
       .sidegroup1.ribbonbuttomv1.thisenabled(.F.) 
ENDIF
ENDWITH

*-----
Lo importante que debes buscar la forma de acceder directamente al control o grupo especificando la ruta completa de como llegar a el... y habilitar o deshabilitar la propiedad .thisenabled()








Ronald Castro

unread,
Jul 29, 2018, 8:59:13 PM7/29/18
to Comunidad de Visual Foxpro en Español
gracias clemente, me había trabado en esta opción me fue de mucha ayuda, ahora a darle los privilegios, como aporte la clase scroll no es un contenedor directo por lo que no se podrá hacer manejos de sus controles en el formulario principal.
Reply all
Reply to author
Forward
0 new messages