Sunteți pe pagina 1din 8

Creando un Organizador o Agenda de Direcciones

Posted By admin On Marzo 22, 2008 @ 2:20 pm In FoxPro Controles, FoxPro General | 1 Comment

(No Ratings Yet)

En el nuevo proyecto que estoy trabajando, tengo la necesidad de presentar la cierta información a
manera de una carpeta con pestañas de colores. A mi mente acudió la imagen de una agenda, como la
que maneja Lotus Organizer.

En mis controles de dbi-tech, existe uno muy llamativo llamado ctSpiral:


Es fácil cambiar colores, poner paginas … pero… hasta el momento no encontré forma de ponerle
controles DENTRO de este control al menos para ver la información. Después intente con el control
ActiveX de FairPoint llamado TabPro. Un control que se ve excelente, pero mas enfocado a VB que a
VFP. Por lo que poner los controles dentro de este también es un poco complicado. Así que decidí hacer
mi propia forma semejando un organizador.

Un poco mas sencillo verdad? Pero funciona y 100% VFP, aquí utilice solamente el control
PAGEFRAME, LIST, SHAPE y listo. La emulación es bastante buena.
Al iniciar el control y dar un clic en la pestana de la A, nos muestra del lado izquierdo los datos de los
clientes, opcionalmente se le pasa un parámetro para ver si muestra o no los teléfonos.
Cuando se da un clic en la siguiente pestana, vemos que se “abre” poniendo del lado derecho la letra
anterior seleccionada, y conforme pasamos las letras, estas se van actualizando, dando la sensación de
que se “pasan” las hojas, hasta llegar al final.

Los colores, identifican cada letra (si no les gustan los pueden cambiar, ya que simplemente fui
seleccionándolos conforme esta la paleta de colores).

Se creo un cuadro y círculos para dar la sensación de “anillos”. Además puede agregar nuevos datos,
borrar o editar, pulsando con el botón derecho del ratón.
Lógicamente, estas formas deberán adaptarse a su sistema, como mas les convenga.

El cambio de color para los teléfonos, simplemente es el color del elemento desactivado y lo agregamos
a lista anteponiendo un ‘\’, al inicio. Así, queda el nombre del cliente (activo) con un color y el teléfono
(desactivado) con otro color.

Si no se desean ver los teléfonos, hay una variable dentro del código para ocultarlo y que quede así:
Esto ya es decisión de cada uno. El código es por demás sencillo.

En primer lugar tenemos que tener nuestra tabla a trabajar, que puede estar en el DATAENVIROMENT
de esta forma o abrirla anterior o posteriormente en el INIT.

Básicamente todo esta en el evento CLICK del PAGEFRAME junto con 2 procedimientos.

El código (resumido) del evento CLICK del PageFrame es como sigue:

* Ponemos el procedimiento de activación de información en esta sección, ya que es


mas
* fácil el mantenimiento que en cada evento CLICK de cada pagina individual
* Tendrías que hacer 26 procedimientos, de esta forma, solo hacemos 1
* y le pasamos los parámetros correspondientes de letras, tabla a usar y campo a
desplegar
*

ln = this.ActivePage
* Ver la 1er hoja
thisform.pageframe2.Visible = .T.
thisform.list2.Visible = .T.
DO CASE
CASE ln = 1
thisform.pageframe2.Visible = .F.
thisform.list2.Visible = .f.
lcLetra = 'A'
lcLetraBack = ' '
CASE ln = 2
lcLetra = 'B'
lcLetraBack = 'A'
thisform.pageframe2.page1.ZOrder
CASE ln = 3
lcLetra = 'C'
lcLetraBack = 'B'
thisform.pageframe2.page2.ZOrder
CASE ln = 4
lcLetra = 'D'
lcLetraBack = 'C'
thisform.pageframe2.page3.ZOrder

...... (continua en resto de las letras)

CASE ln = 26
lcLetra = 'Z'
lcLetraBack = 'Y'
thisform.pageframe2.page25.ZOrder
CASE ln = 27
lcLetra = ' '
lcLetraBack = 'Z'
thisform.pageframe2.page26.ZOrder
ENDCASE

* Mostrar la info
* Formato:
* cLetra = Letra inicial a desplegar
* cTabla = Nombre de la tabla a usar (que este abierta)
* cCampo = Nombre del campo a desplegar
* cTelShow = .T. si se desea desplegar el teléfono, .F. si no
* cCampTel = Nombre del campo telefónico a desplegar
*
thisform.ShowData( lcLetra, 'clientes_pfm', 'cliente', .F., 'telefonos' )
thisform.ShowData2( lcLetraBack, 'clientes_pfm', 'cliente', .F., 'telefonos' )

Y necesitamos 2 procedimientos creados llamado SHOWDATA y SHOWDATA2. Que básicamente es


lo mismo, pero para cada una de las listas. El procedimiento hace lo siguiente:

PARAMETERS cLetra, cTabla, cCampo, cTelShow, cCampTel


IF PARAMETERS() = 0
cLetra = 'A'
ENDIF
SELECT (cTabla)
thisform.List1.Clear
nItems = 0
SCAN FOR cliente = cLetra
thisform.List1.AddItem( &cCampo )
nItems = nItems + 1
IF cTelShow = .T.
thisform.List1.AddItem( "\" + SPACE(10) + ALLTRIM( &cCampTel ) )
thisform.List1.AddItem( '\-' )
ENDIF
ENDSCAN
* Mostrar cuantos
thisform.txtTot1.Value = 'Clientes de esta letra: ' + STR( nItems, 4
* Mostrar cuantos
thisform.txtTot1.Value = 'Clientes de esta letra: ' + STR( nItems, 4 )

Y es todo. Se crea un menú tipo shorcut, con las opciones deseadas, y en el método RIGHCLICK de la
caja de lista, se pone:

lcItemSel = this.ListItem( this.ListIndex)


DO organizer.mpr WITH lcItemSel

Donde se identifica primero el elemento de la lista (si se va a eliminar o modificar o imprimir) y a


continuación se ejecuta el menú corto con dicho parámetro.

Article printed from IDSFoxPro Blog: http://foxpro.idsystemsmx.com/wordpress

URL to article: http://foxpro.idsystemsmx.com/wordpress/?p=12

URLs in this post:


[1] AQUI: http://FoxPro.idsystemsmx.com/wordpress/wp-content/uploads/2007/10/organizer.zip
[2] Image: http://foxpro.idsystemsmx.com/wordpress/?p=12&print=1

S-ar putea să vă placă și