7 de octubre de 2005

Crear una barra de herramientas en un formulario SDI

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