En
muchas aplicaciones se requiere llevar el control y seguimiento
de fechas, para hacer la interfase del usuario más
amigable y versátil, muchos desarrolladores incluyen
una ventana de calendario para permitirle al usuario seleccionar
fechas y maniobrar entre meses y años.
Con
la liberación de la versión 6 de Clarion se
introduce el Control template Calendar. Este template es
un control Button (botón) que cuando se oprime, despliega
una ventana emergente (popup) mostrando un calendario; al
seleccionar una fecha del calendario se regresa la Fecha
al control Entry que recibe el valor. El Control Template
Calendar tiene opciones para controlar el titulo de la ventana,
extender las características de despliegue y refrescar
las opciones de la ventana.
Pero,
¿que pasa cuando queremos modificar otros aspectos
de despliegue de este control? - por ejemplo: tipo de letra,
tamaño, color, etc. Aquí te presentamos unos
pequeños consejos que te servirán para derivar
un método de la Clase Calendar, y modificar la estructura
de la ventana para ajustarla a tus necesidades.
Da
click aquí para bajar el archivo .app de ejemplo.
1.
Empecemos colocando el "Control Calendar" en la ventana,
una vez hecho esto nos iremos al dialogo de propiedades,
en la pestaña Actions, dar click al botón
Calendar Lookup Prompts y especificar en la pestaña
General que control recibirá el valor (Fecha) seleccionado
por el usuario.
2.
Posteriormente, vaya a la pestaña Classes
del "Control Calendar", aquí es donde realmente empieza
la diversión. Existen dos clases del Calendario:
CalendarClass y CalendarSmallClass, y cada una de ellas
tiene una interfase diferente. Para probar esto, simplemente
cambie la clase por default y sustitúyala según
su gusto, a continuación te mostramos las características
de cada una de ellas,
La clase por default: CalendarClass (ABC) despliega una
interfase estilo WinXP, como se muestra en la sig. Imagen:

Si
cambiamos a CalendarSmallClass como la clase base, veremos
una interfase (ventana) mas amplia, con un reloj digital
y algunas otras opciones para navegar entre fechas

Si
eres un desarrollador exigente contigo mismo y deseas brindarle
mayor ‘valor’ a tu calendario, puedes utilizar
tu propia interfase de Calendario. Para lograr esto debes
utilizar como clase base CalendarBaseClass, y ‘llamar’
tu propia ventana (estructura WINDOW) en el método
ASK. Vayamos a los hechos…
3.
Primero veamos los Embed’s de este control,
para esto regresemos a la pestaña Actions, y seleccionemos
el boton Embed. En la sección Local Objects, podemos
ver que hay tres métodos virtuales (Embeds) disponibles
para CalendarBaseClass. Para nuestro objetivo nos enfocaremos
en el método Ask:
Para
el paso final iniciaremos incluyendo nuestra ventana (definición
de nuestra estructura Window), siendo ésta un clon
de alguna de las estructuras window que vienen con la librería
ABC. En el archivo ABUTILUI.INC (localizado en la carpeta
LIBSRC del directorio de instalación de Clarion 6)
podemos ver las dos estructuras de ventana calendario para
cada una de las clases Calendar (CalendarClass y CalendarSmallClass).
Seleccione la estructura que más se acerque a sus
necesidades, seleccione todo el bloque de texto y cópielo
(ctrl-C).
En
la sección Data del método Ask que se mostró
arriba, pegue (Ctrl-V) la estructura Window en este punto
de inserción de código (Embed). De aquí
en adelante, podremos modificar la ventana según
nuestras especificaciones:

| TIP
1: Después de pegar el código
en el Embed, es posible visualizar la ventana con
el (Window Formatter), y editarla desde ahí.
Para
lograr esto debemos presionar el botón (SOURCE)
de la ventana de embeds,
|
 |
|
Localizar
el embed que copiamos y teniendo el cursor en el embed,
presionar (CTRL.-F).
|
 |
|
Esto
nos llevara al Formateador de Ventanas y ahí
podemos modificar la venta a nuestro gusto , los cambios
que se hagan en el Formateador de Ventanas, se reflejaran
en el código.
|
 |
|
TIP2:
Si deseas que en el calendario se muestren
los nombre de los meses y de los días en Español,
es necesario Modificar los Grupos de Etiquetas declarados
para éstas constantes.
Éstas
declaraciones de Constantes se encuentran en el archivo,
ABUTILUI.INC que se encuentra dentro del fólder
LIBSRC, en la carpeta donde está instalado
Clarion.
|
 |
Finalmente,
localice el método Ask en el archivo ABUTIL.CLW (misma
ubicación que ABUTILUI.INC) ya sea de la clase CalendarClass
o CalendarSmallClass (no importa de cual clase sea ya que
ambos métodos son idénticos), y copie el siguiente
código en el CODE embed de nuestro método
Ask derivado:
OPEN(Screen)
SELF.CtrlSun = ?Sun
SELF.CtrlExit = ?Exit
SELF.CtrlToday = ?Today
SELF.CtrlDay1 = ?Day1
SELF.CtrlDay42 = ?Day42
SELF.CtrlPrevMonth = ?PrevMonth
SELF.CtrlNextMonth = ?NextMonth
SELF.CtrlPrevYear = ?PrevYear
SELF.CtrlNextYear = ?NextYear
SELF.CtrlMore7 = ?More7
SELF.CtrlLess7 = ?Less7
SELF.CtrlMore15 = 0
SELF.CtrlLess15 = 0
SELF.CtrlCurrTime = 0
SELF.CtrlMonthYear = ?MonthYear
SELF.CtrlTheDate = 0
SELF.CtrlTitleBG = ?BoxTitleBackground
SELF.CtrlBodyBG = ?BoxBodyBackground
RETURN PARENT.Ask(pTitle,pDate)
Después de esto, lo único que falta es compilar,
probar y ajustar lo que se requiera!
NOTA:
ASEGURESE de NO renombrar o eliminar variables o controles
de la pantalla, si no requiere algún control de la
ventana simplemente active la propiedad HIDE de ese control.
Esta
interfase permite también fácilmente incluir
la ventana de Calendario en la ventana original en lugar
de desplegarlo en una ventana emergente… pero eso,
es otra historia… que podremos abordar en su momento!