ViewFlow es un objeto que sirve para presentar listas de registros de un modo gráfico, a modo de presentación de diapositivas. En este tutor vamos a desarrollar un visor de álbumes fotográficos: Para ello partimos de un proyecto de datos cuya estructura de tablas siguiente: 1
Álbumes: Fotos De la estructura de tablas es conveniente destacar la creación del campo PUNT_FOTO en la tabla de álbumes. Se trata de un enlace de tipo Singular de plural de posición y mediante él enlazaremos con la primera foto del álbum. Este enlace será usado para mostrar la foto en el formulario del ViewFlow de álbumes: 2
En el proyecto de datos, además, hemos creado una variable global de tipo numérico y con persistencia en memoria que será necesaria para obtener las fotos de un álbum. El proyecto de datos es heredado por un proyecto de aplicación en el que hemos creado objetos visuales básicos (rejillas, formularios, búsquedas, etc.) que nos permitirán crear datos. En dicho proyecto de aplicación será donde creemos los ViewFlows. Creación del ViewFlow de álbumes Para crear un objeto de este tipo hacer doble clic sobre el icono (tecla Insert) de Velneo vdevelop V7. de la galería de objetos Las propiedades de este objeto son:» Identificador: ALBUMES.» Nombre: Albumes.» Tabla asociada: ALBUMES.» Modo: Permite definir en qué modo se visualizará el contenido de cada ítem de la lista. Los valores posibles son: o o o Campo objeto dibujo: En cada ítem del control se visualizará el contenido de un campo de tipo objeto dibujo de la tabla en curso. Formulario: En cada ítem del control se presentará un formulario de la tabla asociada al objeto. Podremos usar cualquier formulario declarado tanto en el proyecto en curso o como en cualquier proyecto heredado. En este caso seleccionaremos el valor Formulario.» Formulario: ALBUM_VIEW_FLOW. 3
» Ancho: Longitud horizontal en píxeles del formulario. Especificaremos el valor 208.» Alto: Longitud vertical en píxeles del formulario Especificaremos el valor 175.» Título opcional: Permite definir el título de cada ítem del objeto formulario por medio de una fórmula que podremos escribir usando el asistente para edición de fórmulas. Para ello debemos pulsar el botón que aparece al editar esta propiedad y que nos abre el asistente. En este caso no especificaremos título alguno.» Fuente: Esta propiedad permite establecer la fuente que se usará para mostrar el título definido en la propiedad anterior. Dado que no hemos establecido ninguno, no modificaremos este parámetro.» Color de texto: En esta propiedad seleccionaremos el color del texto declarado en la propiedad Título opcional. Junto al nombre del color se presenta una muestra del mismo, pulsar sobre ella para editarlo y/o seleccionar otro color. Dado que no hemos establecido ninguno, no modificaremos este parámetro.» Formulario de alta: Formulario del proyecto en curso o de un proyecto heredado que será usado para dar de alta una ficha desde este objeto. Seleccionaremos el formulario ALBUM.» Formulario de modificación: Formulario del proyecto en curso o de un proyecto heredado que será para editar una ficha desde este objeto. Seleccionaremos el formulario ALBUM.» Formulario de baja: Formulario del proyecto en curso o de un proyecto heredado que será para eliminar una ficha desde este objeto. Seleccionaremos el formulario ALBUM.» Tipo de menú de contexto: El menú de contexto es el que aparece cuando el usuario final hace clic con el botón derecho del ratón. Los valores posibles son:» Ninguno: El objeto carecerá de menú de contexto.» Por defecto: El objeto dispondrá de un menú de contexto creado automáticamente por el sistema. Este será el valor que seleccionemos.» Personalizado: El menú de contexto del objeto será un objeto menú contenido en el proyecto.» Toolbar: Si seleccionamos una <TOOLB>toolbar</TOOLB> en este parámetro, cada vez que usemos esta objeto, éste llevará embebida la toolbar seleccionada. En este caso no seleccionaremos ninguna. 4
» Timer (Milisegundos): Es un reloj que permitirá ejecutar automáticamente uno o varios eventos declarados en el objeto de forma periódica. En este parámetro se indicará el tiempo, en milisegundos, para cada iteración del timer. Si el valor es 0, querrá decir que no se activará el timer. Dado que no vamos a usarlo, no modificaremos su valor. Creación del ViewFlow de fotos Para crear un objeto de este tipo hacer doble clic sobre el icono (tecla Insert) de Velneo vdevelop V7. de la galería de objetos Las propiedades de este objeto son:» Identificador: FOTOS.» Nombre: Fotos.» Tabla asociada: FOTOS. Modo: Seleccionaremos el valor Formulario.» Formulario: FOTO_VIEW_FLOW.» Ancho: Especificaremos el valor 325.» Alto: Especificaremos el valor 275.» Título opcional: Permite definir el título de cada ítem del objeto formulario por medio de una fórmula que podremos escribir usando el asistente para edición de fórmulas. Para ello debemos pulsar el botón que aparece al editar esta propiedad y que nos abre el asistente. En este caso especificaremos el campo NAME de la tabla: #NAME.» Fuente: Dejaremos la fuente que el sistema propone por defecto.» Color de texto: Seleccionaremos el valor RGB 255-255-255.» Formulario de alta: Seleccionaremos el formulario FOTO.» Formulario de modificación: Seleccionaremos el formulario FOTO.» Formulario de baja: Seleccionaremos el formulario FOTO.» Tipo de menú de contexto: Seleccionaremos el valor Por defecto.» Toolbar: No seleccionaremos ninguna.» Timer (Milisegundos): Dado que no vamos a usarlo, no modificaremos su valor. Estos ViewFlow serán usados en el formulario principal del proyecto (MAIN). 5
Formulario principal del proyecto Se trata de un formulario que no esta asociado a ninguna tabla. En este formulario incluiremos los dos ViewFlows creados con anterioridad. Para ello, además de dichos objetos, necesitaremos crear dos procesos, uno para cargar la lista de álbums en un ViewFlow y otro para cargar las fotos de un álbum en el otro. Proceso de carga de álbumes Tiene las propiedades siguientes:» Identificador: CARGAR_ALBUMES.» Nombre: Cargar álbumes.» Tabla asociada:.ninguna.» Tabla destino: ALBUMES.» Destino: Lista. Dado que el proceso va a ser ejecutado desde un formulario sin origen tampoco tendrá origen. Dado que el proceso va a alimentar el ViewFlow de álbumes la salida del mismo será una lista de esa misma tabla. Su contenido será: El proceso carga los álbumes por fecha en orden ascendente, invierte la lista obtenida para que esté ordenada en orden descendente y la envía a la salida del proceso. En el formulario añadiremos un control de tipo Control Objeto Contenedores) y le estableceremos las propiedades siguientes: (del grupo de controles» Identificador: ALBUMES.» Objeto 1: CARGAR_ALBUMES (proceso).» Objeto 2: ALBUMES (ViewFlow). Proceso de carga de fotos de un álbum Tiene las propiedades siguientes:» Identificador: CARGAR_FOTOS_ALBUM.» Nombre: Cargar las fotos del álbum seleccionado.» Tabla asociada:.ninguna.» Tabla destino: FOTOS. 6
» Destino: Lista. Dado que el proceso va a ser ejecutado desde un formulario sin origen tampoco tendrá origen. Dado que el proceso va a alimentar el ViewFlow de fotos la salida del mismo será una lista de esa misma tabla. Su contenido será: El proceso carga las fotos por el índice ALBUMES, resolviendo el álbum con la variable global ALBUM_SEL declarada en el proyecto de datos y la envía a la salida del proceso. En el formulario añadiremos un control de tipo Control Objeto Contenedores) y le estableceremos las propiedades siguientes: (del grupo de controles» Identificador: FOTOS.» Objeto 1: CARGAR_FOTOS_ALBUM (proceso).» Objeto 2: FOTOS (ViewFlow). El siguiente paso será programar la sincronización entre el ViewFlow de álbumes y el de fotos, es decir, que al seleccionar un álbum se carguen sus fotos. Para ello crearemos en el formulario MAIN un evento al que llamaremos ON_SEL_ALBUM: Este evento lo que hace es leer la ficha seleccionada en el ViewFlow de álbumes, modifica la variable global ALBUM_SEL con el ID del álbum seleccionado y recalcula el ViewFlow de fotos que, recordemos, cargaba las fotos en función del valor de dicha variable global. Dado que este evento tendrá que ser disparado cada vez que cambiemos el álbum seleccionado en el ViewFlow de álbumes, crearemos la siguiente conexión de evento: 7
Para que al abrir el formulario principal de la aplicación se carguen las fotos del primer álbum, lo que hemos hecho ha sido crear otro evento que hace lo siguiente: Lo que hace es ejecutar el mismo proceso que el de la carga del ViewFlow de álbumes para obtener el ID del primer álbum y recalcular el ViewFlow de fotos. 8