Introducción
Muchas veces he leído en los distintos foros referidos a Visual FoxPro, mensajes sobre el tema de crear una barra de herramientas en un formulario. En este artículo expondré un ejemplo de un formulario SDI (Interfaz de un solo documento - Single Document Interface) en el cual crearemos una barra de herramientas en tiempo de ejecución.
Lo necesario
Para crear un formulario SDI, Visual FoxPro cuenta con un tipo de formulario llamado "formulario de nivel superior". Estos formularios aparecen como ventanas independientes sobre el escritorio de Windows y también aparecen en la barra de tareas de Windows. Para lograr un formulario de nivel superior, solo debemos configurar la propiedad ShowWindow = 2 (Como formulario de nivel superior).
Para crear la barra de herramientas contenida en un formulario de nivel superior, debemos indicar esto configurando la propiedad ShowWindow = 1 (En formulario de nivel superior)
La clase ToolBar
Vamos a definir nuestra barra de herramientas programáticamente a partir de la clase ToolBar. Cuando se crea una barra de herramientas, VFP coloca los controles de izquierda a derecha en el orden que aparecen en la definición de la clase.
Escribiremos en los métodos Clicks de los controles añadidos, un código simple como un MESSAGEBOX("Hola !") para mostrar el funcionamiento de cada control dentro de la barra de tareas.
El formulario
En formulario del ejemplo vamos a incorporar varios botones de comandos: uno crear la barra de herramientas, cuatro para acoplar la barra de herramientas en las distintas posiciones permitidas, y otro para desacoplar la barra de herramientas.
Vamos a crear la propiedad personalizada ThisForm.oMiToolBar para crear y mantener la barra de herramientas dentro del alcance del formulario.
Una vez ejecutado el código mostrado mas abajo, obtendremos un formulario como el de la siguiente figura.
El código
En el siguiente código está las definiciones de nuestras clases MiForm y MiToolBar.
PUBLIC goMiForm goMiForm = CREATEOBJECT("MiForm") goMiForm.SHOW(1) RETURN *-- *-- Clase MiForm *-- DEFINE CLASS MiForm AS FORM *-- Propiedades SHOWWINDOW = 2 && Formulario de nivel superior AUTOCENTER = .T. ALWAYSONTOP = .T. CAPTION = "Ejemplo de ToolBar en un formulario SDI" NAME = "MiForm" *-- Objetos ADD OBJECT cmd1 AS COMMANDBUTTON WITH ; TOP = 14, LEFT = 120, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Crear ToolBar", NAME = "cmd1" ADD OBJECT cmd2 AS COMMANDBUTTON WITH ; TOP = 50, LEFT = 120, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Acoplar arriba", NAME = "cmd2" ADD OBJECT cmd3 AS COMMANDBUTTON WITH ; TOP = 74, LEFT = 60, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Acoplar izquierda", NAME = "cmd3" ADD OBJECT cmd4 AS COMMANDBUTTON WITH ; TOP = 74, LEFT = 180, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Acoplar derecha", NAME = "cmd4" ADD OBJECT cmd5 AS COMMANDBUTTON WITH ; TOP = 98, LEFT = 120, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Acoplar abajo", NAME = "cmd5" ADD OBJECT cmd6 AS COMMANDBUTTON WITH ; TOP = 134, LEFT = 120, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Desacoplar", NAME = "cmd6" ADD OBJECT cmdSalir AS COMMANDBUTTON WITH ; TOP = 182, LEFT = 120, HEIGHT = 24, WIDTH = 120, ; CAPTION = "Salir", NAME = "cmdSalir" *-- Metodos PROCEDURE cmd1.CLICK IF NOT PEMSTATUS(THISFORM,"oMiToolBar",5) THISFORM.ADDPROPERTY("oMiToolBar",NULL) ENDIF IF ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar = CREATEOBJECT("MiToolBar") THISFORM.oMiToolBar.SHOW ENDIF ENDPROC PROCEDURE cmd2.CLICK IF PEMSTATUS(THISFORM,"oMiToolBar",5) ; AND NOT ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar.DOCK(0) ENDIF ENDPROC PROCEDURE cmd3.CLICK IF PEMSTATUS(THISFORM,"oMiToolBar",5) ; AND NOT ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar.DOCK(1) ENDIF ENDPROC PROCEDURE cmd4.CLICK IF PEMSTATUS(THISFORM,"oMiToolBar",5) ; AND NOT ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar.DOCK(2) ENDIF ENDPROC PROCEDURE cmd5.CLICK IF PEMSTATUS(THISFORM,"oMiToolBar",5) ; AND NOT ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar.DOCK(3) ENDIF ENDPROC PROCEDURE cmd6.CLICK IF PEMSTATUS(THISFORM,"oMiToolBar",5) ; AND NOT ISNULL(THISFORM.oMiToolBar) THISFORM.oMiToolBar.DOCK(-1) ENDIF ENDPROC PROCEDURE cmdSalir.CLICK THISFORM.RELEASE ENDPROC ENDDEFINE *-- *-- Clase MiToolBar *-- DEFINE CLASS MiToolBar AS TOOLBAR *-- Propiedades CAPTION = "Saludo" SHOWTIPS = .T. SHOWWINDOW = 1 && En formulario de nivel superior NAME = "MiToolBar" *-- Objetos ADD OBJECT cmdEsp AS COMMANDBUTTON WITH ; HEIGHT = 24, WIDTH = 32, ; PICTURE = HOME(1) + "graphics\icons\flags\flgspain.ico", ; CAPTION = "", NAME = "cmdEsp", TOOLTIPTEXT = "Saludo" ADD OBJECT sep1 AS SEPARATOR WITH ; NAME = "sep1" ADD OBJECT cmdBra AS COMMANDBUTTON WITH ; HEIGHT = 24, WIDTH = 32, ; PICTURE = HOME(1) + "graphics\icons\flags\flgbrazl.ico", ; CAPTION = "", NAME = "cmdBra", TOOLTIPTEXT = "Saudação" ADD OBJECT cmdUSA AS COMMANDBUTTON WITH ; HEIGHT = 24, WIDTH = 32, ; PICTURE = HOME(1) + "graphics\icons\flags\flgusa02.ico", ; CAPTION = "", NAME = "cmdUSA", TOOLTIPTEXT = "Greet" ADD OBJECT cmdGer AS COMMANDBUTTON WITH ; HEIGHT = 24, WIDTH = 32, ; PICTURE = HOME(1) + "graphics\icons\flags\flggerm.ico", ; CAPTION = "", NAME = "cmdGer", TOOLTIPTEXT = "Grüß" *-- Metodos PROCEDURE cmdEsp.CLICK MESSAGEBOX("Hola !", 64, "Saludo") ENDPROC PROCEDURE cmdBra.CLICK MESSAGEBOX("Olá !", 64, "Saudação") ENDPROC PROCEDURE cmdUSA.CLICK MESSAGEBOX("Hello !", 64, "Greet") ENDPROC PROCEDURE cmdGer.CLICK MESSAGEBOX("Hallo !", 64, "Grüß") ENDPROC ENDDEFINE
Comentarios
Espero que este ejemplo les sea de utilidad para lograr una interfaz distinta en las aplicaciones desarrolladas. Visual FoxPro trae en la aplicación "Solution" un ejemplo similar donde se muestra un formulario SDI, en el cual se agrega un menú, una barra de herramientas, y se crean ventanas secundarias. Para ver la aplicación "Solution" ejecute:
DO (HOME(2) + "Solution\Solution")Hasta la próxima.
Luis María Guayán
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.