You are on page 1of 101

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

Todas las prcticas han sido, diseadas, montadas y comprobado, su correcto funcionamiento por el Autor: Francisco Guillamon (Fraguibo) Todos los derechos estn reservados por el autor. Ao de realizacin: 2004 2005
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

MUY IMPORTANTE:
Este es un pequeo Cursillo , esta dirigido para todos aquellos, que empiezan en la programacin, pero que tengan algunas nociones, a un que sean pequeas de la programacin en Clipper .
Durante las prcticas iremos montando y ensamblando, poco a poco un programa completo, para el control de un Archivo de Pelculas , empezando desde la primera lnea de Cdigo hasta el archivo final ArchiPel.exe . Todas las practicas han sido escritas, realizadas y comprobadas, por el Autor, en un PC Pentium-4 de 30 GH , con 500 Mg de memoria Ram , Disco duro de 80 Gigas y Sistema Operativo Windows XP Profesional . Han colaborado en la correccin de errores, los siguientes compaeros del Foro de C3Compilador : manuel@telecable.es, xevicomas@terra.es, truesoft@usuarios.retecal.es y Bruno Cantero www.c3compiler.com El Autor; Francisco Guillamon.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

Practica 1
Configuracin del Area de Trabajo.
Lo primero de todo lo que tenemos que hacer, es configurar nuestra Area de Trabajo en el Disco Duro , para instalar todo el Sistema de C3 . As que empezaremos, creando una Carpeta Nueva , con el nombre de C3 en el Disco Duro , en donde instalaremos todo el sistema del C3 , tal como se muestra a continuacin: C:/ C3 Bin Res Help C3 Html Gui Html Tools32 Html Include Res Lib32 Samples Res Source Sys => => => => => => => => => => => => => => => => => Directorio de C3 Carpeta del compilador C3 y el Enlazador Carpeta Para Guardar Iconos, Anagramas y Bitmaps. Carpeta de las Ayudas Carpeta de Ayuda del C3 Carpeta donde se encuentran las funciones de C3 Carpeta de Ayuda de la GUI Carpeta donde se encuentran las aplicaciones GUI Carpeta de Ayuda de Tools32 Carpeta donde se encuentra las aplicaciones Tools32 Carpeta donde se encuentran los archivos ( *.ch ) Carpeta Con tres archivos varios. Carpeta donde se encuentran los archivos ( *.Lib) Carpeta donde se encuentran los ejemplos Carpeta donde se encuentran los iconos Capeta Carpeta donde se encuentra los ( *.prg ) de errores

A continuacin instalaremos en la Carpeta Bin , el programa Make.exe de Clipper y los programas Tlink32.exe y Rlink32.dll de Bordland. Seguidamente crearemos otra nueva Carpeta , en el directorio Principal de C3 con el nombre de Herramientas , en donde colocaremos las herramientas, que tenemos que utilizar para poder terminar completamente, cualquier programa que construyamos. Las herramientas que necesitamos son, un constructor de archivos de Recursos ( * .rc ), un constructor de Libreras ( * .dll ), un constructor de Libreras ( * lib ) y un constructor de ficheros de Ayuda ( * .hlp ) Para uno de los constructores de Recursos y Libreras ( * .dll ), crearemos dentro de la carpeta de Herramientas , una carpeta con el nombre de WorkShop , en la cual instalaremos, el creador de recursos Resource WorkShop y al instalar el Resource WorkShop , en la carpeta WorkShop , se crearan automticamente dos carpetas ms, que es en donde se instalara todo el sistema del Resource WorkShop , tal como se muestra a continuacin: C:\ C3 Herramientas WorkShop Bin RCExpert

=> Carpeta con algunos ficheros del WorkShop => Carpeta con el Resource WorkSohp y sus utilidades => Carpeta con algunos ficheros del WorkShop

Para otro de los constructores de Recursos ( * .rc ), crearemos tambin dentro de la carpeta de Herramientas , una carpeta llamada ResourceBord , en la cual instalaremos, el creador de Recursos de Bordland , tal como se muestra a continuacin:
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

C:\ C3 Herramientas ResourceBord

=> Carpeta con los ficheros de Bordland.

Para el creador de Libreras ( * .lib ), crearemos tambin dentro de la carpeta de Herramientas , una carpeta llamada Construir Lib , en la cual instalaremos, el creador de Libreras ( * lib ), tal como se muestra a continuacin: C:\ C3 Herramientas Construir Lib

=> Carpeta con los ficheros de Bordland.

Para el creador de ficheros de Ayuda ( * hlp ), crearemos tambin dentro de la carpeta de Herramientas , una carpeta llamada Crear Ayudas , en la cual instalaremos los ficheros para la creacin de Ayudas ( * hlp ), tal como se muestra a continuacin: C:\ C3 Herramientas Crear Ayudas

=> Carpeta con los ficheros de Creacin.

A continuacin crearemos tambin, en el directorio Principal de C3 , otra nueva Carpeta con el nombre de Prcticas , que ser en donde iremos colocando, todos los trabajos que vayamos realizando, una vez que ya estn terminados. Cuando hayamos terminado de instalar, todo el directorio de Trabajo del C3 , este deber de haber quedado ms o menos as:
C:/ C3 Bin Res Help C3 Html Gui Html Tools32 Html Include Res Lib Samples Res Source Sys Gui OldGui Projects Herramientas Crear Ayudas Construir Lib ResourceBord WorkShop Bin RCExpert Practicas => => => => => => => => => => => => => => => => => => => => => => => => => => => => Directorio de C3 Carpeta del compilador C3 y el Enlazador Carpeta con los Iconos, los Anagramas y Bitmaps. Carpeta de las Ayudas Carpeta de Ayuda del C3 Carpeta donde se encuentran las funciones de C3 Carpeta de Ayuda de la GUI Carpeta donde se encuentran las aplicaciones GUI Carpeta de Ayuda de Tools32 Carpeta donde se encuentra las aplicaciones Tools32 Carpeta donde se encuentran los archivos ( *.ch ) Carpeta Con tres archivos varios. Carpeta donde se encuentran los archivos ( *.lib) Carpeta donde se encuentran los ejemplos Carpeta donde se encuentran los iconos Capeta Carpeta donde se encuentra los ( *.prg ) de errores Carpeta donde Instalaremos el IDE Carpeta con varios ejemplos en *.prg para el IDE Carpeta con unos archivos de configuracin Carpeta de las Herramientas. Carpeta con el sistema para crear ficheros *.hlp Carpeta con los ficheros para crear Libreras *.lib Carpeta con los ficheros del Resource de Bordland. Carpeta con algunos ficheros del WorkShop Carpeta con el Resource WorkSohp y sus utilidades Carpeta con algunos ficheros del WorkShop Carpeta para colocar las prcticas realizadas

Cuando todo esto este terminado, ya tendremos todo el sistema instalado y a punto para empezar a programar.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

Prctica - 2
La Ventana Principal.
Este programa ha sido diseado, para trabajar con una resolucin, de pantalla de 800x600 lneas , si ustedes tienen otra configuracin, traten de adaptarla a esta resolucin para que la ventana del programa, no se les salga del la pantalla. Una vez hecha esta pequea aclaracin, vamos a empezar a construir nuestro primer programa. Lo primero que vamos hacer, ser construir la Ventana Principal , en donde iremos colocando poco a poco, todos los mdulos de que consta el programa, hasta que lo tengamos todo montado y funcionando. En la primera lnea de nuestro programa, colocaremos un pequeo comentario del primer modulo del programa, lo cual deberemos de hacer, con todos los mdulos de que conste nuestro programa, para as poder localizar ms rpidamente, un Modulo que tengamos que Corregir o Modificar . ***************************************************************************

Cabecera del Programa.


El primer Modulo de nuestro programa, esta compuesto por los ficheros Include o ficheros de Cabecera , tal como se muestra a continuacin:
// Ficheros de cabecera.

#include "Gui.ch" ***************************************************************************

Inicio del Programa.


A continuacin construiremos, el Modulo de Inicio del Programa , para lo cual vamos a utilizar, los Comandos internos de C3 , Local , Procedure , Application , Return y la Data Title , junto con las funciones, Main() , Initialize() , CreateForm() TPrincipal() y Run() , tal como se muestra a continuacin:
// Modulo del Punto de entrada o comienzo del programa.

Procedure Main() Local Principal Application:Title := "ArchiPel" Application:Initialize() Application:CreateForm( TPrincipal(), @ Principal ) Application:Run() Return ***************************************************************************

Declaracin de Mtodos.
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

Seguidamente construiremos, la Declaracin de Mtodos , la cual constara de los siguientes Comandos internos de C3 , Class , From , TForm , Public EndClass y Mtodo Create Constructor , tal como se muestra a continuacin:
// Modulo de la Declaracin de Mtodos.

Class TPrincipal From TForm Public : Method Create Constructor EndClass ***************************************************************************

Modulo Principal.
Por ultimo en esta practica, construiremos el Modulo de Principal , el cual de momento solo constara de Cinco Lneas , pero lo iremos ampliando, a medida que vayamos avanzando en el curso. Para el Modulo Principal , vamos a utilizar los comandos internos de C3 Method Super , Class Return y la Data , Caption junto con las funciones Create() ::SetBounds() , Space() , tal como se indica a continuacin:
// Declaracin del Modulo Principal.

Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Caption:=Space(76)+" Archivo de Pelculas " Return Cuando hayamos terminado de construir, nuestros cuatro primeros Mdulos , ya tendremos nuestro primer, Fichero (*. prg ) listo para Compilarlo y ver el resultado el cual nos mostrara una Ventana , vaca de Windows con el titulo "Archivo de Pelculas" En esta Practica se adjunta el fichero, ArchiPel.prg , para que puedan consultarlo mientras montan el suyo, junto los ficheros que hacen falta, para la compilacin y el enlazado, Do.bat , ArchiPel.mak y el ejecutable ArchiPel.exe , para que puedan ver el resultado de esta Practica . ***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

Prctica - 3
El Men Principal en C3.
En todos los programas comerciales, lo primero que se nos muestra, es el Men Principal , pues en esta practica, vamos a construir el Men Principal del programa.

Declaracin de Mtodos.
As que lo primero que aremos, como ya dijimos en la Prctica anterior , que iramos ampliando este Mdulo , con forme fusemos avanzando en nuestro programa, as que ahora aadiremos al modulo, Declaracin de Mtodos las siguientes lneas, Method MenuPrin y Method Terminar, que sern los Mtodos para crear el Men Principal y Salir del Programa , tal como se indica a continuacin:
// Modulo de la Declaracin de Mtodos.

Class TPrincipal From TForm Public: Method Create Constructor Method MenuPrin Method Terminar EndClass ***************************************************************************

// Nueva Lnea // Nueva Lnea

Modulo Principal.
A continuacin tambin ampliaremos el Modulo Principal , para lo cual le aadiremos el Evento ::OnCloseQuery , con los comandos internos de C3 oSender , ::Brush y las variables Salir , Color y la funcin que vamos a crear ::MenuPrin() tal como se muestra a continuacin:
// Modulo de la Declaracin de Mtodos.

Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Caption:=Space(76)+ "Archivo de Pelculas" ::Brush:Color := 15400959 ::MenuPrin() ::OnCloseQuery := { | oSender, Salir | ::Terminar( @ Salir ) } Return

// Nueva Lnea // Nueva Lnea // Nueva Lnea

***************************************************************************

Menu Principal.
Seguidamente crearemos el modulo del Men Principal , para lo cual vamos a utilizar las variables Locales Menu , ns , junto con los comandos internos de C3 , Method Class , ::Menu , Return y las Funciones, TMainMenu() , Create() , Close() BeginMenu() , MenuItem() , Separador() , EndMenu() , tal como se muestra a continuacin:
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

// Modulo del Men Principal.

Method MenuPrin() Class TPrincipal Local Menu, ns ns :=Space(7)


// Declaracin del Men.

Menu := TMainMenu():Create( Self )


// Men de las Altas.

Menu:BeginMenu() Menu:MenuItem( ns + "Alta de Fichas",Dar de Alta Nuevas Fichas." )


// Men Para Corregir Fichas.

Menu:MenuItem( ns + "Corregir Fichas","Corregir los Datos de las Fichas." )


// Men Para dar de Baja las Fichas.

Menu:MenuItem( ns + "Borrar Fichas","Dar de Baja las Fichas." )


// Men Para Consultar las Fichas.

Menu:MenuItem( ns + "Consultar Fichas","Buscar Fichas Para Consultar." )


// Men Para Mostrar Listados.

Menu:MenuItem( ns + Consultar Listado,Listados por Varios Sistemas.) Menu:BeginMenu() Menu:MenuItem( "Listado Por Codigo","Listado por Nmero de Codigo",, .T. ) Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden Alfabtico.",, .T. ) Menu:MenuItem( "Listado Por Temas","Listado por Temas.",, .T. ) Menu:MenuItem( "Listado Por Aos","Listado por Ao de Produccin.",, .T. ) Menu:MenuItem( "Listado por Direccin","Listado por Directores.",, .T. ) Menu:EndMenu()
// Men Para Imprimir.

Menu:MenuItem( ns + "Imprimir","Imprimir Fichas o Listados." ) Menu:BeginMenu() Menu:MenuItem( "Imprimir Fichas","Imprimir Fichas de Pelculas.",, .T. ) Menu:Separator() Menu:MenuItem( "Listado Por Codigo","Listado por Nmero de Codigo",, .T. ) Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden Alfabtico.",, .T. ) Menu:MenuItem( "Listado Por Temas","Listados por Temas.",, .T. ) Menu:MenuItem( "Listado por Direccin","Listado por la Direccin.",, .T. ) Menu:EndMenu()
// Men Para Salir del Programa.

Menu:MenuItem( ns + "Salir y Terminar","Terminar y Salir del Programa.", { ||::Close() } )


// Men Para la Ayuda del Programa.

Menu:MenuItem( ns + "Ayuda","Ayuda Para la Utilizacin del Programa." )


// Fin del Men.

Menu:EndMenu() ::Menu := Menu Return **********************************************************************************

Cerrar y Salir del Programa.


10

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

Por ultimo en esta practica, construiremos el Modulo , para Cerrar y Salir del programa. As para construir este Modulo , vamos a utilizar los comandos internos de C3 Method , Class If , Else , EndIf y Return , junto con la funcin MessageDlg() y las constantes mbOkCancel y poActiveCenter , tal como se indica a continuacin:
// Modulo Para Cerrar y Salir del Programa.

Method Terminar(Salir) Class TPrincipal If MessageDlg( "Esto finaliza la ejecucin y cierra el programa.", mtConfirmation, ; mbOkCancel,poActiveCenter ) == mrOk Salir := .T. Else Salir := .F. EndIf Return Nil ********************************************************************************** Ahora solo hay que hacer el montaje del fichero ArchiPel.prg , para ello solo tienen que aadir, las nuevas lneas de cdigo, expuestas en esta practica, en sus correspondiente mdulos, del fichero ArchiPel.prg de la practica anterior. En esta Practica se adjunta el fichero, ArchiPel.prg , para que puedan consultarlo mientras montan el suyo, junto los ficheros que hacen falta, para la compilacin y el enlazado, Do.bat , ArchiPel.mak y el ejecutable ArchiPel.exe , para que puedan ver el resultado de esta Practica . NOTA: Como abran podido comprobar, en esta leccin hemos utilizado, los siguientes Comandos internos de Clipper y la funcin tambin de Clipper. Local Public If Else EndIf Return Space()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

11

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

12

Practica - 4
Terminar el Men Principal.
En esta cuarta leccin, vamos a completar y terminar el Men Principal , as que empezaremos, colocando un Icono en la aplicacin y un Anagrama o una Foto en el Men . Tambin vamos a construir, la Barra de Estado del Men , en donde aparecer el Texto de las opciones , as como la Fecha y Hora actual .

Colocar un Icono y un Anagrama.


Vamos a empezar configurando el modulo, Inicio del Programa , en donde aadiremos las siguientes lneas y para ello vamos a utilizar, primero la nueva funcin de C3 set(_SET_DATEFORMAT, "dd/mm/yyyy" ) y el comando interno de C3, Aplication junto con la variable de instancia, Icon y la data Name , tal como se muestra a continuacin: /* * Modulo de Inicio del programa. */ Procedure Main() Local Principal set(_SET_DATEFORMAT, "dd/mm/yyyy" ) Application:Title := "ArchiPel" Application:Icon:Name := "Test" Application:Initialize() Application:CreateForm( TPrincipal(), @ Principal ) Application:Run() Return *************************************************************************** // Nueva Lnea. // Nueva lnea.

Declaracin de Mtodos.
Seguidamente en modulo Declaracin de Mtodos , aadiremos las siguientes lneas Data Imagen y Method BarraHora , para lo cual vamos a utilizar, los comandos internos de C3 , Private: , Method y Data junto con la variable Image , tal como se muestra a continuacin: /* * Modulo de la Declaracin de Mtodos. */ Class TPrincipal From TForm Private: Data Image Public: Method Create Constructor Method MenuPrin
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

// Nueva Lnea.

13

Method Termina Method BarraHora EndClass

// Nueva Lnea.

***************************************************************************

Modulo Principal.
A continuacin en el Modulo Principal, tambin aadiremos las siguientes lneas ::Icon:Name:= "Test" , ::Image:=TImage():Create( Self ), ::Image:SetPos( 131, 2 ) ::Image:Picture:Bitmap:Name:= "Copryn" y ::BarraHora() , para lo cual vamos a utilizar, los comandos internos de C3, Icon , Image , Picture , Bitmap junto con la variable de entorno, Name y las funciones TImage() , Create() , SetPos() y la nueva funcin, que vamos a crear seguidamente BarraHora() , tal como se muestra a continuacin: /* * Modulo Principal. */ Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Icon:Name := "Test" ::Caption:=Space(76)+ "Archivo de Pelculas" ::Brush:Color := clAqua ::Image := TImage():Create( Self ) ::Image:SetPos( 166, 40 ) ::Image:Picture:Bitmap:Name := "Copryn" ::MenuPrin() ::BarraHora() ::OnCloseQuery := { | oSender,Salir | ::Terminar( @ Salir ) } Return ***************************************************************************

// Nueva Lnea.

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

Barra de Estado del Men.


Seguidamente construiremos, el modulo de la Barra de Estado , donde aparecern los mensajes de las opciones del Men, junto con la Fecha y Hora actual. Para la construccin de este modulo, vamos a utilizar los siguientes comandos, internos de C3, Method, Class , Local , If , Aplication , Return , junto con las Datas Reversed , Caption , Widith y variables, BarraStado , PanelMensa , Reloj oTimer , ns y los Eventos, OnShowHint , OnTimer , junto con las funciones Space() , TStatusBar() y Create() , TStatusPanel() , Empty() , Ttimer() Time() , Cdow() , Date() , Left() , Dto.() , Cmonth() y Right() , tal como se muestra a continuacin: /* * Modulo de la Barra de Estado del Men Principal. */ Method BarraHora() Class TPrincipal Local BarraStado, PanelMensa, Reloj, oTimer, ns
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

14

ns :=Space(8) // Crear Barra de Estado. BarraStado := TStatusBar():Create( Self ) BarraStado:Reversed := .T. // Mostrar los Mensajes en la Barra de Estado. PanelMensa := TStatusPanel():Create( BarraStado ) Application:OnShowHint := { | cHint | PanelMensa :Caption := ns +If( Empty( cHint ), ; "Seleccione una opcin." , cHint ) } // Colocar Hora y Fecha en la Barra de Estado. Reloj := TStatusPanel():Create(BarraStado) Reloj :Width :=372 oTimer := TTimer():Create( Self ) oTimer:OnTimer := { || Reloj :Caption :=" Son las: " + Time() + " del " + ; Cdow(Date()) + " dia " + Left(Dtoc(Date()),2) + " de " + ; cMonth(Date()) + " del Ao " + Right(Dtoc(Date()),4) } Return *************************************************************************** Con esto tenemos todo el Men Principal , totalmente terminado, ahora ya solo nos queda montar esta ultima Prctica , el su lugar correspondiente, de nuestro programa ArchiPel.prg y compilarlo. Con esta leccin se adjunta, la carpeta Res que contiene, el Icono de la aplicacin junto con el Anagrama del Programa y el Icono de una Mano , que utilizaremos ms adelante en otras Practicas . Los Iconos y Bitmaps de la carpeta Res , hay que copiarlos a nuestra carpeta Res , que tenemos en el directorio C:\C3\Bin\Res de nuestro Ordenador. Los archivos Do.Bat , el archivo Samples.rc que es en donde se encuentran, Configurados , los Iconos y el Anagrama , el nuevo archivo ArchiPel.mak , el archivo completo ArchiPel.prg , para que puedan consultarlo, mientras montan esta prctica y el archivo final ArchiPel.exe , para que puedan comprobar el resultado final. Nota: Para construir el Icono de la aplicacin y el archivo Samples.rc , se ha utilizado el Resource WorkSohp. En todas las Variables declaradas en el mdulo Declaracin de Mtodos , cuando las tengamos que utilizar, en la parte del programa que nos hagan falta, siempre hay que anteponerles Cuatro Puntos , tal como se muestra a continuacin: ::Image Observacin: Como abran podido comprobar en esta practica, hemos utilizado los siguientes comandos internos de Clipper , junto con las siguientes Funciones. Local If Return Space() Empty() Time() Cdow()
fraguibo1@hotmail.com Pgina:

La Antorcha de los Grandes Exitos (Fraguibo)

15

Date() Left() Dtoc() Cmonth() Right() ***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

16

Practica - 5
Inicio del Programa.
Una vez terminado el Men Principal , vamos a construir la Base de Datos , con su correspondiente ndice . As que vamos a empezar configurando, el Inicio de Programa y para ello vamos a utilizar los comandos internos de C3 , Resquet DbfCdx que es la configuracin de la Base de datos , con el archivo de ndice Cdx , y RDDSETDEFAULT(DBFCDX), que es la configuracin, para poder utilizar el ndice Cdx , tal como se muestra a continuacin: /* * Modulo de entrada y comienzo del programa. */ Procedure Main() Local Principal Request DbfCdx RDDSETDEFAULT("DBFCDX") set(_SET_DATEFORMAT,"dd/mm/yyyy") Application:Title := "ArchiPel" Application:Icon:Name := "Test" Application:Initialize() Application:CreateForm( TPrincipal(), @ Principal ) Application:Run() Return *************************************************************************** // Nueva Lnea // Nueva Lnea

Modulo de Declaracin de Mtodos.


A continuacin configuraremos el modulo Declaracin de Mtodos , en donde aadiremos la siguiente lnea, Method BaseDatos que es la declaracin, del Mtodo de la Base de Datos , que vamos a construir seguidamente, tal como se muestra a continuacin: // Modulo de Declaracin de Mtodos. Class TPrincipal From TForm Private: Data Image Public: Method Method Method Method Method EndClass
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

Create Constructor MenuPrin Terminar BarraHora BaseDatos

// Nueva Lnea.

17

Modulo Principal.
A continuacin en el modulo Principal, tambin aadiremos la siguiente lnea ::BaseDatos() , que es la que llamada al modulo, que nos creara la Base de Datos con su correspondiente ndice Cdx , tal como se muestra a continuacin: // Modulo Principal. Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Icon:Name := "Test" ::Caption:=Space(76)+"Archivo de Pelculas" ::Brush:Color := clAqua ::Image := TImage():Create( Self ) ::Image:SetPos( 166, 40 ) ::Image:Picture:Bitmap:Name := "Copryn" ::MenuPrin() ::BarraHora() ::BaseDatos() ::OnCloseQuery := { | oSender ,Salir | ::Terminar( @ Salir ) } Return ***************************************************************************

// Nueva Lnea.

Construccin de la Base de Datos.


Seguidamente construiremos, el modulo para la declaracin de Base de datos y su correspondiente ndice Cdx . Lo primero que aremos ser declarar un buscador, para que compruebe si la Base de datos , ya existe y si no la encuentra que la cree, as que para este modulo vamos a utilizar los comandos internos de C3 , Method/Return , Class , If/Endif , junto con las funciones File() y dbCreate() tal como se muestra a continuacin: /* * Modulo de la Declaracin de la Base de Datos. */ Method BaseDatos() Class Tprincipal // Busca Base de Datos. if ! File( 'FiPelicu.dbf' ) // Si no la Encuentra la Crea. dbcreate( 'FiPelicu' ,{{'NU','N',10,0},{'TN','C',34,0},; {'TO','C',34,0},{'TE','C',10,0},{'NA','C',20,0},; {'CL','C',6,0},{'DU','C',6,0},{'AN','C',6,0},; {'A1','C',25,0},{'A2','C',25,0},{'A3','C',25,0},; {'A4','C',25,0},{'DR','C',25,0},{'PR','C',25,0},; {'Gi','C',25,0},{'FO','C',25,0},{'MU','C',25,0},; {'DI','C',25,0},{'R1','C',94,0},{'R2','C',94,0},; {'R3','C',94,0},{'R4','C',94,0}}) Endif
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

18

Nota: Los cuatro ltimos registros de la Base de Datos , R1 , R2 , R3 y R4 , los hubisemos podido sustituir por un Campo Memo , pero luego en la Base de Datos , el campo Memo hace que esta ocupe mucho espacio, as que se a optado por hacer cuatro registros independientes, para que la Base de Datos no ocupe tanto espacio. ***************************************************************************

Construccin del ndice.


A continuacin declararemos, dentro del mismo mtodo un buscador, para que compruebe si el ndice , ya existe y si no lo encuentra que lo cree, as que para esta parte del mtodo, vamos a utilizar los siguientes comandos, internos de C3 , If/Endif , Use Index , On , Field , Tag y close Data , tal como se muestra a continuacin: // Busca el ndice de Datos if ! File( 'FiPelicu.cdx' ) // Si no lo Encuentra lo Crea. Use FiPelicu Index On Field->NU Tag "NU" Index On Field->TN Tag "TN" Index On Field->AN Tag "AN" Index On Field->TE Tag "TE" Index On Field->DI Tag "DI" Close Data Endif Return Nil *************************************************************************** Ahora solo nos falta aadir este nuevo modulo, junto con las modificaciones, antes descritas, en los mdulos correspondientes, de nuestro fichero FichePel.prg y compilarlo. Al ejecutar el fichero FichiPel.exe , podremos comprobar que se nos ha creado, dos nuevos ficheros FiPelicu.Dbf , que es la Base de Datos y FiPelicu.Cdx , que es el ndice de la Base de Datos . Como en todas las Practicas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.bak , Samples.rc , el archivo completo ArchiPel.prg , para que puedan consultarlo, mientras montan esta prctica y el archivo final ArchiPel.exe , para que puedan comprobar el resultado final. NOTA: Los buscadores de la Base de Datos y del ndice , se han incluido en el programa, para que no se cree una Base de datos y un ndice , nuevos cada vez que ejecutemos el programa ArchiPel.exe . Por que de no ser as, cada vez que ejecutsemos el programa ArchiPel.exe , se nos creara una Base de Datos y un ndice nuevos, con lo que perderamos todos los datos, que tuvisemos almacenados en dichos ficheros. Observacin: Como abran podido comprobar en esta leccin, hemos utilizado los siguientes comandos internos de Clipper , junto con las siguientes Funciones.
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

19

Comandos If/EndIf Use Index Close Data Return

Funciones File() dbCreate()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

20

Practica - 6
Buscar Base de Datos.
En esta leccin vamos a construir Modulo que nos permita la entrada de Datos , as que lo primero que haremos ser, aadir al modulo de la Declaracin de Mtodos , los siguientes mtodos Method BusBaseDatos, este mtodo nos buscara la base de datos Method VenMenAuto, este mtodo nos mostrara las ventanas, de los mensajes automticos, LLamaMensage este mtodo mostrara los mensajes, en la ventana de mensajes, ContaTiempo y este nos calculara el tiempo, que deber de permanecer el mensaje en la pantalla, tal como se muestra a continuacin:

Declaracin de Mtodos.
/* * Modulo de la Declaracin de Mtodos. */ Class TPrincipal From TForm Private: Data Image Public: Method Method Method Method Method Method Method Method Method EndClass

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo

// // // //

Nueva Nueva Nueva Nueva

Lnea Lnea Lnea Lnea

***************************************************************************

Altas en el Menu Principal.


A continuacin vamos a configurar, la entrada de datos de la opcin Alta de Fichas del Men Principal , con el comando interno de C3 , oSender , junto con el mtodo que vamos a construir a continuacin BusBaseDatos() , formando as el conjunto la siguiente instruccin, {|oSender|:: BusBaseDatos()} , tal como se muestra a continuacin:

/* * Modulo del Menu Principal. */ // Men de las Altas. Menu :BeginMenu() Menu :MenuItem( ns +" Alta de Fichas "," Dar de Alta Nuevas "+; " Fichas. ",{|oSender|::BusBaseDatos(1,1,,1)})

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

21

Nota: Las variables de la entrada de la funcin, BuscaBaseDatos( x,tr,va,me ) equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =1 Presenta una Ficha Nueva Para Rellenar. me =1 Mensage a Mostrar. ***************************************************************************

Buscador Base de Datos.


Seguidamente vamos a construir el modulo, para buscar la Base de Datos , el cual si la encuentra, nos presentara una ficha vaca para rellenarla, o nos dar paso para poder realizar otras opciones del programa, pero si no la encuentra nos mostrara un mensaje, en el que nos recordara de que la Base de Datos , no existe y que sin ella, no se puede realizar ningn trabajo. Para la construccin de este mtodo, vamos a utilizar los comandos internos de C3 Method, Class, if/endif y Return , la constante de C3, clFuchsia , que equivale al color Violeta Claro y las funciones File() y la que vamos a construir nosotros VenMenAuto( c1 , c2 , mv , co ) , tal como se muestra a continuacin: /* * Modulo Para Buscar la Base de Datos. */ Method BusBaseDatos( x,tr,va,me ) Class TPrincipal if ! File( 'FiPelicu.dbf' ) endif // Si no la Encuentra nos Avisa que no Existe. ::VenMenAuto( 514,200,1, clFuchsia) Retur nil Nota: La variable de la entrada de la funcin BusBaseDatos( x,tr,va,me ) , equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =2 Presenta una Ficha Para Corregir. me =2 Mensage a Mostrar. La constante de C3, clFuchsia , es una constante de color y equivale al color Violeta Claro. **************************************************************************

Ventana de Mensajes.
Seguidamente vamos a construir el modulo, que nos presentara las Ventanas , para los mensajes que tengamos que mostrar, a lo largo del programa. Para la construccin de este Modulo , vamos a utilizar los siguientes comandos internos de C3, Method, Class, Local y if/endif, las variables Venta y Meve1 , la variable interna de C3, bsDialog , la variable de entorno de C3, Brush , las datas BorderStyle Color, Position y Caption , la constante de C3, poActiveCenter y las funciones Space(), Tform(), Create(), SetBounds(), showModal() y las
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

22

dos que vamos a construir nosotros, una llamaMensage() y otra ContaTiempo , tal como se muestra a continuacin: /* * Modulo Para la Ventana de Mensajes Automticos. */ Method VenMenAuto( c1 , c2 , mv , co ) Class TPrincipal Local Venta , Meve1 Meve1 :=Space( 48 )+' Aviso Muy Grave ' // Crear la Ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0 , 0 , c1 , c2 ) Venta :Brush:Color := co Venta :Position := poActiveCenter if mv =1 Venta :Caption := Meve1 ::LLamaMensage( Venta , 22 , 20 ,clYellow," Arial Black ", 22 ,clRed, 1 ) ::ContaTiempo( 4000 , Venta ) Endif Venta :ShowModal() Return Nil Nota: Las variables de entrada de la funcin VenMenAuto( c1 , c2 , mv , co ) , corresponden a los siguientes parmetros: c1 y c2 => Corresponden al tamao de la ventana a mostrar. mv => Corresponde al mensaje que queremos mostrar. co => Corresponde al color de la ventana. Las constantes internas de C3, bsDialog muestra una ventana con los bordes normales, la poActiveCenter , muestra la ventana centrada en la pantalla, las siguientes constantes so de color, as la clYellow corresponde al color Amarillo y la clRed corresponde al color Rojo Claro. ***************************************************************************

Configurar los Mensajes.


Seguidamente vamos a construir el modulo, que llamara al mensaje que nos haga falta mostrar en cada opcin del programa. Para la construccin de este Modulo , vamos a utilizar los siguientes comandos internos de C3, Method, Class, Local y if/endif , Return , la variable Men las variables de entorno de C3, Brush y Font , las datas Color, BorderStyle Transparent, Name, size y caption , la constante interna de C3, bsSingle y las funciones Tlabel(), Create, SetBounds() y Chr() ,tal como se muestra a continuacin: /* * Modulo Para Mostrar Mensajes. */ Method LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) Class TPrincipal Local Men
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

23

// Ventana Para Mostrar los Mensajes. Men := TLabel():Create( ve ) Men :SetBounds( c1 , c2 ) Men :Brush:Color:= cp Men :BorderStyle := bsSingle Men :Transparent:=.f. Men :Font:Name:= nf Men :Font:Size:= .t. Men :Font:Size := tf Men :Font:Color := cl // Mensajes que hay que Mostrar. if me=1 Men :Caption:= La Base de Datos No Existe '+Chr(13)+; ' Sin Ella No Puedo Realizar '+Chr(13)+; ' Ninguna Clase de Gestin. ' Endif Retur nil Nota: Las variables de entrada de la funcin LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) corresponden a los siguientes parmetros: ve c1 y c2 cp nf tf cl me => => => => => => => Ventana que llama el mensaje. Posicin del mensaje dentro de la ventana. Color de la ventana. Tipo de letra a utilizar, por defecto(Arial) Tamao de la letra que esta utilizando. Color de la letra que se esta utilizando. Mensaje que necesitamos mostrar.

La constante interna de C3, bsSingle muestra un marco, al rededor del mensaje. **************************************************************************

Contador de Tiempo Para Mensajes.


Seguidamente vamos a construir un contador de Tiempo , para que nos muestre un Mensaje en la Pantalla, el tiempo que haga falta para poder leerlo. Para la construccin de este modulo, vamos a utilizar los comandos internos de C3 Method, Class, Local, oSender y Return y la local oTimer, junto con las datas Interval, Enabled , el evento OnTimer y las funciones TTimer() Create(), Close() y Destroy() , tal como se muestra a continuacin: /* * Modulo Contador de Tiempo. */ Method ContaTiempo( ti,ve ) Class TPrincipal Local oTimer oTimer := TTimer():Create( ve ) oTimer :Interval := ti oTimer :Enabled := .t.
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

24

oTimer :OnTimer:= {|oSender| oTimer :Destroy(), ve :Close(), ve :Destroy()} Return Nil Nota: Las variables de entrada de la funcin ContaTiempo( ti,ve ) , corresponden a los siguientes parmetros: ve => Ventana que llama al contador. ti => Tiempo que debe de permanecer el mensaje en pantalla. Una vez terminada esta Practica , solo nos queda colocar los mdulos en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado de esta practica, solo tenemos que ejecutar el programa ArchiPel.exe y pulsar en la opcin Alta de Fichas , del menu principal y nos aparecer en la pantalla, una ventana con el siguiente mensaje: La Base de Datos No Existe' ' Sin Ella No Puedo Realizar' ' Ninguna Clase de Gestin.' Lo cual nos demuestra que la practica ha sido realizada correctamente, pero ustedes se preguntaran Como existiendo la Base de Datos el Programa nos dice que NO existe pues la razn es muy sencilla y consiste, en que el Modulo Para Buscar la Base de Datos , no la hemos configurado correctamente, para as poder comprobar el resultado de esta prctica, pero en la prxima prctica, ya lo configuraremos correctamente, tal como debe de ir en nuestro programa. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.bak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Private Public Return Chr() File()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

25

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

26

Practica - 7
En esta practica vamos a seguir construyendo, el Modulo que nos permita la entrada de Datos , as que lo primero que haremos ser, aadir al modulo de la Declaracin de Mtodos , los siguientes mtodos Method SayDatos, este mtodo nos mostrara los datos que tengamos que mostrar, Method BuscaFicha , este mtodo comprueba, si la ficha ya esta archivada Method FichaVacia, este mtodo nos construir la ficha vaca, Method FichaRecNue este mtodo nos mostrara una ficha, vaca para rellenar o una ya rellenada para corregir, Method Archivar este mtodo nos archivara, una ficha nueva o una que hayamos corregido y Method CrearBoton este mtodo nos creara los Botones, que vayamos a utilizar en las ventanas, tal como se muestra a continuacin:

Configurar la Declaracin de Mtodos.


/* * Modulo de la Declaracin de Mtodos. */ Class TPrincipal From TForm Private: Data Image Public: Method Method Method Method Method Method Method Method Method Method Method Method EndClass

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LlamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Fin del Modulo de Mtodos

***************************************************************************

Configurar Buscador Base de Datos.


Seguidamente vamos a configurar el modulo, para buscar la Base de Datos , el cual si la encuentra, nos presentara una ficha vaca para rellenarla, o nos dar paso para poder realizar otras opciones del programa, pero si no la encuentra nos mostrara un mensaje, en el que nos recordara de que la Base de Datos , no existe y que sin ella, no se puede realizar ningn trabajo. Para la construccin de este mtodo, vamos a utilizar los comandos internos de C3 Method, Class, if/endif y Return , la constante de C3, clFuchsia , que equivale al color Violeta Claro y las funciones File() y la que vamos a construir nosotros VenMenAuto( c1 , c2 , mv , co ) , tal como se muestra a continuacin:

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

27

/* * Modulo Para Buscar la Base de Datos. */ Method BusBaseDatos( x,tr,va,me ) Class TPrincipal if ! File( 'FiPelicu.dbf' ) // Si no la Encuentra nos Avisa que no Existe. ::VenMenAuto( 514,200,1, clFuchsia) Retur nil Else if x =1 // Hacer Ficha Nueva para rellenar. ::buscaFicha( tr,me ) Endif Endif Retur nil

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

Nota: La variable de la entrada de la funcin BusBaseDatos( x,tr,va,me ) , equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =2 Presenta una Ficha Para Corregir. me =2 Mensage a Mostrar. La constante de C3, clFuchsia , es una constante de color y equivale al color Violeta Claro. **************************************************************************

Buscar Fichas.
A continuacin vamos a construir el mdulo, para comprobar si la ficha ya esta archivada, si la encuentra cuando queremos, hacer una ficha nueva, nos avisa con un mensaje, de que la ficha ya esta archivada y nos vuelve al Men Principal , pero si no la encuentra, nos presenta una ficha nueva para rellenar. Para construir este mdulo vamos a utilizar, los siguientes comandos internos de C3 Method, Class, Local, if/endif, Use, Index, New Via, Close Data y Return , las variables Venta, edit, n, fi, oNU y mos , la variable de entorno de C3, Font , las datas BorderStyle, Position, Caption, Name y Size , las constantes de entorno de C3, bsDialog, poActiveCenter y oSender , junto con las funciones, Space(), Tform(), Create(), SetBounds(), Tedit(), Close() Destroy(), ShowModal() , Empety(), OrSetFocus(), DbSeek(), Recno() Eof() y las funciones que hemos creado nosotros, ::SayDatos(), ::CreaBoton() y ::VenMenAuto() , tal como se indica a continuacin: /* * Modulo para Buscar Fichas. */ Method BuscaFicha( tr,me ) Class TPrincipal Local venta, edit, n:=0 , fi :=Space(34) , oNU, mos, bf, co // Creamos la ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 474, 210 ) Venta :Position := poActiveCenter
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

28

if tr =1 // Hacer Fichas Nuevas. bf := "Comprobar si Esta Ficha ya Esta Archivada" Venta :Caption := Space(40)+" Hacer Fichas Nuevas " ::SayDatos( mos,Venta,30,10,,'Arial Black',25,,, .t. ,; 'Ficha Para dar de Alta' ) endif Edit := TEdit():Create(Venta) Edit :SetBounds( 30, 70, 410, 0 ) Edit :Font:Name:= "Arial" Edit :Font:Size:= 14 edit :caption:= fi edit :OnExit:={|oSender| fi := Edit :Caption ,Venta :Close(), Venta :Destroy()} // Botn Para Comprobar si Existe la Ficha. ::CrearBoton( Venta,110,122,245,30,9,bf ,{|oSender| fi := Edit :Caption,; venta :Close(), venta :Destroy()}) Venta :ShowModal() // Abre Base de Datos y Busca la Ficha. if !Empty( fi ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( fi ) n :=Recno() if !eof() if x =1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto( 570,170,2, clLime) close data return nil endif endif endif Close Data // Si no hay Nada que Buscar Vuelve al Men. if n =0 return nil endif Return Nil ***************************************************************************

Crear Botones.
A continuacin vamos a construir, un mdulo que nos creara los Botones , que tengamos que utilizar, a lo largo de todo el programa, as que en este mdulo vamos a utilizar, los comandos internos de C3, Method, Class, Local y Return , la variable Botn , la variable de entorno de C3, Font y Cursor las datas Name Size y Caption , junto con las funciones, Tbutton(), Create(), SetBounds() y el evento OnClick, tal como se indica a continuacin: /* * Modulo Para Crear Botones.
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

29

*/ Method CrearBoton( ve,c1,c2,c3,c4,tf,tv,ac ) Class TPrincipal Local Boton // Crear Boton. Boton := TButton():Create( ve ) Boton :SetBounds( c1,c2,c3,c4 ) Boton :Cursor:Name:=crHandPoint Boton :Font:Size:= tf Boton :Caption := tv Boton :OnClick := ac Retur Nil Nota: Las variables de la entrada de la funcin CrearBoton( ve,c1,c2,c3,c4,tf,tv,ac ) , equivale a los siguientes parmetros: ve => Ventana a la que pertenece el Botn. c1,c2,c3,c4 => Tamao del Botn. tf => Tipo de Letra a utilizar. tv => Nombre del Botn. ac => Accin a realizar, cuando se pulse el Botn. ***************************************************************************

Configurar la Ventana de Mensajes.


Seguidamente vamos a seguir configurando el modulo, que nos presentara las Ventanas , para los mensajes que tengamos que mostrar, a lo largo del programa. As que empezaremos aadiendo, una nueva variable local Meve2, seguidamente configuramos esta nueva variable, luego seguiremos configurando el programa, para que esta variable nos muestre, el mensaje que lleva asociado con ella, tal como se muestra a continuacin: /* * Modulo Para la Ventana de Mensajes Automticos. */ Method VenMenAuto( c1 , c2 , mv , co ) Class TPrincipal Local Venta , Meve1, Meve2 Meve1 :=Space( 48 )+' Aviso Muy Grave ' Meve2 :=Space( 46 )+' Informacin de la Ficha ' // Crear la Ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0 , 0 , c1 , c2 ) Venta :Brush:Color := co Venta :Position := poActiveCenter if mv =1 Venta :Caption := Meve1 ::LLamaMensage( Venta , 22 , 20 ,clYellow," Arial Black ", 22 ,clRed, 1 ) ::ContaTiempo( 4000 , Venta ) Elseif mv =2 Venta :Caption := Meve2
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Nueva Lnea.

// Nueva Lnea. // Nueva Lnea.


Pgina:

30

::LLamaMensage( Venta,30,26 ,clAqua," Arial Black ", 22 ,clBlack,2) ::ContaTiempo( 4000 , Venta ) Endif Venta :ShowModal() Return Nil

// Nueva Lnea. // Nueva Lnea.

Nota: Las variables de entrada de la funcin VenMenAuto( c1 , c2 , mv , co ) , corresponden a los siguientes parmetros: c1 y c2 => Corresponden al tamao de la ventana a mostrar. mv => Corresponde al mensaje que queremos mostrar. co => Corresponde al color de la ventana. Las constantes internas de C3, bsDialog muestra una ventana con los bordes normales, la poActiveCenter , muestra la ventana centrada en la pantalla, las siguientes constantes son de color, as la clYellow corresponde al color Amarillo , la clRed corresponde al color Rojo Claro , la clAqua corresponde al color Azul Claro y la clBlack corresponde al color Negro .

***************************************************************************

Configurar los Mensajes.


Seguidamente vamos a continuar configurando el modulo, aadindole una nueva opcin, junto con un nuevo mensaje, tal como se muestra a continuacin:

/* * Modulo Para Mostrar Mensajes. */ Method LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) Class TPrincipal Local Men // Ventana Para Mostrar los Mensajes. Men := TLabel():Create( ve ) Men :SetBounds( c1 , c2 ) Men :Brush:Color:= cp Men :BorderStyle := bsSingle Men :Transparent:=.f. Men :Font:Name:= nf Men :Font:Size:= .t. Men :Font:Size := tf Men :Font:Color := cl // Mensajes que hay que Mostrar. if me=1 Men :Caption:= La Base de Datos No Existe '+Chr(13)+; ' Sin Ella No Puedo Realizar '+Chr(13)+; ' Ninguna Clase de Gestin. ' elseif me=2 Men :Caption:=' La Ficha que Usted Quiere dar '+Chr(13)+; ' de Alta ya Esta Archivada. ' ::ContaTiempo( 4000,ve ) Endif
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// // // //

Nueva Lnea. nueva Lnea. Nueva Lnea. Nueva Lnea.

Pgina:

31

Retur nil Nota: Las variables de entrada de la funcin LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) corresponden a los siguientes parmetros: ve c1 y c2 cp nf tf cl me => => => => => => => Ventana que llama el mensaje. Posicin del mensaje dentro de la ventana. Color de la ventana. Tipo de letra a utilizar, por defecto(Arial) Tamao de la letra que esta utilizando. Color de la letra que se esta utilizando. Mensaje que necesitamos mostrar.

La constante interna de C3, bsSingle muestra un marco, al rededor del mensaje. **************************************************************************

Mostrar Datos.
Como ultimo ejercicio de esta practica, vamos a construir un mdulo, para mostrar datos o montar fichas vacas, etc, etc., as para montar este mdulo vamos a utilizar, los siguientes comandos internos de C3, Method, Class y Return, las variables de entorno de C3, Brush y Font , las datas Caption, Color, Name, Alignament Transparent y Size , junto con las funciones, Tlabel(), Create() y SetBounds() tal como se muestra a continuacin: /* * Modulo Para Mostrar Datos. */ Method SayDatos( va,ve,c1,c2,co,nf,tf,cf,al,ts,md ) Class TPrincipal va :=TLabel():Create( ve ) va :Caption:= md va :SetBounds( c1,c2 ) va :Brush:Color:= co va :Font:Name:= nf va :Font:Size:= tf va :Font:Color:= cf va :Transparent:= ts va :Alignment:= al Retur Nil Nota: Las variables de entrada de la funcin SayDatos( va,ve , c1 , c2 , co , nf , tf , cf , al,ts,md ) corresponden a los siguientes parmetros: va ve c1,c2 co nf tf cf al ts => => => => => => => => => Variable de la Funcin que la llama. Ventana que llama a la Funcin. Coordenadas para los Datos. Color del Fondo de los Datos. Tipo de Letra. Tamao de la Letra. Color de la Letra. Alineamiento de la Escritura. Transparencia de la Escritura.
fraguibo1@hotmail.com Pgina:

La Antorcha de los Grandes Exitos (Fraguibo)

32

md => Escritura que se tiene que mostrar. Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe y pulsar en la opcin Alta de Fichas , del menu principal y nos aparecer en la pantalla una ventana, con el siguiente mensaje que nos pedir:

Ficha Para dar de Alta


Lo cual nos demuestra que la practica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.bak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Use Index Close Data Return Chr() File() Space() Create() Empety() dbSeek() Recno() Eof()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

33

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

34

Practica - 8
En esta practica vamos a terminar de construir, el Modulo que nos permita la entrada de Datos , as que lo primero que haremos ser, aadir al modulo de la Declaracin de Mtodos , las siguientes Variables , oNU,oTE,oNA,oDU,oCL,oTN,oTO,oAN,oA1,oA2 oA3,oA4,oA5,oA6,oDR,oPR,oGI,oFO,oMU,oDI,oR1,oR2,oR3,oR4 , que son las que corresponden a los Registros de la Base de Datos y los siguientes mtodos Method FichaVacia , este mtodo nos mostrara una Ficha Vaca, Method FichaRecNue , este mtodo nos presenta una Ficha nueva Vaca, con todas las entradas activas, para poder rellenar los datos que nos pide y Method Archivar , este mtodo nos gravara, los datos del ficha en la Base de Datos , tal como se muestra a continuacin:

Configurar la Declaracin de Mtodos.


/* * Modulo de la Declaracin de Mtodos. */ Class TPrincipal From TForm Private: Data Image, oNU,oTE,oNA,oDU,oCL,oTN,oTO,oAN,oA1,oA2,oA3,oA4,; oA5,oA6,oDR,oPR,oGI,oFO,oMU,oDI,oR1,oR2,oR3,oR4 Public: Method Create Constructor Method MenuPrin Method Terminar Method BarraHora Method BaseDatos Method BusBaseDatos Method VenMenAuto Method LlamaMensage Method ContaTiempo Method SayDatos Method BuscaFicha Method CrearBoton Method FichaVacia Method FichaRecNue Method Archivar EndClass ***************************************************************************

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

Buscar Fichas.
A continuacin vamos a completar el mdulo para Buscar Fichas , as que le aadiremos tres nuevas lneas, para que compruebe si la ficha ya esta archivada y si no la encuentra, que nos presente una Ficha Vaca , para poder rellenarla y guardarla, en la Base de Datos , a continuacin se muestran las nuevas lneas de cdigo: /* * Modulo para Buscar Fichas. */ Method BuscaFicha( tr,me ) Class TPrincipal
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

35

Local venta,edit, n:=0 ,fi :=Space(34) ,mos,bf // Creamos la ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 474, 210 ) Venta :Position := poActiveCenter if tr =1 // Hacer Fichas Nuevas. bf:="Comprobar si Esta Ficha ya Esta Archivada" Venta :Caption := Space(40)+" Hacer Fichas Nuevas " ::SayDatos( mos,Venta,30,10,,'Arial Black',25,,, .t. ,'Ficha Para dar de Alta' ) endif Edit := TEdit():Create(Venta) Edit :SetBounds( 30, 70, 410, 0 ) Edit :Font:Name:= "Arial" Edit :Font:Size:= 14 edit :caption:= fi edit :OnExit:={|oSender| fi := Edit :Caption ,Venta :Close(), Venta :Destroy()} // Boton Para Comprobar si Existe la Ficha. ::CrearBoton( Venta,110,122,245,30,9,bf ,{|oSender| fi := Edit :Caption,; venta :Close(), venta :Destroy()}) Venta :ShowModal() // Abre Base de Datos y Busca la Ficha. if !Empty( fi ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( fi ) n :=Recno() if !eof() if tr =1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto( 570,170,2,2, clLime) close data return nil endif endif endif Close Data // Si no hay Nada que Buscar Vuelve al Men. if n =0 return nil endif if me =1 // Si no la Encuentra nos Presenta una Ficha Nueva. ::FichaRecNue(, fi,1 ) endif Return Nil ***************************************************************************

Nueva Lnea. Nueva Lnea. Nueva Lnea.

Construir Ficha Vaca.


La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

36

A continuacin vamos a construir una Ficha Vaca , para poder entrar datos, corregir y mostrar, las fichas que ya estn archivadas, as para la construccin de este mdulo, vamos a utilizar los siguientes comandos internos de C3, Method, Class y Return , la variable de entorno de C3, Brush , las datas AutoSize, Color, BorderStyle y Transparent , junto con las funciones, Tlabel(), Create(), SetBounds() y la funcin que creamos nosotros, en la practica anterior, SayDatos , tal como se muestra a continuacin: /* * Mdulo Para Construir una Ficha Vaca. */ Method FichaVacia( va,ve,c1,c2,c3,c4,co,nf,tf,cf,al ) Class TPrincipal // Crea el Recuadro Para la Ficha. va := TLabel():Create( ve ) va :AutoSize := .f. va :SetBounds( c1,c2,c3,c4 ) va :Brush:Color := co va :BorderStyle := bsSingle va :Transparent := .f. // Crear una Ficha Vaca. ::SayDatos( va,ve,20,30,co ,,,,,.f., 'Titulo Nacional : ') ::SayDatos( va,ve,496,30,co ,,,,,.f., 'Numero : .' ) ::SayDatos( va,ve,20,60,co ,,,,,.f., 'Titulo Original :' ) ::SayDatos( va,ve,496,60,co ,,,,,.f., 'Tema : ' +Repli(' . ',3)) ::SayDatos( va,ve,20,90,co ,,,,,.f., 'Nacionalidad : . ' ) ::SayDatos( va,ve,496,90,co ,,,,,.f., 'Color : ' +Repli(' . ',8)) ::SayDatos( va,ve,20,120,co ,,,,,.f., 'Duracin : ' +Repli(' . ',4)) ::SayDatos( va,ve,496,120,co ,,,,,.f., 'Ao : ' +Repli(' . ',9)) ::SayDatos( va,ve,20,150,co ,,,,,.f., '1 Actor : ' +Repli(' . ',5)) ::SayDatos( va,ve,384,150,co ,,,,,.f., '2 Actor : . .' ) ::SayDatos( va,ve,20,180,co ,,,,,.f., '3 Actor : ' +Repli(' . ',5)) ::SayDatos( va,ve,384,180,co ,,,,,.f., '4 Actor : . .' ) ::SayDatos( va,ve,20,210,co ,,,,,.f., 'Distribucin : . .' ) ::SayDatos( va,ve,384,210,co ,,,,,.f., 'Produccin :' ) ::SayDatos( va,ve,20,240,co ,,,,,.f., 'Guionista : ' +Repli(' . ',4)) ::SayDatos( va,ve,384,240,co ,,,,,.f., 'Fotografa : .' ) ::SayDatos( va,ve,20,270,co ,,,,,.f., 'Msica : ' +Repli(' . ',5)) ::SayDatos( va,ve,384,270,co ,,,,,.f., 'Direccin : .' ) ::SayDatos( va,ve,20,310,co ,,,,,.f., 'Argumento : ' ) Return Nil Nota: Las variables de la entrada de la funcin, FichaVacia( va,ve,c1,c2,c3,c4,co,nf,tf,cf,al ) equivale a los siguientes parmetros: va ve c1,c2,c3,c4 co nf tf cf al => => => => => => => => Variable de la Funcin. Ventana que llama a esta Ficha. Coordenadas del recuadro de la Ficha. Color del fondo del Recuadro. Tipo de Letra a utilizar. Tamao de la Letra que se va a utilizar. Color de la Letra que se va a utilizar. Alineamiento de la Letra.

**************************************************************************
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

37

Configurar los Mensajes.


Seguidamente vamos a continuar configurando el modulo, aadindole dos nuevas opciones, junto con dos nuevos mensajes, tal como se muestra a continuacin: /* * Modulo Para Mostrar Mensajes. */ Method LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) Class TPrincipal Local Men // Ventana Para Mostrar los Mensajes. Men := TLabel():Create( ve ) Men :SetBounds( c1 , c2 ) Men :Brush:Color:= cp Men :BorderStyle := bsSingle Men :Transparent:=.f. Men :Font:Name:= nf Men :Font:Size:= .t. Men :Font:Size := tf Men :Font:Color := cl // Mensajes que hay que Mostrar. if me=1 Men :Caption:= La Base de Datos No Existe '+Chr(13)+; ' Sin Ella No Puedo Realizar '+Chr(13)+; ' Ninguna Clase de Gestin. ' elseif me=2 Men :Caption:=' La Ficha que Usted Quiere dar '+Chr(13)+; ' de Alta ya Esta Archivada. ' ::ContaTiempo( 4000,ve ) elseif me=3 Men :Caption:=' Esta Ficha ha Sido Archivada '+Chr(13)+; Space(12)+' Correctamente .' elseif me=5 Men :Caption:=' Espere por Favor a que Termine '+Chr(13)+; ' de Archivar Esta Ficha .' Endif Retur nil Nota: Las variables de entrada de la funcin LLamaMensage( ve , c1 , c2 , cp , nf , tf , cl , me ) corresponden a los siguientes parmetros: ve c1 y c2 cp nf tf cl me La constante interna de => Ventana que llama el mensaje. => Posicin del mensaje dentro de la ventana. => Color de la ventana. => Tipo de letra a utilizar, por defecto(Arial) => Tamao de la letra que esta utilizando. => Color de la letra que se esta utilizando. => Mensaje que necesitamos mostrar. C3, bsSingle muestra un marco, al rededor del mensaje.

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

**************************************************************************

Ficha Para Entrar o Corregir Datos.


La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

38

Seguidamente construiremos un mdulo, que nos mostrara una ficha para entrada de Datos nuevos y que luego, como vayamos avanzando en estas practicas, aadindole unas cuantas lneas de codigo ms, lo utilizremos tambin para corregir los datos de las Fichas que ya este archivada en la Base de Datos . Para la construccin de este mdulo, vamos a utilizar los siguientes comandos internos de C3, Method/Return, Class, Local, If/ElseIf/Endif, Use, Index, New Via, Do While/EndDo, Close Data y oSender , las variables locales, Venta oVar, mos, cd, cf, tv, arco, nuco y carco, junto con las variables Privadas , que hemos declarado en el modulo Declaracin de Mtodos , la variable de entorno de C3, Font , las datas BorderStyle, Position, Caption, Alignment y Size , el evento OnExit , junto con las funciones, Array(), Space(), dbGotop() OrdSetFocus(), Eof(), dbSkip(), Tform(), Create(), SetBounds(), Tedit() ShowModal, Close(), Destry() y la que vamos a construir a continuacin nosotros archivar , tal como se muestra a continuacin: /* * Modulo de Entrada de Fichas Nuevas y Corregir Datos. */ Method FichaRecNue( x,x1,x2 ) Class TPrincipal Local Venta, oVar, mos ,cd, cf, tv, arco, nuco, carco oVar :=Array(22) if x2 =1 ::oTN :=Space(34); ::oNU :=0; ::oTO :=Space(34); ::oTE :=Space(10); ::oNA :=Space(20) ::oCL :=Space(6); ::oDU :=Space(6); ::oAN :=Space(6); ::oA1 :=Space(25) ::oA2 :=Space(25) ;::oA3 :=Space(25); ::oA4 :=Space(25); ::oDR :=Space(25) ::oPR :=Space(25); ::oGI :=Space(25); ::oFO :=Space(25); ::oMU :=Space(25) ::oDI :=Space(25); ::oR1 :=Space(94); ::oR2 :=Space(94) ::oR3 :=Space(94) cf :=clLime arco := "Archivar Esta Ficha" carco := "Cancelar Archivar Ficha" nuco :=0 tv:= Space(54)+ 'Rellenar los datos para una ficha nueva' // Recuperamos la Ultima Ficha Para Numeracin Automtica. Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'NU','FiPelicu' )) FiPelicu ->(DbGoTop()) While FiPelicu ->(!Eof()) ::oNU := FiPelicu -> NU FiPelicu ->(DbSkip()) EndDo Close Data ::oNU := ::oNU+1 // Poner Nmero de Codigo Automtico. Cd :=StrZero(:: oNU,10 ) endif // Ficha Nueva Para Entrada o Corregir Datos. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 696, 500 ) Venta :Position := poActiveCenter Venta :Caption:=tv
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

39

// Llama Ficha Vaca. ::FichaVacia( mos,Venta,10,10,670,404, cf,,,,) // Entrada del Numero de Codigo Automtico. oVar[1] := TLabel():Create( Venta ) oVar[1] :SetBounds(570,28) oVar[1] :Brush:Color:=clWhite oVar[1] :BorderStyle := bsSingle oVar[1] :Transparent:=.f. oVar[1] :Font:Size:=12 oVar[1] :Caption:=' '+ Cd // Entrada del Titulo Nacional. oVar[2] := TEdit():Create( Venta ) oVar[2] :SetBounds( 124, 28, 300, 0 ) oVar[2] :Font:Size:=11 oVar[2] :Caption:= ::oTN oVar[2] :OnExit:={|oSender| ::oTN := oVar[2] :Caption} // Entrada del Titulo Original. oVar[3] := TEdit():Create( Venta ) oVar[3] :SetBounds( 124, 58, 300, 0 ) oVar[3] :Font:Size:=11 oVar[3] :Caption:= ::oTO oVar[3]:OnExit:={|oSender| ::oTO := oVar[3] :Caption} // Entrada del Tema. oVar[4] :=TEdit():Create( Venta ) oVar[4] :SetBounds(580, 58, 90, 0 ) oVar[4] :Font:Size:=11 oVar[4] :Caption:= ::oTE oVar[4] :OnExit:={|oSender| ::oTE := oVar[4] :Caption} // Entrada de la Nacionalidad. oVar[5] := TEdit():Create( Venta) oVar[5] :SetBounds(124, 88, 160, 0 ) oVar[5] :Font:Size:=11 oVar[5] :Caption:= ::oNA oVar[5] :OnExit:={|oSender| ::oNA := oVar[5] :Caption} // Entrada del Color. oVar[6] := TEdit():Create( Venta) oVar[6] :SetBounds(622, 88, 48, 0 ) oVar[6] :Font:Size:=11 oVar[6] :Caption:= ::oCL oVar[6] :OnExit:={|oSender| ::oCL := oVar[6] :Caption} // Entrada de la Duracin. oVar[7] := TEdit():Create( Venta ) oVar[7] :SetBounds(124, 118, 48, 0 ) oVar[7] :Font:Size:=11 oVar[7] :Alignment:=taRightJustify oVar[7] :Caption:= ::oDU oVar[7] :OnExit:={|oSender| ::oDU := oVar[7] :Caption} // Entrada de la Fecha. oVar[8] := TEdit():Create( Venta )
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

40

oVar[8] :SetBounds(628, 118, 42, 0 ) oVar[8] :Font:Size:=11 oVar[8] :Caption:= ::oAN oVar[8] :OnExit:={|oSender| ::oAN := oVar[8] :Caption} // Entrada de la Distribuidora. oVar[9] := TEdit():Create( Venta ) oVar[9] :SetBounds( 124, 148, 190, 0 ) oVar[9] :Font:Size:=11 oVar[9] :Caption:= ::oA1 oVar[9] :OnExit:={|oSender| ::oA1 := oVar[9] :Caption} // Entrada del Productor. oVar[10] := TEdit():Create( Venta ) oVar[10] :SetBounds( 480, 148, 190, 0 ) oVar[10] :Font:Size:=11 oVar[10] :Caption:= ::oA2 oVar [ 10] :OnExit:={|oSender| ::oA2 := oVar[10] :Caption} // Entrada del Guionista. oVar[11] := TEdit():Create( Venta ) oVar[11] :SetBounds( 124, 178, 190, 0 ) oVar[11] :Font:Size:=11 oVar[11] :Caption:= ::oA3 oVar[11] :OnExit:={|oSender| ::oA3 := oVar[11] :Caption} // Entrada del Director de Fotografa. oVar[12] := TEdit():Create( Venta ) oVar[12] :SetBounds( 480, 178, 190, 0 ) oVar[12] :Font:Size:=11 oVar[12] :Caption:= ::oA4 oVar[12] :OnExit:={|oSender |::oA4 := oVar[12] :Caption} // Entrada del Director de Msica. oVar[13] := TEdit():Create( Venta ) oVar[13] :SetBounds( 124, 208, 190, 0 ) oVar[13] :Font:Size:=11 oVar[13] :Caption:= ::oDR oVar[13] :OnExit:={|oSender| ::oDR := oVar[13] :Caption} // Entrada del Director. oVar[14] := TEdit():Create( Venta ) oVar[14] :SetBounds( 480, 208, 190, 0 ) oVar[14] :Font:Size:=11 oVar[14] :Caption:= ::oPR oVar[14] :OnExit:={|oSender| ::oPR := oVar[14] :Caption} // Entrada del 1 Artista. oVar[15] := TEdit():Create( Venta ) oVar[15] :SetBounds( 124, 238, 190, 0 ) oVar[15]: Font:Size:=11 oVar[15] :Caption:= ::oGI oVar[15] :OnExit:={|oSender| ::oGI := oVar[15] :Caption} // Entrada del 2 Artista. oVar[16] := TEdit():Create( Venta ) oVar[16] :SetBounds( 480, 238, 190, 0 ) oVar[16] :Font:Size:=11
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

41

oVar[16] :Caption:= ::oFO oVar[16] :OnExit:={|oSender| ::oFO := oVar[16 ]:Caption} // Entrada del 3 Artista. oVar[17] := TEdit():Create( Venta ) oVar[17] :SetBounds( 124, 268, 190, 0 ) oVar[17] :Font:Size:=11 oVar[17] :Caption:= ::oMU oVar[17] :OnExit:={|oSender| ::oMU := oVar[17] :Caption} // Entrada del 4 Artista. oVar[18] := TEdit():Create( Venta ) oVar[18] :SetBounds( 480, 268, 190, 0 ) oVar[18] :Font:Size:=11 oVar[18] :Caption:= ::oDI oVar[18] :OnExit:={|oSender| ::oDI := oVar[18] :Caption} // Entrada del Argumento. oVar[19] := TEdit():Create( Venta ) oVar[19] :SetBounds( 110, 310, 560, 0 ) oVar[19] :Font:Size:=11 oVar[19] :Caption:= ::oR1 oVar[19] :OnExit:={|oSender| ::oR1 := oVar[19] :Caption} oVar[20]:= TEdit():Create( Venta ) oVar[20] :SetBounds( 110, 333, 560, 0 ) oVar[20] :Font:Size:=11 oVar[20] :Caption:= ::oR2 oVar[20] :OnExit:={|oSender| ::oR2 := oVar[20] :Caption} oVar[21] := TEdit():Create( Venta ) oVar[21] :SetBounds( 110, 356, 560, 0 ) oVar[21] :Font:Size:=11 oVar[21] :Caption:= ::oR3 oVar[21] :OnExit:={|oSender| ::oR3 := oVar[21] :Caption} oVar[22] := TEdit():Create( Venta ) oVar[22] :SetBounds( 110, 379, 560, 0 ) oVar[22] :Font:Size:=11 oVar[22] :Caption:= ::oR4 oVar[22] :OnExit:={|oSender| ::oR4 := oVar[22] :Caption} // Boton Para Archivar. ::CrearBoton( Venta,21,430,214,23,9,arco ,{|oSender|::Archivar( ::oNU, ; ::oTN,::oTO,::oTE,::oNA,::oCL,::oDU,::oAN,::oA1,::oA2,::oA3,::oA4, ; ::oDR,::oPR,::oGI,::oFO,::oMU,::oDI,::oR1,::oR2,::oR3,::oR4,nuco,x1 ),; Venta:Close(),Venta:Destroy()}) // Boton Para Cancelar. ::CrearBoton( Venta,470,430,200,23,9,carco, ; {|oSender|Venta:Close(),Venta:Destroy()}) Venta :ShowModal() Return Nil ***************************************************************************
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

42

Archivar las Fichas.


Como ultimo ejercicio de esta practica, vamos a construir el modulo, para Archivar las Fichas en la Base de Datos , as para la construccin de este modulo, vamos a utilizar los siguiente comandos internos de C3, Method/Return, Class, Local, If/EndIf Use, Index, New Via, Append Blank, Replace, With y Reindex, la variable de entorno interna de C3, Brush , las Datas borderStyle, Color, Position Caption , junto con las funciones Tform(), Create(), SetBounds(), space() ShowModal() y la funciones que hemos creado nosotros, en otras practicas anteriores ::ContaTiempo() y ::VenMenAuto() , tal como se muestra a continuacin: /* * Mdulo Para Archivar los Datos de la Ficha. */ Method Archivar( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14, ; x15,x16,x17,x18,x19,x20,x21,x22,x23,x24 ) Class TPrincipal // Ficha Vaca Vuelve al Men Principal. if x1 =0 Return Nil endif // Mensaje de que Esta Archivando la Ficha ::VenMenAuto(592,170,2,5,clLime) if x23 =0 // Abre la Base de Datos Para Archivar. Use FiPelicu Index FiPelicu New Via 'DbfCdx' Append Blank endif // Grava la Ficha. Replace NU With x1 , TN with x2 , TO with x3 , TE with x4 , NA with x5 , CL with x6 ,; DU with x7 , AN with x8 , A1 with x9 , A2 with x10 , A3 with x11 , A4 with x12 ,; DR with x13 , PR with x14 , GI with x15 , FO with x16 , MU with x17 , DI with x18 ,; R1 with x19 , R2 with x20 , R3 with x21 , R4 with x22 Reindex close Data // Mensaje de que la ficha ha sido archivada. ::VenMenAuto(552,170,2,3,clLime) return nil Nota: Las variables de entrada de la funcin Archivar( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,; x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24 ) , se corresponden con todas las variables, de salida de la Funcin FichaRecNue(). ************************************************************************** Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe y pulsar en la opcin Alta de Fichas , del menu principal y nos aparecer en la pantalla una ventana, con el siguiente mensaje que nos pedir:

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

43

Ficha Para dar de Alta


Introduzca un nombre cualquiera y pulse Enter o con el Ratn , pulse el Botn para buscar, si encuentra en la Base de Datos el nombre, que usted ha introducido nos avisara con el siguiente mensaje:

La Ficha que Usted Quiere dar de Alta ya Esta Archivada.


Pero si NO lo encuentra nos presentara, una Ficha Vaca con todos los datos, que tenemos que rellenar en Blanco , una vez que estn rellenados todos los datos, pulsar Enter o pulsar con el Ratn el Botn de Archivar Esta Ficha , seguidamente se nos mostraran dos mensajes ms y volver al Men Principal , Lo cual nos demuestra que la practica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.bak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Nota: Como habrn podido observar en esta practica, todas las Variables que hemos utilizado y que fueron declaradas en el mdulo Declaracin de Mtodos , llevan todas Dos Puntos Dobles , tal como ya se advirti en la Prctica 4 , de que cuando las tengamos que utilizar siempre hay que anteponerles Dos Puntos Dobles , tal como se muestra a continuacin: ::Image, ::oTN, ::oTO Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. Local If/EndIf Use Index Close Data Return While/Enddo Space() Empty() dbSeek() Recno() Eof() Replicate() dbGotop() dbSkip() Chr()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

44

Practica - 9
En esta prctica lo primero que vamos hacer, ser terminar de construir, el Modulo que nos permita la entrada de Datos y tambin Corregir las los Datos de las Fichas , as que lo primero que haremos ser, configurar la opcin Corregir Fichas , del Men Principal , tal como se muestra a continuacin:

Configurar el Men Principal.


// Men Para Corregir Fichas. Menu :MenuItem( ns +" Corregir Fichas "," Corregir los Datos "+; " de las Fichas. ",{|oSender|::BusBaseDatos(1,2,,2)}) Nota: Las variables de la entrada de la funcin, BuscaBaseDatos( x,tr,va,me ) equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =2 Presenta una Ficha Para Corregir. me =2 Mensaje a Mostrar. ***************************************************************************

Reconstruir Modulo Busca Base de Datos.


A continuacin vamos a reconstruir totalmente este mdulo, as para esta practica vamos a utilizar, los siguientes comandos internos de C3, Method/Return, Class y If/EndIf , junto con la funcin de C3, File() y las dos funciones, que creamos nosotros en practicas anteriores, VenMenAuto() y BuscaFicha() , como pueden comprobar esta funcin, en la practica anterior solo tenia una variable de entrada y ahora tiene cuatro, esto lo hemos modificado, para poder ir amplindolo, a medida que vayamos realizando otras prcticas, as que una vez terminado de reconstruir, debe de quedar tal como se muestra a continuacin: /* * Modulo Para Buscar la Base de Datos. */ Method BusBaseDatos( x,tr,va,me ) Class TPrincipal if ! File( 'FiPelicu.dbf' ) // Si no la Encuentra nos Avisa que no Existe. ::VenMenAuto(530,212,1,1,clFuchsia) Retur Nil Else if x=1 // Hacer Ficha Nueva. ::BuscaFicha( tr,me ) endif Endif Return Nil Nota: Como han podido comprobar en esta prctica, solo hemos utilizado tres de las cuatro variables de entrada, la otra ya la utilizaremos en las prximas prcticas.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

45

Las variables de la entrada de la funcin, BuscaFicha( x,me ) equivale a los siguientes parmetros: x => Trabajo a Realizar. me => Mensaje a Mostrar. **************************************************************************

Configurar Buscar Fichas.


A continuacin vamos a modificar, el modulo de Buscar Fichas , como ya hemos hecho anteriormente, con las llamadas del Men Principal , tanto para crear una Ficha Nueva como para Corregir Fichas . En este modulo vamos a utilizar, todo lo del modulo de la Prctica Anterior y solo vamos a modificar, las variables de entrada de la funcin, x, me , tambin agregaremos dos variables nuevas, en la declaracin de variables locales, bf, co , seguidamente tambin reconstruiremos, las once siguientes lneas del primer If/EndIf , para adaptarlas a las nuevas entradas de la funcin, seguidamente configuraremos el segundo If/endIf , para que nos presente la ficha, que tengamos que rectificar, por ltimo en este modulo configuraremos el ltimo If/EndIf , para si no encuentra la ficha que buscamos, que nos avise con un mensaje. Una vez terminado de modificar este modulo, debe de quedar tal como se muestra s continuacin: /* * Modulo Buscar Fichas. */ Method BuscaFicha( x,me ) Class TPrincipal Local venta,edit,n :=0 ,fi :=Space(34) ,mos,bf,co // Creamos la ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 474, 210 ) Venta :Position := poActiveCenter if x =1 // Hacer Fichas Nuevas. bf :=" Comprobar si Esta Ficha ya Esta Archivada " Venta :Caption := Space(40)+" Hacer Fichas Nuevas " ::SayDatos( mos,Venta ,30,10,,'Arial Black',25,,,.t.,; 'Ficha Para dar de Alta' ) elseif x =2 // Corregir Fichas co:=clYellow bf :=" Buscar Esta Ficha Para Rectificarla" Venta:Caption := Space(41)+" Corregir Fichas " ::SayDatos( mos,Venta ,30,10,,'Arial Black',25,,,.t.,; ' Ficha Para Corregir' ) endif Edit := TEdit():Create( Venta ) Edit :SetBounds( 30, 70, 410, 0 ) Edit :Font:Name:= " Arial " Edit :Font:Size:= 14 edit :caption:= fi
La Antorcha de los Grandes Exitos (Fraguibo)

// Cambiar Variables. // Agregar dos Nuevas Variables

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea // Nueva Lnea // Nueva Lnea // Nueva Lnea // Nueva Lnea // Nueva Lnea

fraguibo1@hotmail.com

Pgina:

46

edit :OnExit:={|oSender| f i:= Edit :Caption, Venta :Close(), Venta :Destroy()} // Boton Para Comprobar si Existe la Ficha. ::CrearBoton( Venta ,110,122,245,30,9, bf ,{|oSender| fi := Edit :Caption,; venta :Close(), venta :Destroy()}) Venta :ShowModal() // Abre Base de Datos y Busca la Ficha. if !Empty( fi ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( fi ) n :=Recno() if !eof() if x =1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto(570,170,2,2,clLime) close data return nil elseif x =2 // Nueva Lnea. close data // Nueva Lnea. ::FichaRecNue(, fi,2 ) // Nueva Lnea. return nil // Nueva Lnea. endif endif endif Close Data // Si no hay Nada que Buscar Vuelve al Men. if n =0 return nil endif if me =1 // Si no la Encuentra nos Presenta una Ficha Nueva. ::FichaRecNue(, fi,1 ) elseif me =2 // Nueva Lnea. // Si no la Encuentra nos Avisa con un Mensaje. // Nueva Lnea. ::VenMenAuto(560,170,2,6,co) // Nueva Lnea. endif Return Nil Nota: Las variables de la entrada de la funcin, FichaRecNue( x,x1,x2 ) siguientes parmetros: x1 => La Ficha a Buscar. x2 => Presenta la Ficha Para Rectificar.

equivale a los

**************************************************************************

Mostrar Mensajes.
Seguidamente en el Mdulo para Mostrar Mensajes , le aadiremos un nuevo mensaje para cuando busque una ficha y no la encuentre, que nos muestre un mensaje diciendonos que la ficha que buscamos no se encuentra en la Base de Datos. Una vez que este colocado este nuevo mensaje, el mdulo deber de quedar tal como se muestra a continuacin:
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

47

/* * Modulo Para Mostrar Mensajes. */ Method LLamaMensage( ve,c1,c2,cp,nf,tf,cl,me ) Class TPrincipal Local Men // Ventana Para Mostrar los Mensajes. Men := TLabel():Create( ve ) Men :SetBounds(c1,c2) Men :Brush:Color:= cp Men :BorderStyle := bsSingle Men :Transparent:=.f. Men :Font:Name:= nf Men :Font:Size:= .t. Men :Font:Size := tf Men :Font:Color := cl // Mensajes que hay que Mostrar . if me =1 Men :Caption:=' La Base de Datos No Existe '+Chr(13)+; ' Sin Ella No Puedo Realizar' +Chr(13)+; ' Ninguna Clase de Gestin. ' elseif me =2 Men :Caption:=' La Ficha que Usted Quiere dar '+Chr(13)+; ' de Alta ya Esta Archivada. ' ::ContaTiempo(4000,ve) elseif me =3 Men :Caption:=' Esta Ficha ha Sido Archivada '+Chr(13)+; Space(12)+' Correctamente. ' elseif me =5 Men:Caption:=' Espere por Favor a que Termine '+Chr(13)+; ' de Archivar Esta Ficha. ' elseif me =6 men :Caption:= ' La Ficha que Usted Busca No ' +Chr(13)+; ' se Encuentra en Este Archivo ' ***************************************************************************

Ficha de Entrar o Corregir Datos.


A Continuacin vamos a terminar de construir, el modulo de Entrar o Corregir Datos as como ya dijimos en la prctica anterior, este mdulo lo vamos a utilizar tambin para Corregir o Modificar Datos de las Fichas . Como en esta practica vamos a utilizar, el mismo Modulo que en la prctica anterior solo comentaremos los cambios que hay que realizar. El primer cambio que vamos a realizar ser, agregar unas cuantas lneas de Codigo , al principio del Modulo , tal como se muestra a continuacin: /* * Modulo de Entrada de Fichas Nuevas y Corregir Datos. */ Method FichaRecNue( x,x1,x2 ) Class TPrincipal Local Venta,oVar,mos,cd,cf,tv,arco,nuco,carco oVar :=Array(22)
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

48

if x2 =1 ::oTN :=Space(34); ::oNU :=0;: :oTO :=Space(34); ::oTE :=Space(10) ::oNA :=Space(20); ::oCL :=Space(6); ::oDU :=Space(6); ::oAN :=Space(6) ::oA1 :=Space(25);: :oA2 :=Space(25); ::oA3 :=Space(25); ::oA4 :=Space(25) ::oDR :=Space(25); ::oPR :=Space(25); ::oGI :=Space(25); ::oFO :=Space(25) ::oMU :=Space(25); ::oDI :=Space(25); ::oR1 :=Space(94); ::oR2 :=Space(94) ::oR3 :=Space(94); ::oR4 :=Space(94) tv :=Space(54)+ 'Rellenar los datos para una ficha nueva' cf :=clLime arco := "Archivar Esta Ficha" carco := "Cancelar Archivar Ficha" nuco :=0 // Recuperamos la Ultima Ficha Para Numeracin Automtica. Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'NU','FiPelicu' )) FiPelicu ->(DbGoTop()) While FiPelicu ->(!Eof()) ::oNU := FiPelicu -> NU FiPelicu ->(DbSkip()) EndDo Close Data ::oNU := ::oNU +1 Cd :=StrZero( ::oNU ,10) elseif x2=2 // Abre Base de Datos y Busca la Ficha. if !Empty( x1 ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( x1 ) // Iguala las Variables. ::oNU :=FiPelicu->NU; ::oTN :=FiPelicu->TN; ::oTO :=FiPelicu->TO ::oTE :=FiPelicu->TE; ::oNA :=FiPelicu->NA; ::oCL :=FiPelicu->CL ::oDU :=FiPelicu->DU; ::oAN :=FiPelicu->AN; ::oA1 :=FiPelicu->A1 ::oA2 :=FiPelicu->A2; ::oA3 :=FiPelicu->A3; ::oA4 :=FiPelicu->A4 ::oDR :=FiPelicu->DR; ::oPR :=FiPelicu->PR; ::oGI :=FiPelicu->GI ::oFO :=FiPelicu->FO; ::oMU :=FiPelicu->MU; ::oDI :=FiPelicu->DI ::oR1 :=FiPelicu->R1; ::oR2 :=FiPelicu->R2; ::oR3 :=FiPelicu->R3 ::oR4 :=FiPelicu->R4 tv :=Space(52)+ 'Aqu Tiene la Ficha que Usted Quiere Corregir' cf :=clYellow arco := "Corregir Esta Ficha" carco := "Cancelar Corregir Ficha" nuco :=1 if !eof() Close Data endif endif Cd :=StrZero( ::oNU ,10) endif // Nueva Lnea. // // // // // // // // // // // // // // // // // // // // // // // Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Lnea. Lnea. Lnea. Lnea. Lnea. Lnea . Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea.

El resto del modulo hay que dejarlo igual que estaba en la prctica anterior. **************************************************************************
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

49

Archivar las Fichas.


Como ultimo ejercicio de esta practica, vamos a configurar este modulo, para Archivar las Fichas en la Base de Datos , una vez que estn Corregidas o Modificadas , as para la configuracin de este modulo, vamos a aadirle una cuantas lneas de codigo, pero utilizando el mismo Modulo de la prctica anterior, y una vez terminado de configurar debe de quedar tal como se muestra a continuacin: /* * Mdulo Para Archivar los Datos de la Ficha. */ Method Archivar( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14, ; x15,x16,x17,x18,x19,x20,x21,x22,x23,x24 ) Class TPrincipal // Ficha Vaca Vuelve al Men Principal. if x1 =0 Return Nil endif // Mensaje de que Esta Archivando la Ficha ::VenMenAuto(592,170,2,5,clLime) if x23 =0 // Abre la Base de Datos Para Archivar. Use FiPelicu Index FiPelicu New Via 'DbfCdx' Append Blank elseif x23=1 // Abre Base de Datos y Busca la Ficha. if !Empty(x24) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu->(OrdSetFocus('TN','FiPelicu')) DbSeek(x24) endif endif // Grava la Ficha. Replace NU With x1 , TN with x2 , TO with x3 , TE with x4 , NA with x5 , CL with x6 ,; DU with x7 , AN with x8 , A1 with x9 , A2 with x10 , A3 with x11 , A4 with x12 ,; DR with x13 , PR with x14 , GI with x15 , FO with x16 , MU with x17 , DI with x18 ,; R1 with x19 , R2 with x20 , R3 with x21 , R4 with x22 Reindex close Data // Mensaje de que la ficha ha sido archivada. ::VenMenAuto(552,170,2,3,clLime) return nil Nota: Las variables de entrada de la funcin Archivar( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,; x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24 ) , se corresponden con todas las variables, de salida de la Funcin FichaRecNue(). **************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

50

Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe y pulsar en la opcin Corregir Fichas , del menu principal y nos aparecer en la pantalla una ventana, con el siguiente mensaje que nos pedir:

Ficha Para Corregir


Introduzca el nombre de una ficha, que ya este archivada y pulse Enter o con el Ratn pulse el Botn, de Buscar Esta Ficha Para Corregir y encuentra en la Base de Datos el nombre, que usted a introducido nos Presentara la Ficha, para que la podamos Corregir o Modificar , pero si no la encuentra nos mostrara un mensaje, dicindonos que la ficha que buscamos, no se encuentra en la Base de Datos.

La Ficha que Usted Busca No se Encuentra en Este Archivo


Y nos volver automticamente al Men Principal , Lo cual nos demuestra que la prctica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.bak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. ***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

51

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

52

Practica - 10
Dar de Baja Fichas.
En esta practica vamos a construir, el Modulo que nos permita, dar de Baja o Borrar una Ficha , este Modulo en principio lo utilizaremos, para dar de Baja o Borrar fichas pero tambin lo utilizaremos, para Imprimir y Consulta r fichas . Para empezar esta prctica, lo primero que haremos ser, configurar el Modulo de Declaracin de Mtodos , en donde le aadiremos dos nuevos Mtodos , llamados conBoImpri y BorraFicha , tal como se muestra a continuacin:

Configurar la Declaracin de Mtodos.


/* * Modulo de la Declaracin de Mtodos. */ Class TPrincipal From TForm Private: Data Image,oNU,oTE,oNA,oDU,oCL,oTN,oTO,oAN,oA1,oA2,oA3,oA4,; oA5,oA6,oDR,oPR,oGI,oFO,oMU,oDI,oR1,oR2,oR3,oR4 Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method EndClass ***************************************************************************

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha

// Nueva Lnea. // Nueva Lnea.

Configurar el Men Principal.


Seguidamente vamos a seguir configurando el Men Principal , en esta prctica vamos a configurar, la opcin Borrar Fichas , tal como se muestra a continuacin: // Men Para dar de Baja las Fichas. Menu :MenuItem( ns +" Borrar Fichas "," Dar de Baja las "+; " Fichas. ",{|oSender|::BusBaseDatos(1,3,,2)})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Nueva Lnea. // Nueva Lnea.


Pgina:

53

Nota: Las variables de la entrada de la funcin, BuscaBaseDatos( x,tr,va,me ) equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =3 Presenta una Ficha Para Corregir. me =2 Mensage a Mostrar. ***************************************************************************

Buscar Fichas.
A continuacin configuraremos tambin el modulo Buscar Fichas , en donde primero aadiremos, siete nuevas lneas de Codigo en el primer If/EndIf , el cual una vez aadidas estas nuevas lneas de Codigo , deber de quedar tal como se muestra a continuacin: if tr =1 // Hacer Fichas Nuevas. bf := "Comprobar si Esta Ficha ya Esta Archivada" Venta :Caption := Space(40)+ "Hacer Fichas Nuevas" ::SayDatos( mos,Venta, 30,10,, 'Arial Black' ,25,,,.t.,; 'Ficha Para dar de Alta' ) elseif tr =2 // Corregir Fichas co :=clYellow bf := "Buscar Esta Ficha Para Rectificarla" Venta :Caption := Space(41)+ "Corregir Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Corregir' ) elseif tr =3 // Borrar Fichas co :=clRed bf := "Buscar Esta Ficha Para Borrarla" Venta :Caption := Space(44)+ "Borrar Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Borrar' ) endif

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

Seguidamente terminaremos de configurar este Modulo , aadindole cuatro nuevas lneas de Codigo , en la parte de Abre Base de Datos y Busca la Ficha , el cual una vez aadidas estas nuevas lneas de Codigo , deber de quedar como se muestra a continuacin: // Abre Base de Datos y Busca la Ficha. if !Empty( fi ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( fi ) n :=Recno() if !eof() if tr =1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto(570,170,2,2,clLime) close data return nil elseif tr =2 close data ::FichaRecNue(, fi ,2)
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

54

return nil elseif tr =3 close data ::ConBoImpri( fi ,2) return nil endif endif endif

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

***************************************************************************

Configurar Mensajes.
Seguidamente vamos a continuar configurando el modulo, aadindole dos nuevas opciones, junto con dos nuevos mensajes, tal como se muestra a continuacin: // Mensajes que hay que Mostrar. elseif me =7 men :Caption:=' Esta Usted Seguro de Querer '+Chr(13)+; Space(8)+' Borrar Esta Ficha ' elseif me =8 men :Caption:=' Esta Ficha ha Sido Borrada '+Chr(13)+; Space(10)+' Correctamente '

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

**************************************************************************

Borrar, Consultar o Imprimir Fichas.


A continuacin vamos a construir un mdulo, para Borrar o dar de Baja las Fichas pero este mismo Modulo, lo utilizaremos tambin en prximas prcticas, para Consultar o Imprimir Fichas. En este ejercicio para montar este mdulo vamos a utilizar, los siguientes comandos internos de C3, Method/Return, Class, Local, If/EndIf, Use, Index, new Via, Close Data y oSender, las variables Venta, mos, n, cd, mb y la variable de entorno de C3, Brush , las datas Caption, Color, BorderStyle y Position , junto con las funciones, Array(), Empty(), OrdSetFocus() dbSeek(), Recno(), Eof(), StrZero(), Tform(), Create() , SetBounds() Space(), Close(), Destroy(), ShowModal() y las Funciones creadas por nosotros en prcticas anteriores, FichaVacia(), SayDatos y CreaBoton , tal como se muestra a continuacin: /* * Modulo Consultar, Borrar o Imprimir una Ficha. */ Method ConBoImpri( x,x1 ) Class TPrincipal Local Venta,mos,n :=0 ,cd,mb mos :=Array(26) // Abre Base de Datos y Busca la Ficha. if !Empty( x ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus(' TN ',' FiPelicu ')) DbSeek( x )
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

55

n :=Recno() // Iguala las Variables. ::oNU :=FiPelicu->NU; ::oTN :=FiPelicu->TN; ::oTO :=FiPelicu->TO ::oTE :=FiPelicu->TE; ::oNA :=FiPelicu->NA; ::oCL :=FiPelicu->CL ::oDU :=FiPelicu->DU; ::oAN :=FiPelicu->AN; ::oA1 :=FiPelicu->A1 ::oA2 :=FiPelicu->A2; ::oA3 :=FiPelicu->A3; ::oA4 :=FiPelicu->A4 ::oDR :=FiPelicu->DR; ::oPR :=FiPelicu->PR; ::oGI :=FiPelicu->GI ::oFO :=FiPelicu->FO; ::oMU :=FiPelicu->MU; ::oDI :=FiPelicu->DI ::oR1 :=FiPelicu->R1; ::oR2 :=FiPelicu->R2; ::oR3 :=FiPelicu->R3 ::oR4 :=FiPelicu->R4 if !eof() Close Data Cd :=StrZero( ::oNU ,10) // Si la Encuentra Nos la Muestra . Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 696, 490 ) Venta :Position := poActiveCenter if x1 =2 mb :=" Cancelar Borrar Ficha " Venta :Brush:Color := clRed Venta :Caption:=Space(44)+' Aqu Tiene la Ficha que '+; ' Usted a Solicitado Para Borrar ' endif // Muestra Ficha Vaca. ::FichaVacia( mos,Venta ,10,10,670,394,clAqua,,,,) // Muestra los Datos de la Ficha . ::SayDatos(mos,Venta,124,25,clAqua,,14,,,.f.,::oTN) ::SayDatos(mos,Venta,570,25,clAqua,,14,,,.f.,Cd) ::SayDatos(mos,Venta,124,55,clAqua,,14,,,.f.,::oTO) ::SayDatos(mos,Venta,584,55,clAqua,,14,,taRightJustify,.f.,::oTE) ::SayDatos(mos,Venta,124,85,clAqua,,14,,,.f.,::oNA) ::SayDatos(mos,Venta,622,85,clAqua,,14,,taRightJustify,.f.,::oCL) ::SayDatos(mos,Venta,124,115,clAqua,,14,,,.f.,::oDU) ::SayDatos(mos,Venta,622,115,clAqua,,14,,taRightJustify,.f.,::oAN) ::SayDatos(mos,Venta,124,145,clAqua,,14,,,.f.,::oA1) ::SayDatos(mos,Venta,466,145,clAqua,,14,,,.f.,::oA2) ::SayDatos(mos,Venta,124,175,clAqua,,14,,,.f.,::oA3) ::SayDatos(mos,Venta,466,175,clAqua,,14,,,.f.,::oA4) ::SayDatos(mos,Venta,124,205,clAqua,,14,,,.f.,::oDR) ::SayDatos(mos,Venta,466,205,clAqua,,14,,,.f.,::oPR) ::SayDatos(mos,Venta,124,235,clAqua,,14,,,.f.,::oGI) ::SayDatos(mos,Venta,466,235,clAqua,,14,,,.f.,::oFO) ::SayDatos(mos,Venta,124,265,clAqua,,14,,,.f.,::oMU) ::SayDatos(mos,Venta,466,265,clAqua,,14,,,.f.,::oDI) ::SayDatos(mos,Venta,114,310,clAqua,,11,,,.f.,::oR1) ::SayDatos(mos,Venta,114,330,clAqua,,11,,,.f.,::oR2) ::SayDatos(mos,Venta,114,350,clAqua,,11,,,.f.,::oR3) ::SayDatos(mos,Venta,114,370,clAqua,,11,,,.f.,::oR4)

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

56

if x1 =2 // Boton Para Borrar. ::CrearBoton( Venta ,135,420,200,23,9," Borrar Esta Ficha ",; {|oSender|::BorraFicha( x ), Venta :Close(), Venta :Destroy()}) // Boton Para Cancelar. ::CrearBoton( Venta ,370,420,200,23,9,mb,; {|oSender| Venta :Close(), Venta :Destroy()}) endif Venta :ShowModal() endif endif Return Nil ***************************************************************************

Borrar Ficha.
Por ultimo en esta prctica vamos a construir el Modulo , que nos Borrara o nos Dar de Baja , la Ficha que hayamos seleccionado. Para la construccin de este Modulo , vamos a utilizar los siguientes Comandos internos de C3 Method/Return, Class, Local, If/EndIf, .AND., Use Reindex, New Via, pack y Close Data, las Variables Venta, Borra y n , la variable de entorno de C3, Brush , las datas BorderStyle, Color, Position y Caption , junto con la funciones Tform(), Create(), setBounds(), ShowModal() Space(), empty(), OrdSetFocus(), Close()2, Destroy(), dbSeek(), Recno() Delete() y las funciones creadas por nosotros en anteriores prcticas, CrearBoton() VenMenAuto() y LlamaMensage() , tal como se muestra a continuacin: */ * Modulo para Borrar Ficha. */ Method BorraFicha( x ) Class TPrincipal Local venta,Borra :=.F., n :=0 // Ventana de Confirmacin. Venta := TForm():Create() Venta :BorderStyle:=bsDialog Venta :SetBounds(0,0,530,200 ) Venta :Brush:Color:=clRed Venta :Position:=poActiveCenter venta :Caption:=Space(48)+ 'Aviso Muy Grave' // LLama Mensage de Confirmacin. ::LLamaMensage( Venta ,20,18,clYellow," Arial Black" ,22,clRed,7) : :CrearBoton( venta ,80,124,140,23,9, "SI" ,; {|oSender|Borra:=.T., Venta :Close(), Venta :Destroy()}) :: CrearBoton( venta ,300,124,140,23,9, "NO" ,; {|oSender| Venta :Close(), Venta :Destroy()}) venta :showModal() // Borra la Ficha. if Borra .AND. !Empty(x)

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

57

if Borra:=.T. Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) if DbSeek( x ) n :=Recno() DbDelete() Pack Close Data ::VenMenAuto(520,170,2,8,clRed) endif endif endif return nil *************************************************************************** Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe pulsar en la opcin Borrar Fichas , del menu principal y nos aparecer en la pantalla, una ventana pidindonos el nombre de una Ficha Para Borrar , podemos introducir el nombre de una de las fichas, que tenemos guardadas en la Base de Datos , de las practicas anteriores Al Pulsar Enter o con el Ratn en el boton de "Buscar Esta Ficha Para Borrarla", si la ficha no se encuentra en la Base de Datos , nos mostrara un mensaje dicindonos, que la ficha no existe, pero si la encuentra nos la mostrara en pantalla. Al Pulsar Enter o con el Ratn en el boton de Borrar Esta Ficha , nos mostrara una ventana que nos preguntara , Esta Usted Seguro de Querer Borrar Esta Ficha , si le pulsamos con el ratn en el SI , nos Borrara la Ficha mostrndonos un mensaje, que nos dir que la Ficha ha sido Borrada Correctamente y nos volver al Men Principal. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Use Index Close Data Return Public Private .AND. Pack
La Antorcha de los Grandes Exitos (Fraguibo)

Chr() Array() Space() Create() Empety() dbSeek() Recno() Eof() dbDelete() StrZero()
fraguibo1@hotmail.com Pgina:

58

Practica - 11
Consultar Fichas.
Empezaremos esta prctica, configurando la entrada Consultar Fichas del Men Principal , tal como se muestra a continuacin: // Men Para Consultar las Fichas. Menu :MenuItem( ns+"Consultar Fichas","Buscar Fichas" +; " Para Consultar." ,{|oSender|::BusBaseDatos(1,4,,2)})

// Nueva Lnea. // Nueva Lnea.

Nota: Las variables de la entrada de la funcin, BuscaBaseDatos( x,tr,va,me ) equivale a los siguientes parmetros: x =1 Buscar si Existe la Ficha. tr =3 Presenta una Ficha Para Consultar. me =2 Mensage a Mostrar. ***************************************************************************

Buscar Fichas.
A continuacin configuraremos tambin el modulo Buscar Fichas , en donde primero aadiremos, siete nuevas lneas de Codigo en el primer If/EndIf , el cual una vez aadidas estas nuevas lneas de Codigo , deber de quedar tal como se muestra a continuacin: if tr =1 // Hacer Fichas Nuevas. bf := "Comprobar si Esta Ficha ya Esta Archivada" Venta :Caption := Space(40)+ "Hacer Fichas Nuevas" ::SayDatos( mos,Venta, 30,10,, 'Arial Black' ,25,,,.t.,; 'Ficha Para dar de Alta' ) elseif tr =2 // Corregir Fichas co :=clYellow bf := "Buscar Esta Ficha Para Rectificarla" Venta :Caption := Space(41)+ "Corregir Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Corregir' ) elseif tr =3 // Borrar Fichas co :=clRed bf := "Buscar Esta Ficha Para Borrarla" Venta :Caption := Space(44)+ "Borrar Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Borrar' )

elseif tr=4 // Consultar Fichas. co:=clFuchsia bf:="Buscar Esta Ficha Para Consultar" Venta:Caption := Space(42)+"Consultar Fichas" ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; 'Ficha Para Consultar')
La Antorcha de los Grandes Exitos (Fraguibo)

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.
Pgina:

fraguibo1@hotmail.com

59

Seguidamente terminaremos de configurar este Modulo , aadindole cuatro nuevas lneas de Codigo , en la parte de Abre Base de Datos y Busca la Ficha , el cual una vez aadidas estas nuevas lneas de Codigo , deber de quedar como se muestra a continuacin: // Abre Base de Datos y Busca la Ficha. if !Empty( fi ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) DbSeek( fi ) n :=Recno() if !eof() if tr =1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto(570,170,2,2,clLime) close data return nil elseif tr =2 close data ::FichaRecNue(, fi ,2) return nil elseif tr =3 close data ::ConBoImpri( fi ,2) return nil

elseif tr=4 Close data ::ConBoImpri(fi,1) return nil


endif endif endif

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

***************************************************************************

Borrar, Consultar o Imprimir Fichas.


A continuacin vamos a configurar el mdulo, para Consultar las Fichas, pero este mismo Modulo, lo utilizaremos tambin en prximas prcticas, para Imprimir Fichas. Para configurar esta opcin de Consultar Fichas , iremos a la seccin Si la encuentra nos la muestra y le aadiremos 4 nuevas lneas en el If x1=1 , una vez colocadas estas nuevas lneas, debe de quedar tal como se muestra a continuacin:

// Si la Encuentra Nos la Muestra. Venta:= TForm():Create() Venta:BorderStyle := bsDialog Venta:SetBounds( 0, 0, 696, 490 ) Venta:Position := poActiveCenter if x1=1 mb:="Salir de Consultar Ficha" Venta:Caption:=Space(52)+'Aqu Tiene la Ficha'+; ' que Usted a Solicitado' elseif x1=2
La Antorcha de los Grandes Exitos (Fraguibo)

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

fraguibo1@hotmail.com

Pgina:

60

mb:="Cancelar Borrar Ficha" Venta:Brush:Color := clRed Venta:Caption:=Space(44)+'Aqu Tiene la Ficha que'+; ' Usted a Solicitado Para Borrar' endif ***************************************************************************
Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe pulsar en la opcin Consultar Fichas , del menu principal y nos aparecer en la pantalla una ventana pidindonos el nombre de una Ficha Para Consultar , podemos introducir el nombre de una de las fichas, que tenemos guardadas en la Base de Datos , de las practicas anteriores Al Pulsar Enter o con el Ratn en el boton de "Buscar Esta Ficha Para Consultar" si la ficha no se encuentra en la Base de Datos , nos mostrara un mensaje dicindonos, que la ficha no existe, pero si la encuentra nos la mostrara en pantalla, lo cual nos demuestra que la prctica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. ***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

61

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

62

Practica - 12
Listados.
En esta practica vamos a construir el Modulo , para mostrar los Listados de varias formas, por Nmero de Codigo , por Orden Alfabtico , por Temas , por Aos y por ultimo por Directores .

Declaracin de Mtodos.
Empezaremos esta practica, configurando el Modulo, de Declaracin de Mtodos, en el que le aadiremos una nueva lnea de Codigo , tal como se muestra a continuacin: Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha Listados

// Nueva Lnea.

***************************************************************************

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le aadiremos unas cuantas lneas de Cdigo , en la seccin Men Para Mostrar Listados , en donde iremos configurando, las distintas llamadas al Mdulo , de Mostrar Listados , tal como se muestra a continuacin: // Men Para Mostrar Listados. Menu :MenuItem(ns+" Consultar Listado "," Listados por "+; " Varios Sistemas. ") Menu :BeginMenu() Menu :MenuItem(" Listado Por Codigo "," Listado por "+; " Nmero de Codigo ",{|oSender|::BusBaseDatos(2,1,'NU',)}) Menu :MenuItem(" Listado Por Alfabeto "," Listado por "+; " Orden Alfabtico. ",{|oSender|::BusBaseDatos(2,2,'TN',)}) Menu :MenuItem(" Listado Por Temas "," Listado por "+; " Temas. ",{|oSender|::BusBaseDatos(2,3,'TE',)}) Menu :MenuItem(" Listado Por Aos "," Listado por Ao "+; " de Produccin. ",{|oSender|::BusBaseDatos(2,5,'AN',)})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// // // // // // // // // // //

Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva

Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea.
Pgina:

63

Menu :MenuItem(" Listado por Direccin "," Listado por "+; "Directores. ",{|oSender|::BusBaseDatos(2,4,'DI',)}) Menu :EndMenu() // Nueva Lnea.

// Nueva Lnea. // Nueva Lnea.

Busca Base de Datos.


A continuacin vamos a configurar el Mdulo , de Buscar la Base de Datos , en donde le aadiremos dos nuevas lneas de Codigo , una vez que este terminado, debe de quedar tal como se muestra a continuacin: /* * Modulo Para Buscar la Base de Datos. */ Method BusBaseDatos( x,tr,va,me ) Class TPrincipal if ! File( 'FiPelicu.dbf' ) // Si no la Encuentra nos Avisa que no Existe. ::VenMenAuto(530,212,1,1,clFuchsia) Retur Nil Else if x =1 // Llama al mdulo Buscar Ficha. ::buscaFicha( tr,me ) elseif x =2 // Llama al Mdulo de Listados. ::Listados( tr,va ) endif Endif Return Nil

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

***************************************************************************

Mostrar Listados.
Por ultimo en esta prctica vamos a construir el Mdulo , para mostrarnos los Listados segn la opcin que hayamos elegido en el Men Principal. Para la construccin de este Mdulo , vamos a utilizar los siguientes, comandos internos de C3, Method/Return, Class, Local, If/EndIf, Use, index, New Via, While/Heido, Close Data y oSender , las variables Venta, String y aArray , las variables de entorno de C3, Brush, HeaderFont y Color , las Datas BorderStyle, Color, Position, Caption, Name, Size, Sizes, Header AlignMents, Bold, RowSelect, ShowFooter, AutoExpand y Items , junto con las funciones, Tform(), Create(), SetBounds(), Space(), TStringGrid() ordSetFocus(), dbGotop(), Eof(), aadd(), StrZero(), dbSkip(), SetFocus Close(), Destroy(), ShowModal() y la creada por nosotros en prcticas anteriores CrearBoton() , junto con las constantes de entorno de C3, bsDialog, taCenter poActiveCenter, taRightJustify y taLeftJustify , tal como se muestra a continuacin: /* * Modulo Para Mostrar Listados. */ Method Listados( tr,va ) Class TPrincipal Local venta, String, aArray
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

64

// Ventana Para Mostrar el Listado. Venta := TForm():Create() Venta :BorderStyle:=bsDialog Venta :SetBounds(0,0,796,522 ) Venta :Brush:Color:=clAqua Venta :Position:=poActiveCenter if tr =1 venta :Caption:=Space(76)+' Listado por Nmero de Codigo ' elseif tr =2 venta :Caption:=Space(76)+' Listado por Orden Alfabtico ' elseif tr =3 venta :Caption:=Space(82)+' Listado por Temas ' elseif tr =5 venta :caption:=Space(75)+' Listado por Ao de Produccin ' elseif tr =4 venta :Caption:=Space(79)+' Listado por Directores ' endif String := TStringGrid():Create( venta ) String :SetBounds( 12, 12, 766, 424 ) String :Font:Name:=" Arial " String :Font:Size:=10 String :Header := {" Codigo "," Titulo "," 1 Actor "," 2 Actor "," Tema ",; " Direccin "," Ao "," Distribucin "} String :Alignments:={taRightJustify,taLeftJustify,taLeftJustify,; taLeftJustify,taLeftJustify,taLeftJustify,taCenter,taLeftJustify} String :HeaderFont:Bold := .T. String :Sizes := { 82,220,150,150,84,150,48,150} String :RowSelect := .T. String :ShowFooter := .F. String :AutoExpand := .T. // Extrae los Datos Para los Listados. Use FiPelicu Index FiPelicu New Via ' DbfCdx ' FiPelicu ->(OrdSetFocus( va ,' FiPelicu ')) FiPelicu ->(DbGoTop()) aArray := {} While FiPelicu ->(!Eof()) aadd( aArray ,{StrZero( FiPelicu -> NU ,10), FiPelicu -> TN , FiPelicu -> A1 ,; FiPelicu -> A2 , FiPelicu -> TE , FiPelicu -> DI , FiPelicu -> AN , FiPelicu -> DR }) FiPelicu ->(dbSkip()) EndDo Close Data String :Items := aArray String :SetFocus() ::CrearBoton( venta ,125,451,215,23,9," Salir del Listado ",; {|oSender|Venta:Close(),Venta:Destroy()}) venta :showmodal() return nil //*********************************************************************//
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

65

Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo tenemos que ejecutar el programa ArchiPel.exe pulsar en la opcin Consultar Listados , del menu principal y nos aparecer en la pantalla varias formas de poder consultar los Listados , escogeremos la forma que ms se adapte a nuestras necesidades y nos aparecer el Listado , de todas las Fichas que tengamos guardadas en la Base de Datos , de las practicas anteriores, lo cual nos demuestra que la prctica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Use Index Close Data Return While/EndDo File() dbGoTop() Space() Create() Eof() aadd() StrZero() dbSkip()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

66

Practica - 13
Imprimir.
En esta practica vamos a construir el Modulo , que nos permitir Imprimir todas las Fichas, tanto las que terminemos de Rellenar , como las que Corrijamos y las que tengamos, almacenadas en la Base de Datos.

Declaracin de Mtodos.
Empezaremos esta practica, configurando el Modulo, de Declaracin de Mtodos, en el que le aadiremos una nueva lnea de Codigo , tal como se muestra a continuacin: Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha Listados PrintFicha

// Nueva Lnea.

***************************************************************************

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le aadiremos unas lneas de Cdigo , en la seccin Men Para Imprimir , en donde configuraremos la llamada al Mdulo , de Imprimir Fichas , tal como se muestra a continuacin: // Men Para Imprimir. Menu :MenuItem (ns+"Imprimir","Imprimir Fichas o Listados." ) Menu :BeginMenu() Menu :MenuItem( "Imprimir Fichas","Imprimir Fichas de " +; "Pelculas." ,{|oSender|::BusBaseDatos(1,5,,2)}) Menu :EndMenu()

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

67

Buscar Fichas.
A continuacin vamos a seguir configurando, el Modulo de Buscar Fichas , en donde le aadiremos un Variable Local y varias lneas de Cdigo , tal como se muestra a continuacin: /* * Modulo Buscar Fichas. */ Method BuscaFicha( tr,me ) Class TPrincipal Local venta,edit ,n:=0, fi :=Space(34) ,mos,bf,co, on // Creamos la ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog Venta :SetBounds( 0, 0, 474, 210 ) Venta :Position := poActiveCenter if tr =1 // Hacer Fichas Nuevas. bf := "Comprobar si Esta Ficha ya Esta Archivada" Venta :Caption := Space(40)+ "Hacer Fichas Nuevas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; 'Ficha Para dar de Alta' ) elseif tr =2 // Corregir Fichas co :=clYellow bf := "Buscar Esta Ficha Para Rectificarla" Venta :Caption := Space(41)+ "Corregir Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Corregir' ) elseif tr =3 // Borrar Fichas on :=2 co :=clRed bf := "Buscar Esta Ficha Para Borrarla" Venta :Caption := Space(44)+ "Borrar Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black',25 ,,,.t.,; ' Ficha Para Borrar' ) elseif tr =4 // Consultar Fichas. tr :=3 on :=1 co :=clFuchsia bf := "Buscar Esta Ficha Para Consultar" Venta :Caption := Space(42)+ "Consultar Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; 'Ficha Para Consultar' ) elseif tr =5 // Consultar Fichas. tr :=3 on :=3
La Antorcha de los Grandes Exitos (Fraguibo)

// Nueva Variable.

// Nueva Lnea.

// Nueva Lnea. // Nueva Lnea.

// // // //
fraguibo1@hotmail.com

Nueva Nueva Nueva Nueva

Lnea. Lnea. Lnea. Lnea.


Pgina:

68

co :=clFuchsia bf := "Buscar Esta Ficha Para Imprimir" Venta :Caption := Space(43)+ "Imprimir Fichas" ::SayDatos( mos,Venta ,30,10,, 'Arial Black' ,25,,,.t.,; ' Ficha Para Imprimir' ) endif

// // // // //

Nueva Nueva Nueva Nueva Nueva

Lnea. Lnea. Lnea. Lnea. Lnea.

En el resto del Mdulo no hay que modificar nada, ya que debe de quedar tal como estaba en la Prctica Anterior. ***************************************************************************

Corregir o Hacer Fichas Nuevas.


A continuacin en el Mdulo de Corregir o Hacer Fichas Nuevas , le aadiremos un nuevo Botn de control, para llamar al Modulo de Imprimir Fichas , para as poder mandar la Ficha a la Impresora , este nuevo Botn quedara configurado, tal como se muestra a continuacin: // Boton Para Archivar. ::CrearBoton(Venta,21,430,214,23,9,arco,{|oSender|::Archivar(::oNU,; ::oTN,::oTO,::oTE,::oNA,::oCL,::oDU,::oAN,::oA1,::oA2,::oA3,::oA4,; ::oDR,::oPR,::oGI,::oFO,::oMU,::oDI,::oR1,::oR2,::oR3,::oR4,nuco,x1),; Venta:Close(),Venta:Destroy()}) // Boton Para Imprimir. // Nueva Lnea. ::CrearBoton(Venta,245,430,215,23,9,"Imprimir Esta Ficha",; // Nueva Lnea. {|oSender|::PrintFicha(x,2,::oNU,::oTN,::oTO,::oTE,::oNA,::oCL,; // Nueva Lnea. ::oDU,::oAN,::oA1,::oA2,::oA3,::oA4,::oDR,::oPR,::oGI,::oFO,::oMU,; ::oDI,::oR1,::oR2,::oR3,::oR4),Venta:Close(),Venta:Destroy()}) // Nueva Lnea. // Boton Para Cancelar. ::CrearBoton(Venta,470,430,200,23,9,carco,; {|oSender|Venta:Close(),Venta:Destroy()}) ***************************************************************************

Consultar, Borrar o Imprimir Ficha.


Seguidamente en el Mdulo Consultar, Borrar o Imprimir Ficha , en el primer If/EndIf , le aadiremos una nueva opcin, tal como se muestra a continuacin: if x1 =1 mb := "Salir de Consultar Ficha" Venta :Caption:=Space(52)+ 'Aqu Tiene la Ficha' +; ' que Usted a Solicitado' elseif x1 =2 mb := "Cancelar Borrar Ficha" Venta :Brush:Color := clRed Venta :Caption:=Space(44)+ 'Aqu Tiene la Ficha que' +; ' Usted a Solicitado Para Borrar' elseif x1 =3 x1 :=1 mb := "Cancelar Imprimir Ficha" Venta :Caption:=Space(42)+ 'Aqu Tiene la Ficha que' +; ' Usted a Solicitado Para Imprimir' endif
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// // // // //

Nueva Nueva Nueva Nueva Nueva

Lnea. Lnea. Lnea. Lnea. Lnea.

Pgina:

69

Seguidamente le aadiremos un nuevo Botn , para llamar al Mdulo de Imprimir , tal como se muestra a continuacin: if x1 =1 // Boton Para Imprimir. ::CrearBoton( Venta ,135,420,200,23,9, "Imprimir Esta Ficha" ,; {|oSender|::PrintFicha(x,2,::oNU,::oTN,::oTO,::oTE,::oNA,; ::oCL,::oDU,::oAN,::oA1,::oA2,::oA3,::oA4,::oDR,::oPR,::oGI,; ::oFO,::oMU,::oDI,::oR1,::oR2,::oR3,::oR4),Venta:Close(),; Venta :Destroy()}) elseif x1 =2 // Boton Para Borrar. ::CrearBoton( Venta ,135,420,200,23,9, "Borrar Esta Ficha" ,; {|oSender|::BorraFicha( x ), Venta :Close(), Venta :Destroy()}) endif // Boton Para Cancelar. ::CrearBoton( Venta ,370,420,200,23,9, mb ,; {|oSender| Venta :Close(), Venta :Destroy()}) ***************************************************************************

Imprimir Fichas.
A continuacin vamos a construir el Mdulo , que nos Imprimir las Fichas , con su correspondiente Marco , Igual que si fuese una Ficha Comercial . Para la construccin de este Mdulo , vamos a utilizar los siguientes comandos internos de C3, Method/return, Class, Local, If/EndIf, Use, Index, New Via Close Data y Printer , a dems de la Variables , que ya definimos en el Mdulo de Declaracin de Mtodos , las siguientes Variables Locales, n y cd , la Data Orientation , las Variables de Entorno, poPortrait, TA_LEFT y TA_RIGHT junto con las Funciones, Empty(), OrdSetFocus(), dbSeek(), Recno(), Eof() BeginDoc(), NewPage(), AllTrim(), Str(), StrZero(), EndDoc()2, Preview() Print() , junto con las tres que construiremos nosotros, despus de terminar este Mdulo PrintRecuBox(), PrintSombraBox() y PrintTexto() , a hora construiremos la Ficha tal como se muestra a continuacin: Method PrintFicha( x,in,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14 ,; x15,x16,x17,x18,x19,x20,x21,x22 ) Class TPrincipal Local n:=0 ,Cd if in =1 // Abre Base de Datos y Busca la Ficha Para Imprimir. if !Empty( x ) Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( 'TN','FiPelicu' )) dbSeek( x ) n :=Recno() // Iguala las Variables Desde la Base de Datos. ::oNU:= FiPelicu ->NU;::oTN:= FiPelicu ->TN;::oTO:= FiPelicu ->TO ::oTE:= FiPelicu ->TE;::oNA:= FiPelicu ->NA;::oCL:= FiPelicu ->CL ::oDU:= FiPelicu ->DU;::oAN:= FiPelicu ->AN;::oA1:= FiPelicu ->A1 ::oA2:= FiPelicu ->A2;::oA3:= FiPelicu ->A3;::oA4:= FiPelicu ->A4 ::oDR:= FiPelicu ->DR;::oPR:= FiPelicu ->PR;::oGI:= FiPelicu ->GI
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

70

::oFO:= FiPelicu ->FO;::oMU:= FiPelicu ->MU;::oDI:= FiPelicu ->DI ::oR1:= FiPelicu ->R1;::oR2:= FiPelicu ->R2;::oR3:= FiPelicu ->R3 ::oR4:= FiPelicu ->R4 if FiPelicu ->(!Eof()) Close Data endif endif elseif in =2 // Iguala Variables Entrada de Datos. ::oNU:= x1 ;::oTN:= x2 ;::oTO:= x3 ;::oTE:= x4 ;::oNA:= x5 ;::oCL:= x6 ::oDU:= x7 ;::oAN:= x8 ;::oA1:= x9 ;::oA2:= x10 ;::oA3:= x11 ;::oA4:= x12 ::oDR:= x13 ;::oPR:= x14 ;::oGI:= x15 ;::oFO:= x16 ;::oMU:= x17 ;::oDi:= x18 ::oR1:= x19 ;::oR2:= x20 ;::oR3:= x21 ;::oR4:= x22 endif Cd :=::oNU // Si la Encuentra Nos Monta la Ficha. Printer:Orientation := poPortrait Printer:BeginDoc() Printer:NewPage() // Recuadro Cabecera de la Ficha. PrintRecuBox({18,17,192,131}) PrintSombraBox({18,17,192,131}) // Cabecera de la Ficha. PrintTexto("Nmero de Ficha:","Arial",22,.f.,{22,20,188,34},TA_LEFT) PrintTexto(AllTrim(Str(::oNU)),"Arial",22,.f.,{22,20,188,34},TA_RIGHT) // Recuadro de la Ficha. PrintRecuBox({18,30,192,131}) // Ficha de la Pelcula. PrintTexto( "Titulo Nacional:","arial", 11,.f.,{22,34,50,50},TA_LEFT) PrintTexto(AllTrim(::oTN) ,"Arial", 14,.f.,{52,33,110,50},TA_LEFT) PrintTexto( "Codigo:","Arial", 11,.f.,{144,34,160,50},TA_LEFT) PrintTexto(StrZero( Cd, 10) ,"Arial", 14,.f.,{160,33,188,50},TA_RIGHT) PrintTexto( "Titulo Original:","Arial", 11,.f.,{22,41,50,60},TA_LEFT) PrintTexto(AllTrim(::oTO) ,"Arial", 14,.f.,{52,40,110,60},TA_LEFT) PrintTexto( "Tema:","Arial", 11,.f.,{144,41,160,60},TA_LEFT) PrintTexto(AllTrim(::oTE) ,"Arial", 14,.f.,{160,40,188,60},TA_RIGHT) PrintTexto( "Nacionalidad:","Arial", 11,.f.,{22,48,50,70},TA_LEFT) PrintTexto(AllTrim(::oNA) ,"Arial", 14,.f.,{52,47,110,70},TA_LEFT) PrintTexto( "Color:","arial", 11,.f.,{144,48,160,70},TA_LEFT) PrintTexto(AllTrim(::oCL) ,"Arial", 14,.f.,{160,47,188,70},TA_RIGHT) PrintTexto( "Duracin:","arial", 11,.f.,{22,55,50,80},TA_LEFT) PrintTexto(AllTrim(::oDU) ,"Arial", 14,.f.,{52,54,110,80},TA_LEFT) PrintTexto( "Ao:","arial", 11,.f.,{144,55,160,80},TA_LEFT) PrintTexto(AllTrim(::oAN) ,"Arial", 14,.f.,{160,54,188,80},TA_RIGHT) PrintTexto( "1 Actor:","arial", 11,.f.,{22,62,50,90},TA_LEFT) PrintTexto(AllTrim(::oA1) ,"Arial", 14,.f.,{52,61,110,90},TA_LEFT) PrintTexto( "2 Actor:","arial", 11,.f.,{114,62,140,90},TA_LEFT) PrintTexto(AllTrim(::oA2), "Arial", 14,.f.,{140,61,188,90},TA_LEFT) PrintTexto( "3 Actor:","arial", 11,.f.,{22,69,50,100},TA_LEFT) PrintTexto(AllTrim(::oA3) ,"Arial", 14,.f.,{52,68,110,100},TA_LEFT)
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

71

PrintTexto( "4 Actor:","arial", 11,.f.,{114,69,140,100},TA_LEFT) PrintTexto(AllTrim(::oA4) ,"Arial", 14,.f.,{140,68,188,100},TA_LEFT) PrintTexto( "Distribucin:","arial", 11,.f.,{22,76,50,110},TA_LEFT) PrintTexto(AllTrim(::oDR) ,"Arial", 14,.f.,{52,75,110,110},TA_LEFT) PrintTexto( "Produccin:","arial", 11,.f.,{114,76,140,110},TA_LEFT) PrintTexto(AllTrim(::oPR) ,"Arial", 14,.f.,{140,75,188,110},TA_LEFT) PrintTexto( "Guionista:","arial", 11,.f.,{22,83,50,120},TA_LEFT) PrintTexto(AllTrim(::oGI) ,"Arial", 14,.f.,{52,82,110,120},TA_LEFT) PrintTexto( "Fotografa:","arial", 11,.f.,{114,83,140,120},TA_LEFT) PrintTexto(AllTrim(::oFO) ,"Arial", 14,.f.,{140,82,188,120},TA_LEFT) PrintTexto( "Msica:","arial", 11,.f.,{22,90,50,130},TA_LEFT) PrintTexto(AllTrim(::oMU) ,"Arial", 14,.f.,{52,89,110,130},TA_LEFT) PrintTexto( "Director:","arial", 11,.f.,{114,90,140,130},TA_LEFT) PrintTexto(AllTrim(::oDI) ,"Arial", 14,.f.,{140,89,188,130},TA_LEFT) // Argumento de la Pelcula. PrintTexto( "Argumento:","arial", 11,.f.,{22,97,50,150},TA_LEFT) PrintTexto(AllTrim(::oR1) ,"Arial", 11,.f.,{24,103,188,160},TA_LEFT ) PrintTexto(AllTrim(::oR2) ,"Arial", 11,.f.,{24,109,188,170},TA_LEFT) PrintTexto(AllTrim(::oR3) ,"Arial", 11,.f.,{24,115,188,180},TA_LEFT) PrintTexto(AllTrim(::oR4) ,"Arial", 11,.f.,{24,121,188,190},TA_LEFT ) // Termina de Montar la Ficha. Printer:EndDoc() Printer:Preview() // Enviamos la Ficha a la Impresora. Printer:Print() return nil ***************************************************************************

Marco de la Ficha.
Seguidamente vamos a construir el Mdulo , para hacer un Recuadro dentro del cual se escribir la Ficha. Para la construccin de este Mdulo , vamos a utilizar los siguientes Comandos internos de C3, Static, Procedure/Return, Printer y Handle , junto con las Funciones, millimeter2Printer() y Rectangle() , tal como se muestra a continuacin:

/* * Modulo Para Generar un Recuadro. */ Static Procedure PrintRecuBox( aPoints ) aPoints :=Printer:Millimeter2Printer( aPoints ) Rectangle(Printer:Handle ,aPoints[1],aPoints[2],aPoints[3],aPoints[4] ) Return

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

72

Nota: Este Mdulo lo utilizaremos en prximas prcticas, para construir el Marco de los Listados. *********************************************************************

Sombra del Marco.


Seguidamente vamos a construir el Mdulo , que nos pondr la Sombra al rededor del Marco de la Ficha. Para la construccin de este Mdulo , vamos a utilizar los siguientes Comandos internos de C3, Static, Procedure/Return, Local, Printer y Handle , las Variables Locales, nColor y aWidths , la variable de entorno de C3, Bruhs , junto con la Data, Color , junto con las Funciones, Millimeter2Printer() y Rectangle() , tal como se muestra a continuacin: /* * Mdulo Para Generar la Sombra de un Recuadro. */ Static Procedure PrintSombraBox( aPoints ) Local nColor, aWidths nColor :=Printer:Brush:Color Printer:Brush:Color:=clBlack aPoints :=Printer:Millimeter2Printer( aPoints ) aWidths :=Printer:Millimeter2Printer({1,1}) Rectangle(Printer:Handle ,aPoints[1]+aWidths[1],aPoints[4] ,; aPoints[3]+aWidths[1],aPoints[4]+aWidths[2] ) Rectangle(Printer:Handle ,aPoints[3],aPoints[2]+aWidths[2] ,; aPoints[3]+aWidths[1],aPoints[4]+aWidths[2] ) Printer:Brush:Color:=nColor Return Nota: Este Mdulo lo utilizaremos en prximas prcticas, para construir la Sombra del Marco de los Listados. *********************************************************************

Imprimir Texto de las Fichas.


Como ultimo ejercicio de esta Prctica , vamos a construir el Mdulo , para Imprimir el Texto de las Fichas. Para la construccin de este Mdulo, vamos a utilizar los Comandos internos de C3, Static, Procedure/Return, printer, Handle y If/EndIf , las Variables de Entorno de C3, Font, TA_LEF, TA_RGHT, TA_CENTER y ETO_CLIPPED, las Datas, Name, Size y Bold , junto con las siguientes
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

73

Funciones, Len(), SetTextAling(), Millimeter2Print() y ExtTextOut() tal como se muestra a continuacin: /* * Modulo Para Imprimir el Texto. */ Static Procedure PrintTexto( cText,nole,tale,tile,aRect,nAlign ) aRect :=Printer:Millimeter2Printer( aRect ) Printer:Font:Name := nole Printer:Font:Size := tale Printer:Font:Bold := tile If nAlign ==TA_LEFT SetTextAlign(Printer:Handle,TA_LEFT) ExtTextOut(Printer:Handle ,aRect[1],aRect[2], ETO_CLIPPED,; aRect,cText, Len( cText ) , 0) ElseIf nAlign ==TA_RIGHT SetTextAlign(Printer:Handle,TA_RIGHT) ExtTextOut(Printer:Handle ,aRect[3],aRect[2], ETO_CLIPPED,; aRect,cText, Len( cText ),0) Else SetTextAlign(Printer:Handle,TA_CENTER) ExtTextOut(Printer:Handle ,aRect[1]+(aRect[3]-aRect[1] )/2,; aRect[2], ETO_CLIPPED ,aRect,cText, Len( cText ),0) EndIf Printer:Font:Bold:=.f. Return Nota: Este Mdulo lo utilizaremos en prximas Prcticas , para Imprimir los Listados. *********************************************************************
Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, lo primero que tenemos que hacer, es poner en Marcha la Impresora y a continuacin ejecutar el programa ArchiPel.exe, pulsar en las opciones Alta de Fichas , del menu principal y dar de Alta una Ficha , luego Pulsar el Boton, Imprimir Esta Ficha y nos saldr la ficha Impresa , tambin podemos realizar la misma operacin, para Imprimir Fichas que tengamos guardadas en la Base de Datos con las opciones Corregir Fichas, Consultar Fichas e Imprimir Fichas , y si todo funciona bien, nos demuestra que la prctica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

74

Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Use Index Close Data Procedure/Return Static Empty() dbSekk() Space() Create() Eof() Str() StrZero() Recno() AllTrim() Len()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

75

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

76

Practica - 14
Imprimir.
En esta practica vamos a construir el Modulo , que nos permitir Imprimir los Listados de Tres Formas Distintas , por el Nmero de Codigo , por Orden Alfabtico y por ultimo Por Temas , a un que podemos modificar la llamada al Modulo de Imprimir y podemos Imprimir el Listado , de la forma que ms nos interese.

Declaracin de Mtodos.
Empezaremos esta practica, configurando el Modulo, de Declaracin de Mtodos, en el que le aadiremos una nueva lnea de Codigo , tal como se muestra a continuacin: Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha Listados PrintFicha PrintListados

// Nueva Lnea.

***************************************************************************

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le aadiremos unas lneas de Cdigo , en la seccin Men Para Imprimir , en donde configuraremos la llamada al Mdulo , de Imprimir los Listados , tal como se muestra a continuacin: // Men Para Imprimir. Menu :MenuItem (ns+"Imprimir","Imprimir Fichas o Listados." ) Menu :BeginMenu() Menu :MenuItem( "Imprimir Fichas","Imprimir Fichas de " +; "Pelculas." ,{|oSender|::BusBaseDatos(1,5,,2)}) Menu:Separator() Menu:MenuItem( "Listado Por Codigo","Listado por Nmero" +; " de Codigo" ,{|oSender|::BusBaseDatos(3,1,,)}) Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden" +; " Alfabtico." ,{|oSender|::BusBaseDatos(3,2,,)})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.
Pgina:

77

Menu:MenuItem( "Listado Por Temas","Listados por Temas." ,; {|oSender|::BusBaseDatos(3,3,,)}) Menu :EndMenu()

// Nueva Lnea. // Nueva Lnea.

***************************************************************************

Buscar Base de Datos.


A continuacin vamos a seguir configurando, el Modulo de Buscar la Base de Datos en donde le aadiremos Tres nuevas Lneas de Cdigo , para hacer la llamada al Modulo de Imprimir los Listados , tal como se muestra a continuacin: /* * Modulo Para Buscar la Base de Datos. */ Method BusBaseDatos( x,tr,va,me ) Class TPrincipal if ! File( 'FiPelicu.dbf' ) // Si no la Encuentra nos Avisa que no Existe. ::VenMenAuto(530,212,1,1,clFuchsia) Retur Nil Else if x=1 // Hacer Ficha Nueva. ::buscaFicha( tr,me ) elseif x =2 // Consultar Listados. ::Listados( tr,va ) Elseif x =3 // Imprimir Listados. ::PrintListados( tr ) endif Endif Return Nil

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea.

***************************************************************************

Imprimir Listados.
A continuacin vamos a construir el Mdulo , que nos Confeccionara los Listados con su correspondiente Marco , Igual que si fuese un Listado Comercial . Para la construccin de este Mdulo , vamos a utilizar los siguientes comandos internos de C3, Method/return, Class, Local, If/EndIf, Use, Index, New Via Close Data, While/EndDo y Printer , la Variable Local, nLines, las variables de entorno de C3, Font, poPortrait, TA_LEFT, TA_RIGHT, TA_CENT y PageNumber , las Datas, Orientation, Name y Bold , junto con las Funciones OrdSetFocus(), Eof(), BeginDoc(), NewPage(), EndDoc(), dbGoTop() Preview(), dbSkip(), Print() , junto con las tres que construiremos nosotros, en la practica anterior, PrintRecuBox(), PrintSombraBox(), PrintTexto() y la que construiremos nosotros, cuando terminemos de construir este Modulo , para Imprimir los Listados , tal como se muestra a continuacin:
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

78

/* * Modulo Para Imprimir los Listados. */ Method PrintListados( tr,va ) Class TPrincipal Local nLines Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( va,'FiPelicu' )) Printer:Orientation := poPortrait Printer:BeginDoc() Printer:Font:Name := "Arial" nLines := 46 FiPelicu ->( DbGoTop() ) While FiPelicu ->(!Eof()) If nLines > 45 Printer:NewPage() // Recuadro Cabecera de la Ficha. PrintRecuBox({18,17,192,34}) PrintSombraBox({18,17,192,34}) if tr =1 PrintTexto(" Listado por Numero de Codigo "," Arial ",22,.f.,; {22,21,188,34},TA_LEFT) elseif tr =2 PrintTexto(" Listado por Orden Alfabtico "," Arial ",22,.f.,; {22,21,188,34},TA_LEFT) elseif tr =3 PrintTexto(" Listado por Temas "," Arial ",22,.f.,; {22,21,188,34},TA_LEFT) elseif tr =4 PrintTexto(" Listado por Directores "," Arial ",22,.f.,; {22,21,188,34},TA_LEFT) endif // Numeracin de las Paginas. PrintTexto(" Pgina: "+LTrim(Str(Printer:PageNumber)),; "Arial" ,12,.f.,{22,24,188,34},TA_RIGHT) // Recuadro del Listado. PrintRecuBox({18,38,192,278}) PrintSombraBox({18,38,192,278}) // Ttulos de las Columnas. PrintTexto(" Codigo "," Arial ",11,.f.,{20,40,42,54},TA_CENTER) PrintTexto(" Titulo "," Arial ",11,.f.,{42,40,118,54},TA_CENTER) PrintTexto(" Tema "," Arial ",11,.f.,{118,40,142,54},TA_CENTER) PrintTexto(" Director "," Arial ",11,.f.,{142,40,188,54},TA_CENTER) // Lneas Verticales de Separacin. PrintLinea({18,46,192,46}) PrintLinea({44,38,44,278}) PrintLinea({118,38,118,278})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

79

PrintLinea({142,38,142,278}) Printer:Font:Bold := .F. nLines := 1 EndIf // Imprime el Listado. PrintTexto(AllTrim(StrZero( FiPelicu ->NU,10))," Arial ",11,.f.,; {20,45+nLines * 5,42,56+nLines * 5+10},TA_RIGHT) PrintTexto( FiPelicu ->TN," Arial ",11,.f.,; {46,45+nLines * 5,118,56+nLines * 5+10},TA_LEFT) PrintTexto( FiPelicu ->TE," Arial ",11,.f.,; {120,45+nLines * 5,142,56+nLines * 5+10},TA_LEFT) PrintTexto( FiPelicu ->DI," Arial ",11,.f.,; {144,45+nLines * 5,188,56+nLines * 5+10},TA_LEFT) // Salta al Siguiente Registro. FiPelicu ->( DbSkip() ) nLines ++ EndDo Close Data // Termina de Confeccionar el Listado. Printer:EndDoc() Printer:Preview() // Manda el Listado a la Impresora. Printer:Print() Return ***************************************************************************

Lneas del Listado.


Y por ultimo vamos a construir el Mdulo , que nos imprimir las Lneas del Listado . Para la construccin de este Mdulo , vamos a utilizar los siguientes Comandos internos de C3, Procedure/Return, Printer y Handle , junto con las Funciones, millimeter2Printer(), MoveToEx() y Lineto() , tal como se muestra a continuacin: /* * Modulo Para Imprimir las Lneas del Listado. */ Static Procedure PrintLinea( aPoints ) aPoints := Printer:Millimeter2Printer( aPoints ) MoveToEx( Printer:Handle, aPoints [ 1 ], aPoints [ 2 ] ) LineTo( Printer:Handle, aPoints [ 3 ], aPoints [ 4 ] ) Return *********************************************************************
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

80

Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, lo primero que tenemos que hacer, es poner en Marcha la Impresora y a continuacin ejecutar el programa ArchiPel.exe, pulsar en la opciones Imprimir y de las diferentes opciones que hay escoger una, y si todo funciona bien, nos demuestra que la prctica ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Use Index Close Data Procedure/Return Static While/EndDo File() dbGoTop() dbSkip() Eof()

***************************************************************************

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

81

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

82

Practica - 15
Ayuda y Copryng.
En esta practica vamos a construir el Modulo , que nos presentara la Ayuda y el Copryng del Programa , a un que cada Programador puede hacerlo, como ms practico le parezca, por que si fuese un Programa , que necesitase gran cantidad de Ayuda , entonces hubisemos utilizado, un Archivo de Ayuda con extensin *. HLP.

Declaracin de Mtodos.
Empezaremos esta practica, configurando el Modulo, de Declaracin de Mtodos, en el que le aadiremos una nueva lnea de Codigo , tal como se muestra a continuacin: Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha Listados PrintFicha PrintListados AyudaCopryng

// Nueva Lnea.

***************************************************************************

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le aadiremos unas lneas de Cdigo , en la seccin Men Para la Ayuda y el Copryng , en donde configuraremos la llamada al Mdulo , de Ayuda y del Copryng , tal como se muestra a continuacin: // Men del Control de Ayuda y Copryng. Menu:MenuItem( ns+"Ayuda","Ayuda Copryng del Programa.") Menu:BeginMenu() Menu:MenuItem( "Ayuda","Ayuda del Programa." ,; {|oSender|::AyudaCopryng( 1," Ayuda" )}) Menu:MenuItem( "Copryng","Copryng del Programa." ,; {|oSender|::AyudaCopryng( 2,"Copryng" )}) Menu:EndMenu()
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea. // Nueva Lnea.
Pgina:

83

Mostrar Mensajes.
A continuacin vamos a seguir configurando, el Modulo de Mostrar Mensajes en donde le aadiremos Dos nuevos Mensajes , uno para el Copryng y otro para la Ayuda , tal como se muestra a continuacin:

Mensaje de Copryng.
elseif me =4 Men:Caption:=Chr(13)+; Space(10)+' ARCHIPEL Versin 1.0 Ao: 2004-2005 '+; Chr(13)+' (c) La Antorcha de los Grandes Exitos '+; ' (Fraguibo) '+Chr(13)+Space(17)+' Autor: Francisco '+; ' Guillamon Bou '+Chr(13)+Space(13)+' Telfono: 964033349 '+; ' y 699833680 '+Chr(13)+Space(17)+; ' e-mail: fraguibo1@hotmail.com '+Chr(13)+; ' Web: http://spaces.msn.com/members/fraguibo/ '+Chr(13) // // // // // // // // // Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Nueva Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea. Lnea.

Mensaje de Ayuda.
elseif me =9 Men:Caption:=Chr(13)+; ' Este Programa por su gran Claridad ' +Chr(13)+; ' en Todas sus Opciones de uso, no ' +Chr(13)+; ' Hace Falta Ningn Tipo de Ayuda. ' +Chr(13) // // // // // Nueva Nueva Nueva Nueva Nueva Lnea. Lnea. Lnea. Lnea. Lnea.

El resto del Modulo lo dejaremos, tal como lo tenamos configurado en las Practicas anteriores. ***************************************************************************

Ayuda y Copryng.
Por ultimo en esta prctica vamos a construir el Mdulo , que nos mostrara la Ayuda y el Copryng del Programa. Para la construccin de este Mdulo , vamos a utilizar los siguientes comandos internos de C3, Method/return, Class, Local, If/EndIf, la Variable Local, Venta, las variables de entorno de C3, bsDialog y poActiveCenter , las variables de Color clLime y clBlack , las Datas, BorderStyle, Caption y Position , junto con las Funciones, TForm(), Create(), Space(), SetBounds(), Close(), Destroy() ShowModal(), junto con las dos que construiremos nosotros, en practicas anteriores LLamaMensaje() y CrearBoton(), tal como se muestra a continuacin: /* * Ayuda y Copryng del Programa. */ Method AyudaCopryng( x,nv ) Class TPrincipal Local Venta // Creamos la ventana. Venta := TForm():Create() Venta :BorderStyle := bsDialog
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

84

Venta :Caption := Space(34)+ nv Venta :SetBounds( 0, 0, 366, 248 ) Venta :Position := poActiveCenter if x =1 // LLama a la Ayuda. ::LLamaMensage( Venta ,24,22,clLime,,14,clBlack,9) elseif x =2 // LLama al Copryng. ::LLamaMensage( Venta ,26,20,clLime,,11,clBlack,4) endif // Boton para salir. ::CrearBoton( Venta ,120,170,106,26,11," Salir ",{|oSender| Venta :Close(),; Venta :Destroy()}) Venta :ShowModal() Return Nil *************************************************************************** Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, lo primero que tenemos que hacer, es ejecutar el programa ArchiPel.exe, pulsar en la opcin Ayuda , del menu principal y pulsar primero en Ayuda y nos saldr el siguiente mensaje:

Este Programa por su gran Claridad. en Todas sus Opciones de uso, no Hace Falta Ningn Tipo de Ayuda.
Luego pulsamos en Salir y a continuacin realizamos la misma operacin, con la opcin Copryng y se nos mostrara el Copryng del Programa, y si todo funciona bien nos demuestra que la prctica, ha sido realizada correctamente. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observacin: Como abran podido comprobar, en esta practica tambin hemos utilizado, los siguientes comandos internos de Clipper , junto con las siguientes Funciones. If/EndIf Local Chr() Space()

Bueno Compaeros y Amigos , con esta Practica se podra dar por terminado, este pequeo y practico cursillo, pero realizaremos unas practicas ms, para decorar nuestro programa y asi practicaremos un poquito ms.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

85

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

86

Practica - 16
Modificar Consultar Listados.
Una vez terminado el Curso Prctico , vamos a realizar unas Prcticas ms, mejorar nuestro Programa , as que empezaremos modificando, todo el sistema de los Listados tanto la forma de Consultar los Listados , como la forma de enviar los Listados a la Impresora . En esta practica vamos a Reconstruir , todo el sistema de Consultar los Listados , as que empezaremos aadiendo, en el Modulo Declaracin de Mtodos, un nuevo Mtodo llamado Method ListaImpri.

Declaracin de Mtodos.
Empezaremos esta practica, configurando el Modulo, de Declaracin de Mtodos, en el que le aadiremos, como ya hemos dicho anteriormente, una nueva lnea de Codigo , tal como se muestra a continuacin: Public: Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method

Create Constructor MenuPrin Terminar BarraHora BaseDatos BusBaseDatos VenMenAuto LLamaMensage ContaTiempo SayDatos BuscaFicha CrearBoton FichaVacia FichaRecNue Archivar conBoImpri BorraFicha ListaImpri Listados PrintFicha PrintListados AyudaCopryng

// Nueva Lnea.

***************************************************************************

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le sustituiremos todas las lneas de Cdigo , del Men Para Mostrar Listados. por estas, dos nuevas Lneas de Codigo , tal como se muestra a continuacin: // Men Para Mostrar Listados. Menu:MenuItem( ns +" Consultar Listado "," Listados por "+; " Varios Sistemas. ",{|oSender|::BusBaseDatos(2,,,)})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Lnea Modificada.
Pgina:

87

El resto de Codigo del Men , debe de quedar todo tal como estaba, en nuestra Prctica Anterior. ***************************************************************************

Busca Base de Datos.


A continuacin vamos a Modificar , una de las opciones del Modulo Buscar la Base de Datos , tal como se muestra a continuacin: elseif x =2 ::ListaImpri(1)

// Lnea Modificada.

El resto de Codigo de este Modulo , debe de quedar todo tal como estaba, en nuestra Prctica Anterior. ***************************************************************************

Nueva Ventana Listados.


A continuacin vamos a construir la Nueva Ventana , para mostrar los Listados , as para la construccin de este nuevo Modulo , vamos a utilizar los siguientes comandos internos de C3, Method/return, Class y Local , las variables locales Venta String, Cap1, Cap2 y Cap3 , , las variables de entorno de C3, bsDialog Bruhs, Font, taRightJustify, taCenter y headerFont , las Datas Color BorderStyle, Caption, Name, Size, Header, Alignments, bold, Sizes RowSelect, ShowFooter y AutoExpand , junto con las Funciones, Tform() Create(), SetBounds(), Space(), TstringGrid(), Destroy(), SetFocus Close y la creada por nosotros en practicas anteriores CrearBoton , tal como se muestra a continuacin: /* * Modulo Para LLamar a los Listados. */ Method ListaImpri( x ) Class TPrincipal Local venta, String, Cap1, Cap2, Cap3 Cap1 :=Space(76)+ 'Listado por Nmero de Codigo' Cap2 :=Space(76)+ 'Listado por Orden Alfabtico' Cap3 :=Space(82)+ 'Listado por Temas' // Ventana Para Mostrar e Imprimir el Listado. Venta := TForm():Create() Venta :BorderStyle:=bsDialog Venta :SetBounds(0,0,799,546 ) Venta :Brush:Color:=clAqua if x =1 venta :Caption:=Space(70)+' Escoja una Opcin Para ver el Listado ' EndIf // Marco del Listado. String := TStringGrid():Create( venta ) String :SetBounds( 12, 12, 766, 450 ) String :Font:Name:= "Arial" String :Font:Size:= 9
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

// Nueva Funcin.

88

if x =1 // Consultar Listado Normal. String :Header := {" Codigo "," Titulo "," 1 Actor "," 2 Actor "," Tema ",; " Direccin "," Ao "," Distribucin "} String :Alignments:={taRightJustify,taLeftJustify,taLeftJustify,; taLeftJustify,taLeftJustify,taLeftJustify,taCenter,taLeftJustify} String :HeaderFont:Bold := .T. String :Sizes := { 82,220,150,150,84,150,48,150} EndIf String :RowSelect := .T. String :ShowFooter := .F. String :AutoExpand := .T. If x =1 // Boton Para Listar por Codigo. ::CrearBoton( venta, 36,475,157,23,9 ,"Listado por Codigo" ,; {|oSender| venta :Caption:= Cap1, ::Listados( String, 'CO')}) // Boton Para Listar Alfabticamente. ::CrearBoton( venta, 224,475,157,23,9 ,"Listado por Alfabeto" ,; {|oSender| venta :Caption:= Cap2 ,::Listados( String, 'TN')}) // Boton Para Listar por Temas. :: CrearBoton( venta, 412,475,157,23,9 ,"Listado por Temas" ,; . {|oSender| venta :Caption:= Cap3, ::Listados( String, 'TE')}) // Boton Para Salir del Listado. ::CrearBoton( venta, 600,475,157,23,9 ,"Salir del Listado" ,; {|oSender| Venta :Close() ,Venta :Destroy()}) EndIf String :SetFocus() venta :showModal() Retur nil ***************************************************************************

Modificar Listado.
Por ultimo en esta practica vamos a Modificar , el Mdulo Para Mostrar Listados , el cual deber de quedar tal como se muestra a continuacin: /* * Modulo Para Mostrar Listados. */ Method Listados( tr,va ) Class TPrincipal Local aArray // Extrae los Datos Para los Listados. Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( va,'FiPelicu' )) FiPelicu ->(DbGoTop()) aArray := {} While FiPelicu ->(!Eof()) If vl =1 aadd( aArray ,{StrZero( FiPelicu ->NU,10), FiPelicu ->TN, FiPelicu ->A1,; FiPelicu ->A2, FiPelicu ->TE, FiPelicu ->DI, FiPelicu ->AN, FiPelicu ->DR})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

// Funcin Modificada.

89

EndIf FiPelicu ->(DbSkip()) EndDo Close Data tr :Items := aArray return nil *************************************************************************** Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las practicas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, lo primero que tenemos que hacer, es ejecutar el programa ArchiPel.exe, pulsar en la opcin Listados , del menu principal y se nos presentara la Ventana de los Listados , con cuatro Botones para poder consultar los Listados , automticamente de tres formas distintas, sin tener que Salir al Men Principal. Como abran podido comprobar, en esta Prctica hemos mejorado, mucho la forma de presentar el Listado y tambin la forma de escoger las opciones , para consultar el Listado ya que ahora ya no tenemos que Salir , al Men Principal para cambiar la forma de presentar el Listado. Como en todas las practicas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

90

Practica - 17
Modificar Imprimir Listados.
En esta prctica vamos a Reconstruir , todo el sistema de Imprimir los Listados , as que empezaremos por Reconstruir el Men Principal.

Men Principal.
A continuacin seguiremos configurando el Men Principal , en donde le sustituiremos todas las lneas de Cdigo , del Men Para Imprimir. que configuran, la Impresin de los Listados , por estas dos nuevas Lneas de Codigo , tal como se muestra a continuacin: // Men Para Imprimir. Menu :MenuItem( ns +" Imprimir "," Imprimir Fichas o Listados. ") Menu :BeginMenu() Menu :MenuItem(" Imprimir Fichas "," Imprimir Fichas de "+; " Pelculas. ",{|oSender|::BusBaseDatos(1,5,,2)}) Menu:Separator() Menu :MenuItem(" Imprimir Listados "," Imprimir los Listados ",; {|oSender|::BusBaseDatos(3,,,)}) Menu :EndMenu()

// Nueva Lnea. // Nueva Lnea.

El resto de Codigo del Men , debe de quedar todo tal como estaba, en nuestra Prctica Anterior. ***************************************************************************

Busca Base de Datos.


A continuacin vamos a Modificar , una de las opciones del Modulo Buscar la Base de Datos , tal como se muestra a continuacin: elseif x =3 ::ListaImpri(2)

// Lnea Modificada.

El resto de Codigo de este Modulo , debe de quedar todo tal como estaba, en nuestra Prctica Anterior. ***************************************************************************

Nueva Ventana Listados.


A continuacin vamos a seguir Configurando , el Modulo que llama a los Listados para que nos muestre los Listados y a dems, que nos los mande a la Impresora, as que lo primero que vamos hacer, ser aadirle dos nuevas variables Locales , tal como se muestra a continuacin: /* * Modulo Para LLamar a los Listados. */ Method ListaImpri(x) Class TPrincipal Local venta, String, Cap1, Cap2, Cap3, va, tr:=0
La Antorcha de los Grandes Exitos (Fraguibo)

// Lnea Modificada.
fraguibo1@hotmail.com Pgina:

91

Seguidamente le aadiremos una nueva Opcin , en el IF/EndIF del Camption de la Ventana , tal como se muestra a continuacin: // Ventana Para Mostrar e Imprimir el Listado. Venta := TForm():Create() Venta :BorderStyle:=bsDialog Venta :SetBounds(0,0,799,546 ) Venta :Brush:Color:=clAqua if x =1 venta :Caption:=Space(70)+' Escoja una Opcin Para ver el Listado ' elseif x =2 // Nueva Opcin. venta :Caption:=Space(68)+' Escoja una Opcin Para Imprimir el Listado endif A continuacin tambin, le vamos ha aadir una nueva Opcin, en IF/EndIF de la Configuracin de la Ventana , tal como se muestra a continuacin: // Marco del Listado. String := TStringGrid():Create( venta ) String :SetBounds( 12, 12, 766, 450 ) String :Font:Name:= "Arial" String :Font:Size:= 9 if x =1 // Consultar Listado Normal. String :Header := {" Codigo "," Titulo "," 1 Actor "," 2 Actor "," Tema ",; " Direccin "," Ao "," Distribucin "} String :Alignments:={taRightJustify,taLeftJustify,taLeftJustify,; taLeftJustify,taLeftJustify,taLeftJustify,taCenter,taLeftJustify} String :HeaderFont:Bold := .T. String :Sizes := { 82,220,150,150,84,150,48,150} elseif x =2 // Nueva Opcin. // Consultar Listado Para Imprimir. String :Header := {" Codigo "," Titulo "," Tema "," Direccin "} String :Alignments:={taCenter,taLeftJustify,taLeftJustify,taLeftJustify} String :HeaderFont:Bold := .T. String :Sizes := {120,350,104,150} endif String :RowSelect := .T. String :ShowFooter := .F. String :AutoExpand := .T. Por ultimo tambin le a aadiremos, Cinco Nuevos Botones al IF/EndIF , que nos muestra los Botones , que se tienen que utilizar, en cada una de las dos Opciones del Modulo , tal como se muestra a continuacin: elseif x =2 ::CrearBoton( venta ,36,475,120,23,9," Listado por Codigo ",; {|oSender| venta :Caption:= Cap1,tr :=1 ,va :='CO',; ::Listados( String ,'CO',2)}) ::CrearBoton( venta, 184,475,120,23,9," Listado por Alfabeto ",; {|oSender| venta :Caption:= Cap2,tr :=2, va :='TN',; ::Listados( String ,'TN',2)}) ::CrearBoton( venta ,334,475,120,23,9," Listado por Temas ",; {|oSender| venta :Caption:= Cap3,tr :=3, va :='TE',; ::Listados( String ,'TE',2)})
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com

// Nuevo Boton.

// Nuevo Boton.

// Nuevo Boton.

Pgina:

92

::CrearBoton( venta ,484,475,120,23,9," Imprimir Listado ",; {|oSender|::PrintListados( tr,va )}) ::CrearBoton( venta ,632,475,120,23,9," Salir de Imprimir ",; {|oSender| Venta :Close(), Venta :Destroy()}) endif

// Nuevo Boton.

// Nuevo Boton.

El resto de Codigo de este Modulo , debe de quedar todo tal como estaba, en nuestra Prctica Anterior. ***************************************************************************

Modificar Listado.
Por ultimo en esta prctica, vamos a seguir configurando este Modulo , aadirle una nueva Opcin , para que nos muestre el Listado , antes de mandarlo a la Impresora , el cual deber de quedar tal como se muestra a continuacin: /* * Modulo Para Mostrar Listados. */ Method Listados( tr,va ) Class TPrincipal Local aArray // Extrae los Datos Para los Listados. Use FiPelicu Index FiPelicu New Via 'DbfCdx' FiPelicu ->(OrdSetFocus( va,'FiPelicu' )) FiPelicu ->(DbGoTop()) aArray := {} if vl =1 aadd( aArray ,{StrZero( FiPelicu ->NU,10), FiPelicu ->TN, FiPelicu ->A1,; FiPelicu ->A2, FiPelicu ->TE, FiPelicu ->DI, FiPelicu ->AN, FiPelicu ->DR}) elseif vl =2 // Nueva Opcin. aadd( aArray ,{StrZero( FiPelicu ->NU,10),Space(6)+ FiPelicu ->TN Space(6)+ FiPelicu ->TE,Space(6)+ FiPelicu ->DI}) endif FiPelicu ->(DbSkip()) EndDo Close Data tr :Items := aArray return nil *************************************************************************** Una vez terminada esta Practica , solo nos queda colocar los nuevos mdulos y las modificaciones hechas en los mdulos, que ya tenamos creados en las prcticas anteriores en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, lo primero que tenemos que hacer, es ejecutar el programa ArchiPel.exe, pulsar en la opcin Imprimir , del menu principal y pulsar, en la opcin Imprimir Listados y se nos presentara, la Ventana de Imprimir los Listados , con Cinco Botones , tres de ellos son para poder consultar los Listados , antes de mandarlos a la Impresora

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

93

Al pulsar el Boton Imprimir Listado , nos manda a la Impresora el Listado , que estamos viendo en la Pantalla , bien sea por Codigo, por Orden Alfabtico o por Tema y si queremos Cambiar el Listado de una forma a otra, solo tenemos que pulsar el Boton correspondiente, para que pase de una forma a otra. Como abran podido comprobar, en esta Prctica tambin hemos mejorado, mucho la forma de Imprimir el Listado y tambin la forma de escoger las opciones , ya que ahora podemos ver lo que vamos a Imprimir , antes de mandarlo a la Impresora , mientras que en nuestro Programa del Curso , hasta que no tenamos el Listado Impreso , no sabamos exactamente lo que habamos Imprimido. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

94

Practica - 18
Men Principal.
En esta Prctica seguiremos configurando el Men Principal , en donde le vamos Colocar , una Barra de Iconos, para hacer ms atractiva su presentacin y as tambin parecer, mucho ms Profesional.

Declaracin de Mtodos.
Empezaremos esta Prctica, terminando de configurar, la declaracin de Clases, en donde le aadiremos una nueva Lnea , para declarar un nuevo Mtodo . tal como se muestra a continuacin: Method BotonBarra // Nueva Lnea.

El resto de la Declaracin de Mtodos , debe de que tal como la tenamos configurada en la Prctica anterior. ***************************************************************************

Mtodo Boton Barra.


Seguidamente vamos a construir un nuevo Mtodo , el cual nos servir para terminar de configurar el Men Principal. Para la construccin de este Mtodo , vamos a utilizar los comandos internos de C3 method/Return, Class y Local , las variables de entorno internas de C3, Image y Cursor , las Datas Name, MaskColor y Hint , junto con las Funciones TtoolButton(), Create() y el Evento OnClick , tal como se muestra a continuacin: /* * Mtodo Para Configurar los Botones del Men. */ Method BotonBarra( ve,nb,cm,ac ) Class TPrincipal Local Boton Boton :=TToolButton():Create( ve ) Boton :Cursor:Name:=crHandPoint Boton :Image:MaskColor:=clOlive Boton :Image:Name:= nb Boton :Hint:= cm Boton :OnClick:= ac Return ve crHandPoint clOlive nb cm ac => Ventana o Modulo donde debe de trabajar este mtodo. => Nombre del Cursor en forma de mano. => Variable de Color. => Nombre del Bitmap a mostrar. => Comentario que se mostrara al colocar el cursor sobre el Bitmap. => Accin a realizar al pisar el Bitmap.

***************************************************************************
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

95

Men Principal.
Seguidamente vamos a terminar de configurara el Men Principal , as que con la Funcin que hemos creado anteriormente, vamos a colocar los diferentes Bitmaps , en la Barra de Opciones del Men Principal , tal como se muestra a continuacin: // Declaracin de los Botones. ::BarraBotones:=TToolBar():Create(Self) ::BarraBotones:EdgeBorders:Bottom:=.T. TToolButton():Create(::BarraBotones):Style:=tbsSeparator // Alta de Fichas Nuevas. ::BotonBarra(::BarraBotones," Nueva "," Nueva Ficha|Dar de Alta a "+; " Nuevas Fichas .",{|oSender|::BusBaseDatos(1,1,,1)}) // Corregir o Modificar Fichas. ::BotonBarra(::BarraBotones," Corregir "," Corregir Fichas|Corregir "+; " las Fichas .",{|oSender|::BusBaseDatos(1,2,,2)}) // Dar de Baja o Borrar Fichas. ::BotonBarra(::BarraBotones," Eliminar "," Baja de Fichas|Dar de Baja "+; " las Fichas .",{|oSender|::BusBaseDatos(1,3,,2)}) // Consultar Fichas. ::BotonBarra(::BarraBotones," Consultar "," Consultar Fichas|Consultar "+; " las Fichas .",{|oSender|::BusBaseDatos(1,4,,2)}) // Imprimir Fichas. ::BotonBarra(::BarraBotones," Impresora "," Imprimir Fichas|Imprimir "+; " las Fichas .",{|oSender|::BusBaseDatos(1,5,,2)}) // Consultar Listados. ::BotonBarra(::BarraBotones," Consultar "," Consultar Listados|Consultar "+; " los Listados .",{|oSender|::BusBaseDatos(2 ,,,)}) // Imprimir Listados. ::BotonBarra(::BarraBotones," Impresora "," Imprimir Listados|Imprimir "+; " los Listados .",{|oSender|::BusBaseDatos(3,,,)}) // Terminar y Salir del Programa. ::BotonBarra(::BarraBotones," Salir "," Cerrar y Salir|Cerrar y Salir "+; " del Programa .",{|oSender|::Close}) // Boton de Ayuda y Copryng. ::BotonBarra(::BarraBotones," Ayuda "," Copryng|Copryng del "+; " Programa .",{|oSender|::AyudaCopryng(2,"Copryng")}) El resto del Men Principal debe de quedar, tal como lo tenamos configurado en la Prctica anterior. ***************************************************************************

Copiar Bitmaps a la Carpeta Res


A continuacin copiaremos los Bitmaps, que acompaan a esta Prctica en la Carpeta Res, al directorio C:/C3/Bin/Res de nuestro Ordenador. ***************************************************************************

Configurar Fichero Samples.rc


Como ultimo ejercicio de esta Prctica , vamos a configurar el fichero Samples.rc
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

96

as para configurar este fichero, lo podemos abrir con nuestro Editor de Texto ascil, o con el Bloc de Notas de Windows y le aadiremos las siguientes lneas, tal como se muestra a continuacin: Nueva Corregir Eliminar Consultar Impresora Salir Ayuda Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap "Res\Nueva.bmp" "Res\Corregir.bmp" "Res\Eliminar.bmp" "Res\Consultar.bmp" "Res\Impresora.bmp" "Res\Salir.bmp" "Res\Ayuda.bmp"

El resto del fichero debe de quedar tal como estaba, antes de aadirle estas lneas de Cdigo. Cuando hayamos terminado de configurar estas lneas, pulsamos en Guardar y luego en Salir , con lo que ya tenemos el Fichero Configurado. *************************************************************************** Una vez terminada esta Practica , solo nos queda colocar las modificaciones hechas en su lugar correspondiente, de nuestro programa principal ArchiPel.prg y compilarlo. Luego para poder ver el resultado, solo que tenemos que ejecutar el programa ArchiPel.exe y nos aparecer el Men Principal , con una Barra de Iconos debajo de la Barra de Opciones , con los que con solo pulsar sobre ellos, podemos acceder a cualquier Opcin del Programa. Como abran podido comprobar, en esta Prctica tambin hemos mejorado, mucho la presentacin de nuestro Men Principal , as como la forma de acceder, a cualquier Opcin del Programa. Como en todas las prcticas, aqu tambin se incluyen los ficheros Do.bat ArchiPel.mak , Samples.rc y el archivo ArchiPel.exe , para que puedan comprobar el resultado de esta practica. Tambin se incluye el archivo ArchiPel.prg , para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. NOTA: Con esta ltima Prctica doy por terminado, este pequeo Cursillo el cual espero, que haya sido de utilidad, para todos aquellos que quieren o estn empezando, a utilizar el nuevo Compilador C3 de 32 bits . Desde aqu, les doy mi agradecimiento, a los compaeros: Manuel, Xevi, Truesoft y especialmente a Bruno Cantero , por haberme ayudado a corregir, algunos errores y al mismo tiempo animado, a escribir este pequeo cursillo, a todos ellos un cordial saludo. El autor: Francisco Guillamon Bou

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

97

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

98

ndice de contenidos
Nota del Autor ..................................................................................................... 3 Practica 1 ............................................................................................................... 4 Configuracin del entorno de trabajo .................................................................... 4

Practica 2 ....................................................................................................... 7
La Ventana Principal ............................................................................................. 7 Modulo de Cabecera ...............................................................................................7 Inicio del Programa ................................................................................................7 Declaracin de Mtodos ..........................................................................................7 Modulo Principal ....................................................................................................8

Practica 3 ......................................................................................................... 9
El Men Principal .................................................................................................. 9 Declaracin de Mtodos ..........................................................................................9 Modulo Principal ....................................................................................................9 Cerrar y salir del programa .................................................................................. 10 Practica 4 ............................................................................................................... 13 Terminar el Men Principal ..................................................................................13 Colocar un Icono y un Anagrama ..........................................................................13 Declaracin de Mtodos ........................................................................................13 Modulo Principal ..................................................................................................14 Barra de Estado del Men .....................................................................................14 Practica 5 ................................................................................................................ 17 Inicio del Programa ..............................................................................................17 Declaracin de Mtodos ........................................................................................17 Modulo Principal ..................................................................................................18 La Base de Datos (*.DBF) ....................................................................................18 El ndice (*.CDX) ................................................................................................19 Practica 6 ................................................................................................................ 21 Declaracin de Mtodos ........................................................................................21 Men Principal (Altas) .........................................................................................21 Buscador Base de Datos ........................................................................................ 21 Ventana Para Mensajes ......................................................................................... 22 Configurar Mensajes .............................................................................................23 Contador de Tiempo .............................................................................................24 Practica 7 ................................................................................................................ 27 Declaracin de Mtodos ........................................................................................27 Buscar Base de Datos ...........................................................................................27 Buscar Fichas ....................................................................................................... 28 Crear Botones .......................................................................................................29 Ventana Para Mensajes ......................................................................................... 30 Configurar Mensajes .............................................................................................31 Mostrar Datos .......................................................................................................32 Practica 8 ................................................................................................................ 35 Declaracin de Mtodos ........................................................................................35 Buscar Fichas ....................................................................................................... 35 Construir Ficha Vaca ...........................................................................................37 Configurar Mensajes .............................................................................................38 Ficha Para Entrada de Datos .................................................................................38 Archivar Fichas .................................................................................................... 39 Practica 9 ................................................................................................................ 43 Configurar Men Principal ....................................................................................45 Reconstruir Buscar Base de Datos .........................................................................45
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

99

Configurar Buscar Fichas ...................................................................................... 46 Mostrar Mensajes .................................................................................................47 Corregir Ficha o Entrada de Datos ........................................................................ 48 Archivar Fichas .................................................................................................... 49 Practica 10 ................................................................................................................ 52 Dar de Baja o Borrar Fichas ..................................................................................52 Declaracin de Mtodos ........................................................................................52 Configurar Men Principal ....................................................................................52 Buscar Ficha .........................................................................................................53 Configurar Mensajes .............................................................................................54 Borrar, Consultar o Imprimir Fichas ......................................................................54 Borrar Ficha ......................................................................................................... 56 Practica 11 .............................................................................................................. 59 Consultar Fichas ................................................................................................... 59 Buscar Ficha ......................................................................................................... 59 Borrar, Consultar o Imprimir Fichas ......................................................................60 Practica 12 .............................................................................................................. 63 Listados ............................................................................................................... 63 Declaracin de Mtodos ........................................................................................63 Men Principal ..................................................................................................... 64 Mostrar Listados ...................................................................................................64 Practica 13 .............................................................................................................. 67 Imprimir ...............................................................................................................67 Declaracin de Mtodos ........................................................................................67 Men Principal ..................................................................................................... 67 Buscar Ficha ......................................................................................................... 68 Corregir Ficha o Entrada de Datos ........................................................................ 69 Borrar, Consultar o Imprimir Fichas ......................................................................69 Imprimir Fichas ....................................................................................................70 Marco de la Ficha ................................................................................................. 72 Sombra del Marco ................................................................................................73 Imprimir Texto de la Ficha ...................................................................................73 Practica 14 .............................................................................................................. 77 Imprimir ...............................................................................................................77 Declaracin de Mtodos ........................................................................................77 Men Principal ..................................................................................................... 77 Busca Base de Datos .............................................................................................78 Imprimir Listado ..................................................................................................78 Lneas del Listado ................................................................................................80 Practica 15 .............................................................................................................. 83 Modificar Imprimir o Consultar Listados ...............................................................83 Men Principal ..................................................................................................... 83 Busca Base de Datos .............................................................................................84 Nueva Ventana Imprimir/Listado ..........................................................................84 Modificar Listado .................................................................................................85 Practica 16 .............................................................................................................. 87 Modificar Imprimir o Consultar Listados ...............................................................87 Men Principal ..................................................................................................... 87 Busca Base de Datos .............................................................................................87 Nueva Ventana Imprimir/Listado ..........................................................................87 Modificar Listados ...............................................................................................89 Practica 17 .............................................................................................................. 91 Modificar Imprimir Listados .................................................................................91 Men Principal ..................................................................................................... 91 Busca Base de Datos .............................................................................................91
La Antorcha de los Grandes Exitos (Fraguibo) fraguibo1@hotmail.com Pgina:

100

Nueva Ventana Listados .......................................................................................91 Modificar Listados ...............................................................................................93 Practica 18 .............................................................................................................. 95 Men Principal ..................................................................................................... 95 Declaracin de Mtodos ........................................................................................95 Mtodo Boton Barra .............................................................................................95 Configurar Men Principal ....................................................................................96 Carpeta Res ..........................................................................................................96 Configurar Fichero Samples.rc ..............................................................................96

La Antorcha de los Grandes Exitos (Fraguibo)

fraguibo1@hotmail.com

Pgina:

101

You might also like