Avances de FoxyRb (Ribbon)

299 views
Skip to first unread message

Antonio Meza

unread,
Jan 31, 2016, 5:25:33 PM1/31/16
to Comunidad de Visual Foxpro en Español
Hola!!

Solo para comentarles que sigo trabajando en mis tiempos libres y agregando y puliendo foxyRb, que es otro Ribbon mas a la lista de los magníficos que hay para VFP y OpenSource!, bueno foxyRb no se si entre en esa categoría de magníficos, ya que eso es algo que ustedes decidirán jejeje

Agregue una nueva función que permite agregar pestañas personalizadas, .AddTabCustom(_objectClassName) donde ustedes diseñan su propia clase del tipo que sea de objeto y lo pueden agregar a las pestañas, por ejemplo en la captura que voy a poner agregue una simple clase TextBox de VFP, después de la pestaña Salir, eso si, la clase que vayan a agregar ya tiene que tener todo programado, aquí lo único que hago es posicionar el objeto personalizado, a poco no esta interesante ?? jejej y ya tengo otras ideas mas sobre esto jejej

Pero lo mejor de todo, es que se me ocurrió hacer algo y me salio de maravilla, es decir que uno pueda acomodar los botones a su gusto, dentro de los grupos y la forma de hacerlo es tan simple pero tan simple que no se de donde me llego esa idea jajaja pero bueno resulto y funciona exageradamente fenomenal, en la misma captura podrán ver como se acomodan los botones usando una función que llame .addSeparator() y que tiene 3 valores y funciona exactamente como si fuera una pagina de word, es decir el parámetro 0 "cero", hace un salto de pagina, el parámetro 1 un espacio de linea mostrando una imagen de separación y el parámetro 2 hace un salto de linea, es como trabaja una hoja de forma vertical, pero aquí es de forma horizontal,

Otro punto importante es que hay 4 grupos de botones, y cada grupo se divide en 3 formas diferentes, el grupo 1 son botones pequeños de 16x16, el grupo 2 son de igual tamaño pero muestran texto horizontal, el grupo 3 son botones de 32x32 y muestran texto debajo de ellos, el 4 grupo son botones de 42x42 iguales que el grupo 3, entonces se seleccionan con los numero del 1 as 12, para que sea sencillo, si quiero un icono pequeño solo el icono uso el no. 1, si quiero que me muestre una flecha muestro el 2 y si quiero que muestre el botón una flecha separada del botón, muestro 3, es decir que un botón se parte en 2 opciones, y así se repite, empieza el grupo 2 con el 4,5,6, el 3 con 7,8,9 y el grupo 4 con 10,11,12, entonces no hay necesidad de pasar 2 parámetros solo uno jejeje y se consigue el efecto deseado.

Para mostrar las imágenes es necesario especificar el nombre de la imagen activa e inactiva, esto porque uso un objeto image para mostrarlas, ya que el botón se ve feo jajajaj por lo tanto en el parámetro de la imagen a mostrar deben separar con "/" los dos archivos, el de color y el de gris. 

Hay 2 propiedades para que le digan si quiere que valide si los archivos de imagen existen, y si quieren mostrar o ocultar y no se muestre el feo cuadro gris con la X cuando no se tiene imagen jajaj

Otros detalles importante es que agregue mas parámetros para que ustedes le indique que hacer a los botones cuando se hace click, es decir le pasan el método, función, o acción a realizar, y si no le pasan parámetro, entonces estará el método global que se ejecuta y pasa el ID del botón presionado para que ustedes puedan ahí agregar el código según el botón.

Ahh se me olvidaba para agregar las pestañas deben usar nombres diferentes, al igual que para los grupos, pero para los botones no, ahí usan el mismo nombre, uso un contador para evitar tener que estar cambiando el nombre a los botones (que flojera jajaj), y hay una propiedad que se habilita para que al dar click en el botón te diga, quien soy yo jajajaja bueno no yo realmente si no el botón, que ID tiene, cual es su nombre completo ejemplo: thisform.foxyrb.clientes.abm.boton10, ID 1111110, el boton1 seria 1111101 (Pestaña 11, Grupo 11, Botón 101)

Mejore el código para habilitar o deshabilitar todo, ahora ya no se tiene que usar el PG (PageFrame) solo se menciona el nombre de la pestañas, el nombre del Grupo y el botón, es decir para deshabilitar una pestaña thisform.foxyrb.clientes.enabled = .f. al puro estilo VFP jajaja, ocultarla thisform.foxyrb.clientes.visible = .f., los PageFrame de VFP no tiene la opción de ocultar pero FoxyRb si jajaj y para los grupos y botones igual thisform.foxyrb.clientes.abm.enabled = .f., etc.

El código para mostrar el ribbon de la imagen es el siguiente, en este ejemplo no arrastre nada al formulario todo es por código, pero se puede agregar al formulario no hay problema o incluso al _screen!!! es mas se puede ejecutar desde el load del formulario el código, donde ustedes quieran!!

Para que vean el código bien, reduzcan un momento el zoom de su navegador, para ser honesto es muy sencillo, se ve mucho código pero es por que se agregan michos botones,no se espanten jajaja unas simples lineas de código hacen la magia, por eso les dacia que al estilo de FoxyDb.

 * Agregar Ribbom
    
this.AddObject("foxyrb","foxyrb")
    WITH
this.foxyrb
       
* Propiedades
         * Validar que exista el archivo de Imagen
          
.validateFileImages = .t.
         
* Mostrar Cuadro Gris si no se especificó imagen
          
.showimagesblanck = .f.
       
* Agregar Pestaña Menú
         
.AddTabMain("FoxyRb","FoxyDb","Messagebox('Hola FoxyRb')")
       
* Agregar Pestañas
         
.AddTab("Clientes")
         
.AddTab("Utilerias","Utilerias")
       
* Agregar Tab Texto
         
.AddTabText("Salir","Salir","thisform.release()")
       
* Añadir Tab Personalizado
         
.AddTabCustom("textbox")
       
* Agregar Grupos a Pestañas
         
* Clientes
           
.AddGroup("clientes","abm","Clientes",.t.,"Messagebox('ABM Clientes')")
           
.AddGroup("Clientes","impresión","Vista Previa e Impresión",.f.)
           
.AddGroup("Clientes","reportes","Reportes de Clientes",.t.,"messagebox('Reportes')")
           
.AddGroup("Clientes","Utilitarias","Otros Servicios",.f.)
         
* Utilitarias
           
.AddGroup("utilerias","util","Utilerías del Sistema",.t.,"Messagebox('Grupo Utilerias del sistema')")
       
* Agregar Detalles al grupo
         
* Clientes
           
* ABM
             
.AddDetail("Clientes","abm","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",7,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
             
.AddDetail("Clientes","abm","Boton","Editar","48x48\accept_page.png",8,"Agregar un Nuevo Cliente","messagebox('Editar')")
             
.AddDetail("Clientes","abm","Boton","Guardar","48x48\accept_page.png",9,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
           
* impresión
             
.AddDetail("Clientes","impresion","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",7,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
             
.AddDetail("Clientes","impresion","Boton","Editar","48x48\accept_page.png",8,"Agregar un Nuevo Cliente","messagebox('Editar')")
            
.AddDetail("Clientes","impresion","Boton","Guardar","48x48\accept_page.png",9,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
           
* Reportes
              
.addSeparator("Clientes","reportes","Boton",0)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
              
.addSeparator("Clientes","reportes","Boton",2)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
             
.addSeparator("Clientes","reportes","Boton",2)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
             
.addSeparator("Clientes","reportes","Boton",0)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",9,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.addSeparator("Clientes","reportes","Boton",0)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
             
.addSeparator("Clientes","reportes","Boton",2)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",2,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",3,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
             
.addSeparator("Clientes","reportes","Boton",2)
                
.AddDetail("Clientes","reportes","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",1,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
                
.AddDetail("Clientes","reportes","Boton","Editar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Editar')")
                
.AddDetail("Clientes","reportes","Boton","Guardar","48x48\accept_page.png",1,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
         
* Utilerias
           
* Util
             
.AddDetail("utilerias","util","Boton","Nuevo","48x48\accept_page.png/48x48\mail.png",7,"Agregar un Nuevo Cliente","messagebox('Nuevo')")
             
.AddDetail("utilerias","util","Boton","Editar","48x48\accept_page.png",8,"Agregar un Nuevo Cliente","messagebox('Editar')")
             
.AddDetail("utilerias","util","Boton","Guardar","48x48\accept_page.png",9,"Agregar un Nuevo Cliente","messagebox('Guardar')","messagebox('Guardar Como')")
       
* Mostrar Ribbom
         
.Show()
   ENDWITH

Espero poder compartir el código en unas 2 semanas o menos dependiendo que tanto pueda avanzar.

Esta basado en Office 2016 que no usa efectos 3d todo es plano y solo son 2 archivos foxyrb.vcx y foxyrb.vcz, las imágenes de los botones van por su cuenta y los colores se pueden cambiar desde propiedades, ya tengo avance en el Tooltip como lo muestra el office 2016, para que sea parecido, y el código al presionar ALT ya me lo pasaron para integrarlo, y funciona el Tab de todas formas.

Cualquier idea es bien recibida.

saludos
Antonio Meza

Captura.PNG

Saúl Piña

unread,
Jan 31, 2016, 6:05:07 PM1/31/16
to Comunidad de Visual Foxpro en Español
Bien antonio, con esto se complementa aun mas la FoxyRb que estas opciones sirven de mucho... recordando que en lugar de botones, se está utilizando el objeto image.

Gracias.

Antonio Meza

unread,
Jan 31, 2016, 6:18:12 PM1/31/16
to Comunidad de Visual Foxpro en Español
Bueno realmente hay un botón invisible jajaja es un container con un botón y una imagen.

saludos

francisco prieto

unread,
Feb 1, 2016, 5:49:06 AM2/1/16
to publicesvfoxpro
Antonio,

Cuando tengas algo armado y antes de publicarlo en el grupo, me parece piola revisar los ultimos 2 años de correo de otros Ribbon para ver si tu ribbon tiene corregido ese problema que comentan esos usuarios, porque muchas veces los problemas indicados en controles similares te dan un nuevo punto de partida para las pruebas.

Saludos,

Pancho
Córdoba
Argentina

Antonio Meza

unread,
Feb 1, 2016, 2:33:02 PM2/1/16
to Comunidad de Visual Foxpro en Español
Muy buena observación!! Voy a buscar los mensajes y darles una revisada.

saludos
Antonio Meza

Antonio Meza

unread,
Feb 1, 2016, 3:02:54 PM2/1/16
to Comunidad de Visual Foxpro en Español
Le di una pasada rápida, y de todos me gusto este link de Hernan Canon que tiene una comparativa muy interesante!!!

Antonio Meza

El lunes, 1 de febrero de 2016, 4:49:06 (UTC-6), francisco prieto escribió:

francisco prieto

unread,
Feb 1, 2016, 3:08:24 PM2/1/16
to publicesvfoxpro
Interesante documento, bueno tendras que escribir lo propio para el tuyo.

Saludos,

Pancho
Córdoba
Argentina
Reply all
Reply to author
Forward
0 new messages