Curso de C3.pdf

101
© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 1

Transcript of Curso de C3.pdf

Page 1: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected]

Página: 1

Page 2: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 2

Todas las prácticas han sido, diseñadas, montadas y comprobado, su correcto funcionamiento por el Autor: Francisco Guillamon (Fraguibo) Todos los derechos están reservados por el autor. Año de realización: 2004 – 2005

Page 3: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 3

MUY IMPORTANTE: Este es un pequeño Cursillo, esta dirigido para todos aquellos, que empiezan en la programación, pero que tengan algunas nociones, a un que sean pequeñas de la programación en Clipper. Durante las prácticas iremos montando y ensamblando, poco a poco un programa completo, para el control de un Archivo de Películas, empezando desde la primera línea de Código hasta el archivo final ArchiPel.exe. Todas las practicas han sido escritas, realizadas y comprobadas, por el Autor, en un PC Pentium-4 de 3’0 GH, con 500 Mg de memoria Ram, Disco duro de 80 Gigas y Sistema Operativo Windows XP Profesional. Han colaborado en la corrección de errores, los siguientes compañeros del Foro de C3Compilador: [email protected], [email protected], [email protected] Bruno Cantero www.c3compiler.com El Autor; Francisco Guillamon.

Page 4: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 4

Page 5: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 5

Practica 1ª Configuración 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 continuación: C:/ C3 => Directorio de C3 Bin => Carpeta del compilador C3 y el Enlazador Res => Carpeta Para Guardar Iconos, Anagramas y Bitmaps. Help => Carpeta de las Ayudas C3 => Carpeta de Ayuda del C3 Html => Carpeta donde se encuentran las funciones de C3 Gui => Carpeta de Ayuda de la GUI Html => Carpeta donde se encuentran las aplicaciones GUI Tools32 => Carpeta de Ayuda de Tools32 Html => Carpeta donde se encuentra las aplicaciones Tools32 Include => Carpeta donde se encuentran los archivos ( *.ch ) Res => Carpeta Con tres archivos varios. Lib32 => Carpeta donde se encuentran los archivos ( *.Lib) Samples => Carpeta donde se encuentran los ejemplos Res => Carpeta donde se encuentran los iconos Source => Capeta Sys => Carpeta donde se encuentra los ( *.prg ) de errores A continuación 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 Librerías ( *.dll ), un constructor de Librerías ( *lib ) y un constructor de ficheros de Ayuda ( *.hlp ) Para uno de los constructores de Recursos y Librerías ( *.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 automáticamente dos carpetas más, que es en donde se instalara todo el sistema del Resource WorkShop, tal como se muestra a continuación: C:\ C3 Herramientas WorkShop => Carpeta con algunos ficheros del WorkShop Bin => Carpeta con el Resource WorkSohp y sus utilidades RCExpert => Carpeta con algunos ficheros del WorkShop Para otro de los constructores de Recursos ( *.rc ), crearemos también 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 continuación:

Page 6: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 6

C:\ C3 Herramientas ResourceBord => Carpeta con los ficheros de Bordland. Para el creador de Librerías ( *.lib ), crearemos también dentro de la carpeta de Herramientas, una carpeta llamada Construir Lib, en la cual instalaremos, el creador de Librerías ( *lib ), tal como se muestra a continuación: C:\ C3 Herramientas Construir Lib => Carpeta con los ficheros de Bordland. Para el creador de ficheros de Ayuda ( *hlp ), crearemos también dentro de la carpeta de Herramientas, una carpeta llamada Crear Ayudas, en la cual instalaremos los ficheros para la creación de Ayudas ( *hlp ), tal como se muestra a continuación: C:\ C3 Herramientas Crear Ayudas => Carpeta con los ficheros de Creación. A continuación crearemos también, en el directorio Principal de C3, otra nueva Carpeta con el nombre de Prácticas, que será en donde iremos colocando, todos los trabajos que vayamos realizando, una vez que ya estén terminados. Cuando hayamos terminado de instalar, todo el directorio de Trabajo del C3, este deberá de haber quedado más o menos así: C:/ C3 => Directorio de C3 Bin => Carpeta del compilador C3 y el Enlazador Res => Carpeta con los Iconos, los Anagramas y Bitmaps. Help => Carpeta de las Ayudas C3 => Carpeta de Ayuda del C3 Html => Carpeta donde se encuentran las funciones de C3 Gui => Carpeta de Ayuda de la GUI Html => Carpeta donde se encuentran las aplicaciones GUI Tools32 => Carpeta de Ayuda de Tools32 Html => Carpeta donde se encuentra las aplicaciones Tools32 Include => Carpeta donde se encuentran los archivos ( *.ch ) Res => Carpeta Con tres archivos varios. Lib => Carpeta donde se encuentran los archivos ( *.lib) Samples => Carpeta donde se encuentran los ejemplos Res => Carpeta donde se encuentran los iconos Source => Capeta Sys => Carpeta donde se encuentra los ( *.prg ) de errores Gui => Carpeta donde Instalaremos el IDE OldGui => Carpeta con varios ejemplos en *.prg para el IDE Projects => Carpeta con unos archivos de configuración Herramientas => Carpeta de las Herramientas. Crear Ayudas => Carpeta con el sistema para crear ficheros *.hlp Construir Lib => Carpeta con los ficheros para crear Librerías *.lib ResourceBord => Carpeta con los ficheros del Resource de Bordland. WorkShop => Carpeta con algunos ficheros del WorkShop Bin => Carpeta con el Resource WorkSohp y sus utilidades RCExpert => Carpeta con algunos ficheros del WorkShop Practicas => Carpeta para colocar las prácticas realizadas Cuando todo esto este terminado, ya tendremos todo el sistema instalado y a punto para empezar a programar.

Page 7: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 7

Práctica - 2ª La Ventana Principal. Este programa ha sido diseñado, para trabajar con una resolución, de pantalla de 800x600 líneas, si ustedes tienen otra configuración, traten de adaptarla a esta resolución para que la ventana del programa, no se les salga del la pantalla. Una vez hecha esta pequeña aclaración, 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 módulos de que consta el programa, hasta que lo tengamos todo montado y funcionando. En la primera línea de nuestro programa, colocaremos un pequeño comentario del primer modulo del programa, lo cual deberemos de hacer, con todos los módulos de que conste nuestro programa, para así poder localizar más rápidamente, 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 continuación: // Ficheros de cabecera. #include "Gui.ch" *************************************************************************** Inicio del Programa. A continuación 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 continuación: // 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 *************************************************************************** Declaración de Métodos.

Page 8: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 8

Seguidamente construiremos, la Declaración de Métodos, la cual constara de los siguientes Comandos internos de C3, “Class”, “From”, “TForm”, “Public” “EndClass” y “Método Create Constructor”, tal como se muestra a continuación: // Modulo de la Declaración de Métodos. 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 Líneas, 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 continuación: // Declaración del Modulo Principal. Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Caption:=Space(76)+"Archivo de Películas" Return Cuando hayamos terminado de construir, nuestros cuatro primeros Módulos, ya tendremos nuestro primer, Fichero (*.prg) listo para Compilarlo y ver el resultado el cual nos mostrara una Ventana, vacía de Windows con el titulo "Archivo de Películas" 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 compilación y el enlazado, “Do.bat”, “ArchiPel.mak” y el ejecutable ArchiPel.exe, para que puedan ver el resultado de esta Practica. ***************************************************************************

Page 9: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 9

Práctica - 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. Declaración de Métodos. Así que lo primero que aremos, como ya dijimos en la Práctica anterior, que iríamos ampliando este Módulo, con forme fuésemos avanzando en nuestro programa, así que ahora añadiremos al modulo, Declaración de Métodos las siguientes líneas, “Method MenuPrin” y “Method Terminar”, que serán los Métodos para crear el Menú Principal y Salir del Programa, tal como se indica a continuación: // Modulo de la Declaración de Métodos. Class TPrincipal From TForm Public: Method Create Constructor Method MenuPrin // Nueva Línea Method Terminar // Nueva Línea EndClass ***************************************************************************

Modulo Principal. A continuación también ampliaremos el Modulo Principal, para lo cual le añadiremos el Evento “::OnCloseQuery”, con los comandos internos de C3 “oSender”, “::Brush” y las variables ”Salir”, “Color” y la función que vamos a crear “::MenuPrin()” tal como se muestra a continuación: // Modulo de la Declaración de Métodos. Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Caption:=Space(76)+"Archivo de Películas" ::Brush:Color := 15400959 // Nueva Línea ::MenuPrin() // Nueva Línea ::OnCloseQuery := { | oSender,Salir | ::Terminar( @Salir ) } // Nueva Línea Return *************************************************************************** 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 continuación:

Page 10: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 10

// Modulo del Menú Principal. Method MenuPrin() Class TPrincipal Local Menu, ns ns:=Space(7) // Declaración 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 Número de Codigo",, .T. ) Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden Alfabético.",, .T. ) Menu:MenuItem( "Listado Por Temas","Listado por Temas.",, .T. ) Menu:MenuItem( "Listado Por Años","Listado por Año de Producción.",, .T. ) Menu:MenuItem( "Listado por Dirección","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 Películas.",, .T. ) Menu:Separator() Menu:MenuItem( "Listado Por Codigo","Listado por Número de Codigo",, .T. ) Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden Alfabético.",, .T. ) Menu:MenuItem( "Listado Por Temas","Listados por Temas.",, .T. ) Menu:MenuItem( "Listado por Dirección","Listado por la Dirección.",, .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 Utilización del Programa." ) // Fin del Menú. Menu:EndMenu() ::Menu := Menu Return ********************************************************************************** Cerrar y Salir del Programa.

Page 11: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 11

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 función “MessageDlg()” y las constantes “mbOkCancel” y “poActiveCenter”, tal como se indica a continuación: // Modulo Para Cerrar y Salir del Programa. Method Terminar(Salir) Class TPrincipal If MessageDlg( "Esto finaliza la ejecución 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 añadir, las nuevas líneas de código, expuestas en esta practica, en sus correspondiente módulos, 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 compilación 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 lección hemos utilizado, los siguientes Comandos internos de Clipper y la función también de Clipper. Local Space() Public If Else EndIf Return ***************************************************************************

Page 12: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 12

Page 13: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 13

Practica - 4ª

Terminar el Menú Principal. En esta cuarta lección, vamos a completar y terminar el Menú Principal, así que empezaremos, colocando un Icono en la aplicación y un Anagrama o una Foto en el Menú. También 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 añadiremos las siguientes líneas y para ello vamos a utilizar, primero la nueva función 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 continuación: /* * Modulo de Inicio del programa. */ Procedure Main() Local Principal set(_SET_DATEFORMAT,"dd/mm/yyyy") // Nueva Línea. Application:Title := "ArchiPel" Application:Icon:Name := "Test" // Nueva línea. Application:Initialize() Application:CreateForm( TPrincipal(), @Principal ) Application:Run() Return *************************************************************************** Declaración de Métodos. Seguidamente en modulo Declaración de Métodos, añadiremos las siguientes líneas 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 continuación: /* * Modulo de la Declaración de Métodos. */ Class TPrincipal From TForm Private: Data Image // Nueva Línea. Public: Method Create Constructor Method MenuPrin

Page 14: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 14

Method Termina Method BarraHora // Nueva Línea. EndClass *************************************************************************** Modulo Principal. A continuación en el Modulo Principal, también añadiremos las siguientes líneas “::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 función, que vamos a crear seguidamente “BarraHora()”, tal como se muestra a continuación: /* * Modulo Principal. */ Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Icon:Name := "Test" // Nueva Línea. ::Caption:=Space(76)+"Archivo de Películas" ::Brush:Color := clAqua ::Image := TImage():Create( Self ) // Nueva Línea. ::Image:SetPos( 166, 40 ) // Nueva Línea. ::Image:Picture:Bitmap:Name := "Copryn" // Nueva Línea. ::MenuPrin() ::BarraHora() // Nueva Línea. ::OnCloseQuery := { | oSender,Salir | ::Terminar( @Salir ) } Return *************************************************************************** Barra de Estado del Menú. Seguidamente construiremos, el modulo de la Barra de Estado, donde aparecerán los mensajes de las opciones del Menú, junto con la Fecha y Hora actual. Para la construcción 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 continuación: /* * Modulo de la Barra de Estado del Menú Principal. */ Method BarraHora() Class TPrincipal Local BarraStado, PanelMensa, Reloj, oTimer, ns

Page 15: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 15

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 opción.", 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 Año " + Right(Dtoc(Date()),4) } Return *************************************************************************** Con esto tenemos todo el Menú Principal, totalmente terminado, ahora ya solo nos queda montar esta ultima Práctica, el su lugar correspondiente, de nuestro programa “ArchiPel.prg” y compilarlo. Con esta lección se adjunta, la carpeta “Res” que contiene, el Icono de la aplicación junto con el Anagrama del Programa y el Icono de una Mano, que utilizaremos más 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 práctica y el archivo final “ArchiPel.exe”, para que puedan comprobar el resultado final. Nota: Para construir el Icono de la aplicación y el archivo “Samples.rc”, se ha utilizado el “Resource WorkSohp”. En todas las Variables declaradas en el módulo Declaración de Métodos, 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 continuación: ::Image Observación: Como abran podido comprobar en esta practica, hemos utilizado los siguientes comandos internos de Clipper, junto con las siguientes Funciones. Local Space() If Empty() Return Time() Cdow()

Page 16: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 16

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

Page 17: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 17

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 configuración de la Base de datos, con el archivo de Índice Cdx, y “RDDSETDEFAULT(“DBFCDX”)”, que es la configuración, para poder utilizar el Índice Cdx, tal como se muestra a continuación: /* * Modulo de entrada y comienzo del programa. */ Procedure Main() Local Principal Request DbfCdx // Nueva Línea RDDSETDEFAULT("DBFCDX") // Nueva Línea set(_SET_DATEFORMAT,"dd/mm/yyyy") Application:Title := "ArchiPel" Application:Icon:Name := "Test" Application:Initialize() Application:CreateForm( TPrincipal(), @Principal ) Application:Run() Return ***************************************************************************

Modulo de Declaración de Métodos. A continuación configuraremos el modulo Declaración de Métodos, en donde añadiremos la siguiente línea, Method BaseDatos que es la declaración, del Método de la Base de Datos, que vamos a construir seguidamente, tal como se muestra a continuación: // Modulo de Declaración de Métodos. Class TPrincipal From TForm Private: Data Image Public: Method Create Constructor Method MenuPrin Method Terminar Method BarraHora Method BaseDatos // Nueva Línea. EndClass

Page 18: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 18

Modulo Principal. A continuación en el modulo Principal, también añadiremos la siguiente línea “::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 continuación: // Modulo Principal. Method Create( oOwner ) Class TPrincipal Super:Create( oOwner ) ::SetBounds( 0, 0, 800, 570 ) ::Icon:Name := "Test" ::Caption:=Space(76)+"Archivo de Películas" ::Brush:Color := clAqua ::Image := TImage():Create( Self ) ::Image:SetPos( 166, 40 ) ::Image:Picture:Bitmap:Name := "Copryn" ::MenuPrin() ::BarraHora() ::BaseDatos() // Nueva Línea. ::OnCloseQuery := { | oSender,Salir | ::Terminar( @Salir ) } Return *************************************************************************** Construcción de la Base de Datos. Seguidamente construiremos, el modulo para la declaración 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 continuación: /* * Modulo de la Declaración 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

Page 19: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 19

Nota: Los cuatro últimos registros de la Base de Datos, “R1”,”R2”,”R3” y “R4”, los hubiésemos 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. *************************************************************************** Construcción del Índice. A continuación declararemos, dentro del mismo método un buscador, para que compruebe si el Índice, ya existe y si no lo encuentra que lo cree, así que para esta parte del método, vamos a utilizar los siguientes comandos, internos de C3, “If/Endif”, “Use” “Index”, “On”, “Field”, “Tag” y “close Data”, tal como se muestra a continuación: // 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 añadir este nuevo modulo, junto con las modificaciones, antes descritas, en los módulos 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í también se incluyen los ficheros “Do.bat” “ArchiPel.bak”, “Samples.rc”, el archivo completo “ArchiPel.prg”, para que puedan consultarlo, mientras montan esta práctica 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 ejecutásemos el programa “ArchiPel.exe”, se nos crearía una Base de Datos y un Índice nuevos, con lo que perderíamos todos los datos, que tuviésemos almacenados en dichos ficheros. Observación: Como abran podido comprobar en esta lección, hemos utilizado los siguientes comandos internos de Clipper, junto con las siguientes Funciones.

Page 20: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 20

Comandos Funciones If/EndIf File() Use dbCreate() Index Close Data Return ***************************************************************************

Page 21: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 21

Practica - 6ª

Buscar Base de Datos. En esta lección vamos a construir Modulo que nos permita la entrada de Datos, así que lo primero que haremos será, añadir al modulo de la Declaración de Métodos, los siguientes métodos “Method BusBaseDatos”, este método nos buscara la base de datos “Method VenMenAuto”, este método nos mostrara las ventanas, de los mensajes automáticos, “LLamaMensage” este método 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 continuación: Declaración de Métodos. /* * Modulo de la Declaración de Métodos. */ Class TPrincipal From TForm Private: Data Image Public: Method Create Constructor Method MenuPrin Method Terminar Method BarraHora Method BaseDatos Method BusBaseDatos // Nueva Línea Method VenMenAuto // Nueva Línea Method LLamaMensage // Nueva Línea Method ContaTiempo // Nueva Línea EndClass *************************************************************************** Altas en el Menu Principal. A continuación vamos a configurar, la entrada de datos de la opción “Alta de Fichas” del “Menú Principal”, con el comando interno de C3, “oSender”, junto con el método que vamos a construir a continuación “BusBaseDatos()”, formando así el conjunto la siguiente instrucción, “{|oSender|:: BusBaseDatos()}”, tal como se muestra a continuación: /* * 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)})

Page 22: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 22

Nota: Las variables de la entrada de la función, BuscaBaseDatos(x,tr,va,me) equivale a los siguientes parámetros:

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 vacía 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 ningún trabajo. Para la construcción de este método, 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 continuación: /* * 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 función BusBaseDatos(x,tr,va,me), equivale a los siguientes parámetros:

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 construcción 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

Page 23: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 23

dos que vamos a construir nosotros, una “llamaMensage()” y otra “ContaTiempo”, tal como se muestra a continuación:

/* * Modulo Para la Ventana de Mensajes Automáticos. */ 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 función VenMenAuto(c1,c2,mv,co), corresponden a los siguientes parámetros: c1 y c2 => Corresponden al tamaño 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 opción del programa. Para la construcción 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 continuación: /* * Modulo Para Mostrar Mensajes. */ Method LLamaMensage(ve,c1,c2,cp,nf,tf,cl,me) Class TPrincipal Local Men

Page 24: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 24

// 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 Gestión.' Endif Retur nil Nota: Las variables de entrada de la función LLamaMensage(ve,c1,c2,cp,nf,tf,cl,me) corresponden a los siguientes parámetros: ve => Ventana que llama el mensaje. c1 y c2 => Posición del mensaje dentro de la ventana. cp => Color de la ventana. nf => Tipo de letra a utilizar, por defecto(Arial) tf => Tamaño de la letra que esta utilizando. cl => Color de la letra que se esta utilizando. me => 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 construcción 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 continuación: /* * Modulo Contador de Tiempo. */ Method ContaTiempo(ti,ve) Class TPrincipal Local oTimer oTimer := TTimer():Create(ve) oTimer:Interval := ti oTimer:Enabled := .t.

Page 25: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 25

oTimer:OnTimer:= {|oSender|oTimer:Destroy(),ve:Close(),ve:Destroy()} Return Nil Nota:

Las variables de entrada de la función ContaTiempo(ti,ve), corresponden a los siguientes parámetros: 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 módulos 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 opción “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 Gestión.'

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 razón 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 práctica, pero en la próxima práctica, ya lo configuraremos correctamente, tal como debe de ir en nuestro programa.

Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.bak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf Chr() Local File() Private Public Return ***************************************************************************

Page 26: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 26

Page 27: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 27

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á, añadir al modulo de la Declaración de Métodos, los siguientes métodos “Method SayDatos”, este método nos mostrara los datos que tengamos que mostrar, “Method BuscaFicha”, este método comprueba, si la ficha ya esta archivada “Method FichaVacia”, este método nos construirá la ficha vacía, “Method FichaRecNue” este método nos mostrara una ficha, vacía para rellenar o una ya rellenada para corregir, “Method Archivar” este método nos archivara, una ficha nueva o una que hayamos corregido y “Method CrearBoton” este método nos creara los Botones, que vayamos a utilizar en las ventanas, tal como se muestra a continuación:

Configurar la Declaración de Métodos. /* * Modulo de la Declaración de Métodos. */ Class TPrincipal From TForm Private: Data Image Public: Method Create Constructor Method MenuPrin Method Terminar Method BarraHora Method BaseDatos Method BusBaseDatos Method VenMenAuto Method LlamaMensage Method ContaTiempo Method SayDatos // Nueva Línea. Method BuscaFicha // Nueva Línea. Method CrearBoton // Nueva Línea. EndClass // Fin del Modulo de Métodos ***************************************************************************

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 vacía 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 ningún trabajo. Para la construcción de este método, 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 continuación:

Page 28: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 28

/* * 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 // Nueva Línea. if x=1 // Nueva Línea. // Hacer Ficha Nueva para rellenar. ::buscaFicha(tr,me) // Nueva Línea.

Endif // Nueva Línea. Endif

Retur nil Nota: La variable de la entrada de la función BusBaseDatos(x,tr,va,me), equivale a los siguientes parámetros:

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 continuación vamos a construir el módulo, 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 módulo 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 continuación: /* * 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

Page 29: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 29

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()} // Botón 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 continuación vamos a construir, un módulo que nos creara los Botones, que tengamos que utilizar, a lo largo de todo el programa, así que en este módulo vamos a utilizar, los comandos internos de C3, “Method”, “Class”, “Local” y “Return”, la variable “Botón”, 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 continuación: /* * Modulo Para Crear Botones.

Page 30: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 30

*/ 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 función CrearBoton(ve,c1,c2,c3,c4,tf,tv,ac), equivale a los siguientes parámetros: ve => Ventana a la que pertenece el Botón. c1,c2,c3,c4 => Tamaño del Botón. tf => Tipo de Letra a utilizar. tv => Nombre del Botón. ac => Acción a realizar, cuando se pulse el Botón.

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

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 añadiendo, 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 continuación: /* * Modulo Para la Ventana de Mensajes Automáticos. */ Method VenMenAuto(c1,c2,mv,co) Class TPrincipal Local Venta, Meve1, Meve2 Meve1:=Space(48)+'Aviso Muy Grave' Meve2:=Space(46)+'Información de la Ficha' // Nueva Línea. // 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 // Nueva Línea. Venta:Caption := Meve2 // Nueva Línea.

Page 31: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 31

::LLamaMensage(Venta,30,26,clAqua,"Arial Black",22,clBlack,2) // Nueva Línea. ::ContaTiempo(4000,Venta) // Nueva Línea. Endif Venta:ShowModal() Return Nil Nota: Las variables de entrada de la función VenMenAuto(c1,c2,mv,co), corresponden a los siguientes parámetros: c1 y c2 => Corresponden al tamaño 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, añadiéndole una nueva opción, junto con un nuevo mensaje, tal como se muestra a continuación: /* * 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 Gestión.' elseif me=2 // Nueva Línea. Men:Caption:=' La Ficha que Usted Quiere dar '+Chr(13)+; // nueva Línea. ' de Alta ya Esta Archivada.' // Nueva Línea. ::ContaTiempo(4000,ve) // Nueva Línea. Endif

Page 32: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 32

Retur nil Nota: Las variables de entrada de la función LLamaMensage(ve,c1,c2,cp,nf,tf,cl,me) corresponden a los siguientes parámetros: ve => Ventana que llama el mensaje. c1 y c2 => Posición del mensaje dentro de la ventana. cp => Color de la ventana. nf => Tipo de letra a utilizar, por defecto(Arial) tf => Tamaño de la letra que esta utilizando. cl => Color de la letra que se esta utilizando. me => 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 módulo, para mostrar datos o montar fichas vacías, etc, etc., así para montar este módulo 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 continuación: /* * 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 función SayDatos(va,ve,c1,c2,co,nf,tf,cf,al,ts,md) corresponden a los siguientes parámetros: va => Variable de la Función que la llama. ve => Ventana que llama a la Función. c1,c2 => Coordenadas para los Datos. co => Color del Fondo de los Datos. nf => Tipo de Letra. tf => Tamaño de la Letra. cf => Color de la Letra. al => Alineamiento de la Escritura. ts => Transparencia de la Escritura.

Page 33: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 33

md => Escritura que se tiene que mostrar. Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “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 prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.bak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf Chr() Local File() Use Space() Index Create() Close Data Empety() Return dbSeek() Recno() Eof() ***************************************************************************

Page 34: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 34

Page 35: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 35

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á, añadir al modulo de la Declaración de Métodos, 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 métodos “Method FichaVacia”, este método nos mostrara una Ficha Vacía, “Method FichaRecNue”, este método nos presenta una Ficha nueva Vacía, con todas las entradas activas, para poder rellenar los datos que nos pide y “Method Archivar”, este método nos gravara, los datos del ficha en la Base de Datos, tal como se muestra a continuación:

Configurar la Declaración de Métodos. /* * Modulo de la Declaración de Métodos. */ 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 // Nueva Línea. Method FichaRecNue // Nueva Línea. Method Archivar // Nueva Línea. EndClass ***************************************************************************

Buscar Fichas. A continuación vamos a completar el módulo para Buscar Fichas, así que le añadiremos tres nuevas líneas, para que compruebe si la ficha ya esta archivada y si no la encuentra, que nos presente una Ficha Vacía, para poder rellenarla y guardarla, en la Base de Datos, a continuación se muestran las nuevas líneas de código: /* * Modulo para Buscar Fichas. */ Method BuscaFicha(tr,me) Class TPrincipal

Page 36: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 36

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 Nueva Línea. // Si no la Encuentra nos Presenta una Ficha Nueva. ::FichaRecNue(,fi,1) Nueva Línea. endif Nueva Línea. Return Nil ***************************************************************************

Construir Ficha Vacía.

Page 37: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 37

A continuación vamos a construir una Ficha Vacía, para poder entrar datos, corregir y mostrar, las fichas que ya estén archivadas, así para la construcción de este módulo, 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 función que creamos nosotros, en la practica anterior, “SayDatos”, tal como se muestra a continuación: /* * Módulo Para Construir una Ficha Vacía. */ 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 Vacía. ::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.,'Duración : '+Repli(' . ',4)) ::SayDatos(va,ve,496,120,co,,,,,.f.,'Año : '+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.,'Distribución : . .') ::SayDatos(va,ve,384,210,co,,,,,.f.,'Producción :') ::SayDatos(va,ve,20,240,co,,,,,.f.,'Guionista : '+Repli(' . ',4)) ::SayDatos(va,ve,384,240,co,,,,,.f.,'Fotografía : .') ::SayDatos(va,ve,20,270,co,,,,,.f.,'Música : '+Repli(' . ',5)) ::SayDatos(va,ve,384,270,co,,,,,.f.,'Dirección : .') ::SayDatos(va,ve,20,310,co,,,,,.f.,'Argumento : ') Return Nil Nota: Las variables de la entrada de la función, FichaVacia(va,ve,c1,c2,c3,c4,co,nf,tf,cf,al) equivale a los siguientes parámetros: va => Variable de la Función. ve => Ventana que llama a esta Ficha. c1,c2,c3,c4 => Coordenadas del recuadro de la Ficha. co => Color del fondo del Recuadro. nf => Tipo de Letra a utilizar. tf => Tamaño de la Letra que se va a utilizar. cf => Color de la Letra que se va a utilizar. al => Alineamiento de la Letra. **************************************************************************

Page 38: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 38

Configurar los Mensajes. Seguidamente vamos a continuar configurando el modulo, añadiéndole dos nuevas opciones, junto con dos nuevos mensajes, tal como se muestra a continuación:

/* * 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 Gestión.' elseif me=2 Men:Caption:=' La Ficha que Usted Quiere dar '+Chr(13)+; ' de Alta ya Esta Archivada.' ::ContaTiempo(4000,ve) elseif me=3 // Nueva Línea. Men:Caption:=' Esta Ficha ha Sido Archivada '+Chr(13)+; // Nueva Línea. Space(12)+'Correctamente.' // Nueva Línea. elseif me=5 // Nueva Línea. Men:Caption:=' Espere por Favor a que Termine '+Chr(13)+; // Nueva Línea. ' de Archivar Esta Ficha.' // Nueva Línea. Endif Retur nil Nota: Las variables de entrada de la función LLamaMensage(ve,c1,c2,cp,nf,tf,cl,me) corresponden a los siguientes parámetros: ve => Ventana que llama el mensaje. c1 y c2 => Posición del mensaje dentro de la ventana. cp => Color de la ventana. nf => Tipo de letra a utilizar, por defecto(Arial) tf => Tamaño de la letra que esta utilizando. cl => Color de la letra que se esta utilizando. me => Mensaje que necesitamos mostrar. La constante interna de C3, “bsSingle” muestra un marco, al rededor del mensaje.

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

Ficha Para Entrar o Corregir Datos.

Page 39: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 39

Seguidamente construiremos un módulo, que nos mostrara una ficha para entrada de Datos nuevos y que luego, como vayamos avanzando en estas practicas, añadiéndole unas cuantas líneas de codigo más, lo utilizáremos también para corregir los datos de las Fichas que ya este archivada en la Base de Datos. Para la construcción de este módulo, 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 Declaración de Métodos, 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 continuación nosotros “archivar”, tal como se muestra a continuación: /* * 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 Numeración Automática. 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 Número de Codigo Automático. 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

Page 40: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 40

// Llama Ficha Vacía. ::FichaVacia(mos,Venta,10,10,670,404,cf,,,,) // Entrada del Numero de Codigo Automático. 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 Duración. 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)

Page 41: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 41

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 Fotografía. 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 Música. 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

Page 42: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 42

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 ***************************************************************************

Page 43: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 43

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 construcción 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 continuación: /* * Módulo 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 Vacía 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 función 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 Función FichaRecNue(). **************************************************************************

Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “Alta de Fichas”, del menu principal y nos aparecerá en la pantalla una ventana, con el siguiente mensaje que nos pedirá:

Page 44: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 44

“Ficha Para dar de Alta” Introduzca un nombre cualquiera y pulse Enter o con el Ratón, pulse el Botón 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 Vacía con todos los datos, que tenemos que rellenar en Blanco, una vez que estén rellenados todos los datos, pulsar “Enter” o pulsar con el Ratón el Botón de Archivar Esta Ficha, seguidamente se nos mostraran dos mensajes más y volverá al Menú Principal, Lo cual nos demuestra que la practica ha sido realizada correctamente.

Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.bak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Nota: Como habrán podido observar en esta practica, todas las Variables que hemos utilizado y que fueron declaradas en el módulo Declaración de Métodos, llevan todas Dos Puntos Dobles, tal como ya se advirtió en la Práctica 4ª, de que cuando las tengamos que utilizar siempre hay que anteponerles Dos Puntos Dobles, tal como se muestra a continuación: ::Image, ::oTN, ::oTO Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. Local Space() If/EndIf Empty() Use dbSeek() Index Recno() Close Data Eof() Return Replicate() While/Enddo dbGotop() dbSkip() Chr() ***************************************************************************

Page 45: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 45

Practica - 9ª En esta práctica lo primero que vamos hacer, será terminar de construir, el Modulo que nos permita la entrada de Datos y también Corregir las los Datos de las Fichas, así que lo primero que haremos será, configurar la opción Corregir Fichas, del Menú Principal, tal como se muestra a continuación:

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 función, BuscaBaseDatos(x,tr,va,me) equivale a los siguientes parámetros:

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 continuación vamos a reconstruir totalmente este módulo, así para esta practica vamos a utilizar, los siguientes comandos internos de C3, “Method/Return”, “Class” y “If/EndIf”, junto con la función de C3, “File()” y las dos funciones, que creamos nosotros en practicas anteriores, “VenMenAuto()” y “BuscaFicha()”, como pueden comprobar esta función, en la practica anterior solo tenia una variable de entrada y ahora tiene cuatro, esto lo hemos modificado, para poder ir ampliándolo, a medida que vayamos realizando otras prácticas, así que una vez terminado de reconstruir, debe de quedar tal como se muestra a continuación: /* * 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 práctica, solo hemos utilizado tres de las cuatro variables de entrada, la otra ya la utilizaremos en las próximas prácticas.

Page 46: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 46

Las variables de la entrada de la función, BuscaFicha(x,me) equivale a los siguientes parámetros: x => Trabajo a Realizar. me => Mensaje a Mostrar. **************************************************************************

Configurar Buscar Fichas. A continuación 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 Práctica Anterior y solo vamos a modificar, las variables de entrada de la función, “x”, “me”, también agregaremos dos variables nuevas, en la declaración de variables locales, “bf”, “co”, seguidamente también reconstruiremos, las once siguientes líneas del primer “If/EndIf”, para adaptarlas a las nuevas entradas de la función, 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 continuación: /* * Modulo Buscar Fichas. */ Method BuscaFicha(x,me) Class TPrincipal // Cambiar Variables. Local venta,edit,n:=0,fi:=Space(34),mos,bf,co // Agregar dos Nuevas Variables // 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" // Nueva Línea. Venta:Caption := Space(40)+"Hacer Fichas Nuevas" // Nueva Línea. ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; // Nueva Línea. 'Ficha Para dar de Alta') // Nueva Línea. elseif x=2 // Nueva Línea. // Corregir Fichas // Nueva Línea co:=clYellow // Nueva Línea bf:="Buscar Esta Ficha Para Rectificarla" // Nueva Línea Venta:Caption := Space(41)+"Corregir Fichas" // Nueva Línea ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; // Nueva Línea ' Ficha Para Corregir') // Nueva Línea endif Edit:= TEdit():Create(Venta) Edit:SetBounds( 30, 70, 410, 0 ) Edit:Font:Name:= "Arial" Edit:Font:Size:= 14 edit:caption:=fi

Page 47: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 47

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 x=1 // Si la Encuentra Nos Avisa con un Mensaje. ::VenMenAuto(570,170,2,2,clLime) close data return nil elseif x=2 // Nueva Línea. close data // Nueva Línea. ::FichaRecNue(,fi,2) // Nueva Línea. return nil // Nueva Línea. 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 Línea. // Si no la Encuentra nos Avisa con un Mensaje. // Nueva Línea. ::VenMenAuto(560,170,2,6,co) // Nueva Línea. endif Return Nil Nota: Las variables de la entrada de la función, FichaRecNue(x,x1,x2) equivale a los siguientes parámetros: x1 => La Ficha a Buscar. x2 => Presenta la Ficha Para Rectificar. **************************************************************************

Mostrar Mensajes. Seguidamente en el Módulo para Mostrar Mensajes, le añadiremos 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 módulo deberá de quedar tal como se muestra a continuación:

Page 48: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 48

/* * 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 Gestión.' 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 Continuación vamos a terminar de construir, el modulo de Entrar o Corregir Datos así como ya dijimos en la práctica anterior, este módulo lo vamos a utilizar también para Corregir o Modificar Datos de las Fichas. Como en esta practica vamos a utilizar, el mismo Modulo que en la práctica anterior solo comentaremos los cambios que hay que realizar. El primer cambio que vamos a realizar será, agregar unas cuantas líneas de Codigo, al principio del Modulo, tal como se muestra a continuación: /* * 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)

Page 49: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 49

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 Numeración Automática. 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 // Nueva Línea. // Abre Base de Datos y Busca la Ficha. if !Empty(x1) // Nueva Línea. Use FiPelicu Index FiPelicu New Via 'DbfCdx' // Nueva Línea. FiPelicu->(OrdSetFocus('TN','FiPelicu')) // Nueva Línea. DbSeek(x1) // Nueva Línea. // Iguala las Variables. ::oNU:=FiPelicu->NU;::oTN:=FiPelicu->TN;::oTO:=FiPelicu->TO // Nueva Línea. ::oTE:=FiPelicu->TE;::oNA:=FiPelicu->NA;::oCL:=FiPelicu->CL // Nueva Línea. ::oDU:=FiPelicu->DU;::oAN:=FiPelicu->AN;::oA1:=FiPelicu->A1 // Nueva Línea. ::oA2:=FiPelicu->A2;::oA3:=FiPelicu->A3;::oA4:=FiPelicu->A4 // Nueva Línea. ::oDR:=FiPelicu->DR;::oPR:=FiPelicu->PR;::oGI:=FiPelicu->GI // Nueva Línea. ::oFO:=FiPelicu->FO;::oMU:=FiPelicu->MU;::oDI:=FiPelicu->DI // Nueva Línea. ::oR1:=FiPelicu->R1;::oR2:=FiPelicu->R2;::oR3:=FiPelicu->R3 // Nueva Línea. ::oR4:=FiPelicu->R4 // Nueva Línea. tv:=Space(52)+'Aquí Tiene la Ficha que Usted Quiere Corregir' // Nueva Línea. cf:=clYellow // Nueva Línea. arco:="Corregir Esta Ficha" // Nueva Línea. carco:="Cancelar Corregir Ficha" // Nueva Línea. nuco:=1 // Nueva Línea. if !eof() // Nueva Línea. Close Data // Nueva Línea. endif // Nueva Línea. endif // Nueva Línea. Cd:=StrZero(::oNU,10) // Nueva Línea. endif // Nueva Línea. El resto del modulo hay que dejarlo igual que estaba en la práctica anterior. **************************************************************************

Page 50: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 50

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 estén Corregidas o Modificadas, así para la configuración de este modulo, vamos a añadirle una cuantas líneas de codigo, pero utilizando el mismo Modulo de la práctica anterior, y una vez terminado de configurar debe de quedar tal como se muestra a continuación: /* * Módulo 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 Vacía 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 función 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 Función FichaRecNue(). **************************************************************************

Page 51: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 51

Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “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 Ratón pulse el Botón, 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, diciéndonos 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á automáticamente al Menú Principal, Lo cual nos demuestra que la práctica ha sido realizada correctamente.

Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.bak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. ***************************************************************************

Page 52: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 52

Page 53: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 53

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 también lo utilizaremos, para Imprimir y Consultar fichas. Para empezar esta práctica, lo primero que haremos será, configurar el Modulo de Declaración de Métodos, en donde le añadiremos dos nuevos Métodos, llamados “conBoImpri” y “BorraFicha”, tal como se muestra a continuación:

Configurar la Declaración de Métodos. /* * Modulo de la Declaración de Métodos. */ 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 Method conBoImpri // Nueva Línea. Method BorraFicha // Nueva Línea. EndClass ***************************************************************************

Configurar el Menú Principal. Seguidamente vamos a seguir configurando el Menú Principal, en esta práctica vamos a configurar, la opción “Borrar Fichas”, tal como se muestra a continuación: // Menú Para dar de Baja las Fichas. Menu:MenuItem(ns+"Borrar Fichas","Dar de Baja las "+; // Nueva Línea. "Fichas.",{|oSender|::BusBaseDatos(1,3,,2)}) // Nueva Línea.

Page 54: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 54

Nota: Las variables de la entrada de la función, BuscaBaseDatos(x,tr,va,me) equivale a los siguientes parámetros:

x =1 Buscar si Existe la Ficha. tr =3 Presenta una Ficha Para Corregir. me =2 Mensage a Mostrar. ***************************************************************************

Buscar Fichas. A continuación configuraremos también el modulo Buscar Fichas, en donde primero añadiremos, siete nuevas líneas de Codigo en el primer If/EndIf , el cual una vez añadidas estas nuevas líneas de Codigo, deberá de quedar tal como se muestra a continuación: 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 // Nueva Línea. // Borrar Fichas // Nueva Línea. co:=clRed // Nueva Línea. bf:="Buscar Esta Ficha Para Borrarla" // Nueva Línea. Venta:Caption := Space(44)+"Borrar Fichas" // Nueva Línea. ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; // Nueva Línea. ' Ficha Para Borrar') // Nueva Línea. endif Seguidamente terminaremos de configurar este Modulo, añadiéndole cuatro nuevas líneas de Codigo, en la parte de Abre Base de Datos y Busca la Ficha, el cual una vez añadidas estas nuevas líneas de Codigo, deberá de quedar como se muestra a continuación: // 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)

Page 55: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 55

return nil elseif tr=3 // Nueva Línea. close data // Nueva Línea. ::ConBoImpri(fi,2) // Nueva Línea. return nil // Nueva Línea. endif endif endif ***************************************************************************

Configurar Mensajes. Seguidamente vamos a continuar configurando el modulo, añadiéndole dos nuevas opciones, junto con dos nuevos mensajes, tal como se muestra a continuación: // Mensajes que hay que Mostrar.

elseif me=7 // Nueva Línea. men:Caption:=' Esta Usted Seguro de Querer '+Chr(13)+; // Nueva Línea. Space(8)+' Borrar Esta Ficha ' // Nueva Línea. elseif me=8 // Nueva Línea. men:Caption:=' Esta Ficha ha Sido Borrada '+Chr(13)+; // Nueva Línea. Space(10)+'Correctamente' // Nueva Línea. **************************************************************************

Borrar, Consultar o Imprimir Fichas. A continuación vamos a construir un módulo, para Borrar o dar de Baja las Fichas pero este mismo Modulo, lo utilizaremos también en próximas prácticas, para Consultar o Imprimir Fichas. En este ejercicio para montar este módulo 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 prácticas anteriores, “FichaVacia()”, “SayDatos” y “CreaBoton”, tal como se muestra a continuación: /* * 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)

Page 56: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 56

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 Vacía. ::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)

Page 57: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 57

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 práctica vamos a construir el Modulo, que nos Borrara o nos Dará de Baja, la Ficha que hayamos seleccionado. Para la construcción 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 prácticas, “CrearBoton()” “VenMenAuto()” y LlamaMensage()”, tal como se muestra a continuación: */ * Modulo para Borrar Ficha. */ Method BorraFicha(x) Class TPrincipal Local venta,Borra:=.F.,n:=0 // Ventana de Confirmación. 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 Confirmación. ::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)

Page 58: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 58

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 módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “Borrar Fichas”, del menu principal y nos aparecerá en la pantalla, una ventana pidiéndonos 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 Ratón en el boton de "Buscar Esta Ficha Para Borrarla", si la ficha no se encuentra en la Base de Datos, nos mostrara un mensaje diciéndonos, que la ficha no existe, pero si la encuentra nos la mostrara en pantalla. Al Pulsar Enter o con el Ratón 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 ratón en el “SI”, nos Borrara la Ficha mostrándonos un mensaje, que nos dirá que la Ficha ha sido Borrada Correctamente y nos volverá al Menú Principal. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf Chr() Local Array() Use Space() Index Create() Close Data Empety() Return dbSeek() Public Recno() Private Eof() .AND. dbDelete() Pack StrZero()

Page 59: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 59

Practica - 11ª

Consultar Fichas. Empezaremos esta práctica, configurando la entrada “Consultar Fichas” del Menú Principal, tal como se muestra a continuación: // Menú Para Consultar las Fichas. Menu:MenuItem(ns+"Consultar Fichas","Buscar Fichas"+; // Nueva Línea. " Para Consultar.",{|oSender|::BusBaseDatos(1,4,,2)}) // Nueva Línea. Nota: Las variables de la entrada de la función, BuscaBaseDatos(x,tr,va,me) equivale a los siguientes parámetros:

x =1 Buscar si Existe la Ficha. tr =3 Presenta una Ficha Para Consultar. me =2 Mensage a Mostrar. ***************************************************************************

Buscar Fichas. A continuación configuraremos también el modulo Buscar Fichas, en donde primero añadiremos, siete nuevas líneas de Codigo en el primer If/EndIf , el cual una vez añadidas estas nuevas líneas de Codigo, deberá de quedar tal como se muestra a continuación: 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 // Nueva Línea. // Consultar Fichas. // Nueva Línea. co:=clFuchsia // Nueva Línea. bf:="Buscar Esta Ficha Para Consultar" // Nueva Línea. Venta:Caption := Space(42)+"Consultar Fichas" // Nueva Línea. ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; // Nueva Línea. 'Ficha Para Consultar') // Nueva Línea.

Page 60: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 60

Seguidamente terminaremos de configurar este Modulo, añadiéndole cuatro nuevas líneas de Codigo, en la parte de Abre Base de Datos y Busca la Ficha, el cual una vez añadidas estas nuevas líneas de Codigo, deberá de quedar como se muestra a continuación: // 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 // Nueva Línea. Close data // Nueva Línea. ::ConBoImpri(fi,1) // Nueva Línea. return nil // Nueva Línea. endif endif endif *************************************************************************** Borrar, Consultar o Imprimir Fichas. A continuación vamos a configurar el módulo, para Consultar las Fichas, pero este mismo Modulo, lo utilizaremos también en próximas prácticas, para Imprimir Fichas. Para configurar esta opción de Consultar Fichas, iremos a la sección “Si la encuentra nos la muestra” y le añadiremos 4 nuevas líneas en el If x1=1, una vez colocadas estas nuevas líneas, debe de quedar tal como se muestra a continuación:

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

Page 61: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 61

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 módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “Consultar Fichas”, del menu principal y nos aparecerá en la pantalla una ventana pidiéndonos 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 Ratón en el boton de "Buscar Esta Ficha Para Consultar" si la ficha no se encuentra en la Base de Datos, nos mostrara un mensaje diciéndonos, que la ficha no existe, pero si la encuentra nos la mostrara en pantalla, lo cual nos demuestra que la práctica ha sido realizada correctamente. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. ***************************************************************************

Page 62: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 62

Page 63: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 63

Practica - 12ª

Listados. En esta practica vamos a construir el Modulo, para mostrar los Listados de varias formas, por Número de Codigo, por Orden Alfabético, por Temas, por Años y por ultimo por Directores.

Declaración de Métodos. Empezaremos esta practica, configurando el Modulo, de Declaración de Métodos, en el que le añadiremos una nueva línea de Codigo, tal como se muestra a continuación: 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 Method conBoImpri Method BorraFicha Method Listados // Nueva Línea. ***************************************************************************

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le añadiremos unas cuantas líneas de Código, en la sección Menú Para Mostrar Listados, en donde iremos configurando, las distintas llamadas al Módulo, de Mostrar Listados, tal como se muestra a continuación: // Menú Para Mostrar Listados. Menu:MenuItem(ns+"Consultar Listado","Listados por"+; // Nueva Línea. " Varios Sistemas.") // Nueva Línea. Menu:BeginMenu() // Nueva Línea. Menu:MenuItem("Listado Por Codigo","Listado por "+; // Nueva Línea. "Número de Codigo",{|oSender|::BusBaseDatos(2,1,'NU',)}) // Nueva Línea. Menu:MenuItem("Listado Por Alfabeto","Listado por"+; // Nueva Línea. " Orden Alfabético.",{|oSender|::BusBaseDatos(2,2,'TN',)}) // Nueva Línea. Menu:MenuItem("Listado Por Temas","Listado por"+; // Nueva Línea. " Temas.",{|oSender|::BusBaseDatos(2,3,'TE',)}) // Nueva Línea. Menu:MenuItem("Listado Por Años","Listado por Año "+; // Nueva Línea. "de Producción.",{|oSender|::BusBaseDatos(2,5,'AN',)}) // Nueva Línea.

Page 64: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 64

Menu:MenuItem("Listado por Dirección","Listado por "+; // Nueva Línea. "Directores.",{|oSender|::BusBaseDatos(2,4,'DI',)}) // Nueva Línea. Menu:EndMenu() // Nueva Línea.

Busca Base de Datos. A continuación vamos a configurar el Módulo, de Buscar la Base de Datos, en donde le añadiremos dos nuevas líneas de Codigo, una vez que este terminado, debe de quedar tal como se muestra a continuación: /* * 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 módulo Buscar Ficha. ::buscaFicha(tr,me) elseif x=2 // Nueva Línea. // Llama al Módulo de Listados. // Nueva Línea. ::Listados(tr,va) // Nueva Línea. endif Endif Return Nil ***************************************************************************

Mostrar Listados. Por ultimo en esta práctica vamos a construir el Módulo, para mostrarnos los Listados según la opción que hayamos elegido en el Menú Principal. Para la construcción de este Módulo, vamos a utilizar los siguientes, comandos internos de C3, “Method/Return”, “Class”, “Local”, “If/EndIf”, “Use”, “index”, “New Via”, “While/Heñido”, “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 prácticas anteriores “CrearBoton()”, junto con las constantes de entorno de C3, “bsDialog”, “taCenter” “poActiveCenter”, “taRightJustify” y “taLeftJustify”, tal como se muestra a continuación: /* * Modulo Para Mostrar Listados. */ Method Listados(tr,va) Class TPrincipal Local venta, String, aArray

Page 65: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 65

// 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 Número de Codigo' elseif tr=2 venta:Caption:=Space(76)+'Listado por Orden Alfabético' elseif tr=3 venta:Caption:=Space(82)+'Listado por Temas' elseif tr=5 venta:caption:=Space(75)+'Listado por Año de Producción' 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",; "Dirección","Año","Distribución"} 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 //*********************************************************************//

Page 66: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 66

Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “Consultar Listados”, del menu principal y nos aparecerá en la pantalla varias formas de poder consultar los Listados, escogeremos la forma que más 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 práctica ha sido realizada correctamente. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf File() Local dbGoTop() Use Space() Index Create() Close Data Eof() Return aadd() While/EndDo StrZero() dbSkip() ***************************************************************************

Page 67: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 67

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.

Declaración de Métodos. Empezaremos esta practica, configurando el Modulo, de Declaración de Métodos, en el que le añadiremos una nueva línea de Codigo, tal como se muestra a continuación: 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 Method conBoImpri Method BorraFicha Method Listados Method PrintFicha // Nueva Línea. ***************************************************************************

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le añadiremos unas líneas de Código, en la sección Menú Para Imprimir, en donde configuraremos la llamada al Módulo, de Imprimir Fichas, tal como se muestra a continuación: // Menú Para Imprimir. Menu:MenuItem(ns+"Imprimir","Imprimir Fichas o Listados.") Menu:BeginMenu() Menu:MenuItem( "Imprimir Fichas","Imprimir Fichas de "+; // Nueva Línea. "Películas.",{|oSender|::BusBaseDatos(1,5,,2)}) // Nueva Línea. Menu:EndMenu() // Nueva Línea. ***************************************************************************

Page 68: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 68

Buscar Fichas. A continuación vamos a seguir configurando, el Modulo de Buscar Fichas, en donde le añadiremos un Variable Local y varias líneas de Código, tal como se muestra a continuación: /* * Modulo Buscar Fichas. */ Method BuscaFicha(tr,me) Class TPrincipal Local venta,edit,n:=0,fi:=Space(34),mos,bf,co,on // Nueva Variable. // 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 // Nueva Línea. 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 // Nueva Línea. on:=1 // Nueva Línea. 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 // Nueva Línea. // Consultar Fichas. // Nueva Línea. tr:=3 // Nueva Línea. on:=3 // Nueva Línea.

Page 69: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 69

co:=clFuchsia // Nueva Línea. bf:="Buscar Esta Ficha Para Imprimir" // Nueva Línea. Venta:Caption := Space(43)+"Imprimir Fichas" // Nueva Línea. ::SayDatos(mos,Venta,30,10,,'Arial Black',25,,,.t.,; // Nueva Línea. ' Ficha Para Imprimir') // Nueva Línea. endif En el resto del Módulo no hay que modificar nada, ya que debe de quedar tal como estaba en la Práctica Anterior. ***************************************************************************

Corregir o Hacer Fichas Nuevas. A continuación en el Módulo de Corregir o Hacer Fichas Nuevas, le añadiremos un nuevo Botón de control, para llamar al Modulo de Imprimir Fichas, para así poder mandar la Ficha a la Impresora, este nuevo Botón quedara configurado, tal como se muestra a continuación: // 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 Línea. ::CrearBoton(Venta,245,430,215,23,9,"Imprimir Esta Ficha",; // Nueva Línea. {|oSender|::PrintFicha(x,2,::oNU,::oTN,::oTO,::oTE,::oNA,::oCL,; // Nueva Línea. ::oDU,::oAN,::oA1,::oA2,::oA3,::oA4,::oDR,::oPR,::oGI,::oFO,::oMU,; ::oDI,::oR1,::oR2,::oR3,::oR4),Venta:Close(),Venta:Destroy()}) // Nueva Línea. // Boton Para Cancelar. ::CrearBoton(Venta,470,430,200,23,9,carco,; {|oSender|Venta:Close(),Venta:Destroy()}) ***************************************************************************

Consultar, Borrar o Imprimir Ficha. Seguidamente en el Módulo Consultar, Borrar o Imprimir Ficha, en el primer If/EndIf, le añadiremos una nueva opción, tal como se muestra a continuación: 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 // Nueva Línea. x1:=1 // Nueva Línea. mb:="Cancelar Imprimir Ficha" // Nueva Línea. Venta:Caption:=Space(42)+'Aquí Tiene la Ficha que'+; // Nueva Línea. ' Usted a Solicitado Para Imprimir' // Nueva Línea. endif

Page 70: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 70

Seguidamente le añadiremos un nuevo Botón, para llamar al Módulo de Imprimir, tal como se muestra a continuación: 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 continuación vamos a construir el Módulo, que nos Imprimirá las Fichas, con su correspondiente Marco, Igual que si fuese una Ficha Comercial. Para la construcción de este Módulo, vamos a utilizar los siguientes comandos internos de C3, “Method/return”, “Class”, “Local”, “If/EndIf”, “Use”, “Index”, “New Via” “Close Data” y “Printer”, a demás de la Variables, que ya definimos en el Módulo de Declaración de Métodos, 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, después de terminar este Módulo “PrintRecuBox()”, “PrintSombraBox()” y “PrintTexto()”, a hora construiremos la Ficha tal como se muestra a continuación: 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

Page 71: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 71

::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("Número 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 Película. 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("Duración:","arial",11,.f.,{22,55,50,80},TA_LEFT) PrintTexto(AllTrim(::oDU),"Arial",14,.f.,{52,54,110,80},TA_LEFT) PrintTexto("Año:","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)

Page 72: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 72

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("Distribución:","arial",11,.f.,{22,76,50,110},TA_LEFT) PrintTexto(AllTrim(::oDR),"Arial",14,.f.,{52,75,110,110},TA_LEFT) PrintTexto("Producción:","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("Fotografía:","arial",11,.f.,{114,83,140,120},TA_LEFT) PrintTexto(AllTrim(::oFO),"Arial",14,.f.,{140,82,188,120},TA_LEFT) PrintTexto("Música:","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 Película. 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 Módulo, para hacer un Recuadro dentro del cual se escribirá la Ficha. Para la construcción de este Módulo, 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 continuación: /* * 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

Page 73: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 73

Nota: Este Módulo lo utilizaremos en próximas prácticas, para construir el Marco de los Listados. *********************************************************************

Sombra del Marco. Seguidamente vamos a construir el Módulo, que nos pondrá la Sombra al rededor del Marco de la Ficha. Para la construcción de este Módulo, 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 continuación: /* * Módulo 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 Módulo lo utilizaremos en próximas prácticas, para construir la Sombra del Marco de los Listados. *********************************************************************

Imprimir Texto de las Fichas. Como ultimo ejercicio de esta Práctica, vamos a construir el Módulo, para Imprimir el Texto de las Fichas. Para la construcción de este Módulo, 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

Page 74: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 74

Funciones, “Len()”, “SetTextAling()”, “Millimeter2Print()” y “ExtTextOut()” tal como se muestra a continuación: /* * 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 Módulo lo utilizaremos en próximas Prácticas, para Imprimir los Listados. ********************************************************************* Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 continuación 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, también podemos realizar la misma operación, 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 práctica ha sido realizada correctamente. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica.

Page 75: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 75

También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf Empty() Local dbSekk() Use Space() Index Create() Close Data Eof() Procedure/Return Str() Static StrZero() Recno() AllTrim() Len() ***************************************************************************

Page 76: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 76

Page 77: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 77

Practica - 14ª

Imprimir. En esta practica vamos a construir el Modulo, que nos permitirá Imprimir los Listados de Tres Formas Distintas, por el Número de Codigo, por Orden Alfabético 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 más nos interese.

Declaración de Métodos. Empezaremos esta practica, configurando el Modulo, de Declaración de Métodos, en el que le añadiremos una nueva línea de Codigo, tal como se muestra a continuación: 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 Method conBoImpri Method BorraFicha Method Listados Method PrintFicha Method PrintListados // Nueva Línea. ***************************************************************************

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le añadiremos unas líneas de Código, en la sección Menú Para Imprimir, en donde configuraremos la llamada al Módulo, de Imprimir los Listados, tal como se muestra a continuación: // Menú Para Imprimir. Menu:MenuItem(ns+"Imprimir","Imprimir Fichas o Listados.") Menu:BeginMenu() Menu:MenuItem( "Imprimir Fichas","Imprimir Fichas de "+; "Películas.",{|oSender|::BusBaseDatos(1,5,,2)}) Menu:Separator() // Nueva Línea. Menu:MenuItem( "Listado Por Codigo","Listado por Número"+; // Nueva Línea. " de Codigo",{|oSender|::BusBaseDatos(3,1,,)}) // Nueva Línea. Menu:MenuItem( "Listado Por Alfabeto", "Listado por Orden"+; // Nueva Línea. " Alfabético.",{|oSender|::BusBaseDatos(3,2,,)}) // Nueva Línea.

Page 78: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 78

Menu:MenuItem( "Listado Por Temas","Listados por Temas.",; // Nueva Línea. {|oSender|::BusBaseDatos(3,3,,)}) // Nueva Línea. Menu:EndMenu() ***************************************************************************

Buscar Base de Datos. A continuación vamos a seguir configurando, el Modulo de Buscar la Base de Datos en donde le añadiremos Tres nuevas Líneas de Código, para hacer la llamada al Modulo de Imprimir los Listados, tal como se muestra a continuación: /* * 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 // Nueva Línea. // Imprimir Listados. // Nueva Línea. ::PrintListados(tr) // Nueva Línea. endif Endif Return Nil ***************************************************************************

Imprimir Listados. A continuación vamos a construir el Módulo, que nos Confeccionara los Listados con su correspondiente Marco, Igual que si fuese un Listado Comercial. Para la construcción de este Módulo, 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 continuación:

Page 79: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 79

/* * 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 Alfabético","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 // Numeración de las Paginas. PrintTexto("Página: "+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}) // Títulos 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) // Líneas Verticales de Separación. PrintLinea({18,46,192,46}) PrintLinea({44,38,44,278}) PrintLinea({118,38,118,278})

Page 80: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 80

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 ***************************************************************************

Líneas del Listado. Y por ultimo vamos a construir el Módulo, que nos imprimirá las Líneas del Listado. Para la construcción de este Módulo, 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 continuación: /* * Modulo Para Imprimir las Líneas 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 *********************************************************************

Page 81: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 81

Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 continuación 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 práctica ha sido realizada correctamente. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf File() Local dbGoTop() Use dbSkip() Index Eof() Close Data Procedure/Return Static While/EndDo ***************************************************************************

Page 82: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 82

Page 83: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 83

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 más practico le parezca, por que si fuese un Programa, que necesitase gran cantidad de Ayuda, entonces hubiésemos utilizado, un Archivo de Ayuda con extensión *.HLP.

Declaración de Métodos. Empezaremos esta practica, configurando el Modulo, de Declaración de Métodos, en el que le añadiremos una nueva línea de Codigo, tal como se muestra a continuación: 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 Method conBoImpri Method BorraFicha Method Listados Method PrintFicha Method PrintListados Method AyudaCopryng // Nueva Línea. ***************************************************************************

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le añadiremos unas líneas de Código, en la sección Menú Para la Ayuda y el Copryng, en donde configuraremos la llamada al Módulo, de Ayuda y del Copryng, tal como se muestra a continuación: // Menú del Control de Ayuda y Copryng. Menu:MenuItem(ns+"Ayuda","Ayuda Copryng del Programa.") Menu:BeginMenu() Menu:MenuItem("Ayuda","Ayuda del Programa.",; // Nueva Línea. {|oSender|::AyudaCopryng(1," Ayuda")}) // Nueva Línea. Menu:MenuItem("Copryng","Copryng del Programa.",; // Nueva Línea. {|oSender|::AyudaCopryng(2,"Copryng")}) // Nueva Línea. Menu:EndMenu() // Nueva Línea.

Page 84: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 84

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

Mensaje de Copryng. elseif me=4 // Nueva Línea. Men:Caption:=Chr(13)+; // Nueva Línea. Space(10)+'ARCHIPEL Versión 1.0 Año: 2004-2005 '+; // Nueva Línea. Chr(13)+' (c) La Antorcha de los Grandes Exitos '+; // Nueva Línea. ' (Fraguibo) '+Chr(13)+Space(17)+'Autor: Francisco '+; // Nueva Línea. 'Guillamon Bou '+Chr(13)+Space(13)+'Teléfono: 964033349'+; // Nueva Línea. ' y 699833680 '+Chr(13)+Space(17)+; // Nueva Línea. 'e-mail: [email protected] '+Chr(13)+; // Nueva Línea. ' Web: http://spaces.msn.com/members/fraguibo/ '+Chr(13) // Nueva Línea.

Mensaje de Ayuda. elseif me=9 // Nueva Línea. Men:Caption:=Chr(13)+; // Nueva Línea. ' Este Programa por su gran Claridad '+Chr(13)+; // Nueva Línea. ' en Todas sus Opciones de uso, no '+Chr(13)+; // Nueva Línea. ' Hace Falta Ningún Tipo de Ayuda. '+Chr(13) // Nueva Línea. El resto del Modulo lo dejaremos, tal como lo teníamos configurado en las Practicas anteriores. ***************************************************************************

Ayuda y Copryng. Por ultimo en esta práctica vamos a construir el Módulo, que nos mostrara la Ayuda y el Copryng del Programa. Para la construcción de este Módulo, 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 continuación: /* * Ayuda y Copryng del Programa. */ Method AyudaCopryng(x,nv) Class TPrincipal Local Venta // Creamos la ventana. Venta:= TForm():Create() Venta:BorderStyle := bsDialog

Page 85: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 85

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 módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “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 Ningún Tipo de Ayuda. Luego pulsamos en “Salir” y a continuación realizamos la misma operación, con la opción Copryng y se nos mostrara el “Copryng del Programa”, y si todo funciona bien nos demuestra que la práctica, ha sido realizada correctamente. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. Observación: Como abran podido comprobar, en esta practica también hemos utilizado, los siguientes comandos internos de Clipper, junto con las siguientes Funciones. If/EndIf Chr() Local Space() Bueno Compañeros y Amigos, con esta Practica se podría dar por terminado, este pequeño y practico cursillo, pero realizaremos unas practicas más, para decorar nuestro programa y asi practicaremos un poquito más.

Page 86: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 86

Page 87: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 87

Practica - 16ª

Modificar Consultar Listados. Una vez terminado el Curso Práctico, vamos a realizar unas Prácticas más, 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 añadiendo, en el Modulo “Declaración de Métodos”, un nuevo Método llamado “Method ListaImpri”.

Declaración de Métodos. Empezaremos esta practica, configurando el Modulo, de Declaración de Métodos, en el que le añadiremos, como ya hemos dicho anteriormente, una nueva línea de Codigo, tal como se muestra a continuación: 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 Method conBoImpri Method BorraFicha Method ListaImpri // Nueva Línea. Method Listados Method PrintFicha Method PrintListados Method AyudaCopryng ***************************************************************************

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le sustituiremos todas las líneas de Código, del “Menú Para Mostrar Listados.” por estas, dos nuevas Líneas de Codigo, tal como se muestra a continuación: // Menú Para Mostrar Listados. Menu:MenuItem(ns+"Consultar Listado","Listados por"+; " Varios Sistemas.",{|oSender|::BusBaseDatos(2,,,)}) // Línea Modificada.

Page 88: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 88

El resto de Codigo del Menú, debe de quedar todo tal como estaba, en nuestra Práctica Anterior. ***************************************************************************

Busca Base de Datos. A continuación vamos a Modificar, una de las opciones del Modulo Buscar la Base de Datos, tal como se muestra a continuación: elseif x=2 ::ListaImpri(1) // Línea Modificada. El resto de Codigo de este Modulo, debe de quedar todo tal como estaba, en nuestra Práctica Anterior. ***************************************************************************

Nueva Ventana Listados. A continuación vamos a construir la Nueva Ventana, para mostrar los Listados, así para la construcción 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 continuación: /* * Modulo Para LLamar a los Listados. */ Method ListaImpri(x) Class TPrincipal // Nueva Función. Local venta, String, Cap1, Cap2, Cap3 Cap1:=Space(76)+'Listado por Número de Codigo' Cap2:=Space(76)+'Listado por Orden Alfabético' 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 Opción 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

Page 89: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 89

if x=1 // Consultar Listado Normal. String:Header := {"Codigo","Titulo","1º Actor","2º Actor","Tema",; "Dirección","Año","Distribución"} 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 Alfabéticamente. ::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 Módulo Para Mostrar Listados, el cual deberá de quedar tal como se muestra a continuación: /* * Modulo Para Mostrar Listados. */ Method Listados(tr,va) Class TPrincipal // Función Modificada. 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})

Page 90: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 90

EndIf FiPelicu->(DbSkip()) EndDo Close Data tr:Items := aArray return nil *************************************************************************** Una vez terminada esta Practica, solo nos queda colocar los nuevos módulos y las modificaciones hechas en los módulos, que ya teníamos 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 opción “Listados”, del menu principal y se nos presentara la Ventana de los Listados, con cuatro Botones para poder consultar los Listados, automáticamente de tres formas distintas, sin tener que Salir al Menú Principal. Como abran podido comprobar, en esta Práctica hemos mejorado, mucho la forma de presentar el Listado y también 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í también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

Page 91: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 91

Practica - 17ª

Modificar Imprimir Listados. En esta práctica vamos a Reconstruir, todo el sistema de Imprimir los Listados, así que empezaremos por Reconstruir el Menú Principal.

Menú Principal. A continuación seguiremos configurando el Menú Principal, en donde le sustituiremos todas las líneas de Código, del “Menú Para Imprimir.” que configuran, la Impresión de los Listados, por estas dos nuevas Líneas de Codigo, tal como se muestra a continuación: // Menú Para Imprimir. Menu:MenuItem(ns+"Imprimir","Imprimir Fichas o Listados.") Menu:BeginMenu() Menu:MenuItem("Imprimir Fichas","Imprimir Fichas de "+; "Películas.",{|oSender|::BusBaseDatos(1,5,,2)}) Menu:Separator() Menu:MenuItem("Imprimir Listados","Imprimir los Listados",; // Nueva Línea. {|oSender|::BusBaseDatos(3,,,)}) // Nueva Línea. Menu:EndMenu() El resto de Codigo del Menú, debe de quedar todo tal como estaba, en nuestra Práctica Anterior. ***************************************************************************

Busca Base de Datos. A continuación vamos a Modificar, una de las opciones del Modulo Buscar la Base de Datos, tal como se muestra a continuación: elseif x=3 ::ListaImpri(2) // Línea Modificada. El resto de Codigo de este Modulo, debe de quedar todo tal como estaba, en nuestra Práctica Anterior. ***************************************************************************

Nueva Ventana Listados. A continuación vamos a seguir Configurando, el Modulo que llama a los Listados para que nos muestre los Listados y a demás, que nos los mande a la Impresora, así que lo primero que vamos hacer, será añadirle dos nuevas variables Locales, tal como se muestra a continuación: /* * Modulo Para LLamar a los Listados. */ Method ListaImpri(x) Class TPrincipal Local venta, String, Cap1, Cap2, Cap3, va, tr:=0 // Línea Modificada.

Page 92: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 92

Seguidamente le añadiremos una nueva Opción, en el IF/EndIF del Camption de la Ventana, tal como se muestra a continuación: // 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 Opción Para ver el Listado' elseif x=2 // Nueva Opción. venta:Caption:=Space(68)+'Escoja una Opción Para Imprimir el Listado’ endif A continuación también, le vamos ha añadir una nueva Opción, en IF/EndIF de la Configuración de la Ventana, tal como se muestra a continuación: // 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",; "Dirección","Año","Distribución"} 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 Opción. // Consultar Listado Para Imprimir. String:Header := {"Codigo","Titulo","Tema","Dirección"} 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 también le a añadiremos, 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 continuación: elseif x=2 ::CrearBoton(venta,36,475,120,23,9,"Listado por Codigo",; // Nuevo Boton. {|oSender|venta:Caption:=Cap1,tr:=1,va:='CO',; ::Listados(String,'CO',2)}) ::CrearBoton(venta,184,475,120,23,9,"Listado por Alfabeto",; // Nuevo Boton. {|oSender|venta:Caption:=Cap2,tr:=2,va:='TN',; ::Listados(String,'TN',2)}) ::CrearBoton(venta,334,475,120,23,9,"Listado por Temas",; // Nuevo Boton. {|oSender|venta:Caption:=Cap3,tr:=3,va:='TE',; ::Listados(String,'TE',2)})

Page 93: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 93

::CrearBoton(venta,484,475,120,23,9,"Imprimir Listado",; // Nuevo Boton. {|oSender|::PrintListados(tr,va)}) ::CrearBoton(venta,632,475,120,23,9,"Salir de Imprimir",; // Nuevo Boton. {|oSender|Venta:Close(),Venta:Destroy()}) endif El resto de Codigo de este Modulo, debe de quedar todo tal como estaba, en nuestra Práctica Anterior. ***************************************************************************

Modificar Listado. Por ultimo en esta práctica, vamos a seguir configurando este Modulo, añadirle una nueva Opción, para que nos muestre el Listado, antes de mandarlo a la Impresora, el cual deberá de quedar tal como se muestra a continuación: /* * 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 Opción. 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 módulos y las modificaciones hechas en los módulos, que ya teníamos creados en las prácticas 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 opción “Imprimir”, del menu principal y pulsar, en la opción “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

Page 94: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 94

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 Alfabético” 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 Práctica también hemos mejorado, mucho la forma de Imprimir el Listado y también 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 teníamos el Listado Impreso, no sabíamos exactamente lo que habíamos Imprimido. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo.

Page 95: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 95

Practica - 18ª

Menú Principal. En esta Práctica seguiremos configurando el Menú Principal, en donde le vamos Colocar, una Barra de Iconos, para hacer más atractiva su presentación y así también parecerá, mucho más Profesional.

Declaración de Métodos. Empezaremos esta Práctica, terminando de configurar, la declaración de Clases, en donde le añadiremos una nueva Línea, para declarar un nuevo Método. tal como se muestra a continuación: Method BotonBarra // Nueva Línea. El resto de la Declaración de Métodos, debe de que tal como la teníamos configurada en la Práctica anterior. ***************************************************************************

Método Boton Barra. Seguidamente vamos a construir un nuevo Método, el cual nos servirá para terminar de configurar el Menú Principal. Para la construcción de este Método, 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 continuación: /* * Método 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 => Ventana o Modulo donde debe de trabajar este método. crHandPoint => Nombre del Cursor en forma de mano. clOlive => Variable de Color. nb => Nombre del Bitmap a mostrar. cm => Comentario que se mostrara al colocar el cursor sobre el Bitmap. ac => Acción a realizar al pisar el Bitmap. ***************************************************************************

Page 96: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 96

Menú Principal. Seguidamente vamos a terminar de configurara el Menú Principal, así que con la Función que hemos creado anteriormente, vamos a colocar los diferentes Bitmaps, en la Barra de Opciones del Menú Principal, tal como se muestra a continuación: // Declaración 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 teníamos configurado en la Práctica anterior. ***************************************************************************

Copiar Bitmaps a la Carpeta Res A continuación copiaremos los Bitmaps, que acompañan a esta Práctica en la Carpeta Res, al directorio C:/C3/Bin/Res de nuestro Ordenador. ***************************************************************************

Configurar Fichero Samples.rc Como ultimo ejercicio de esta Práctica, vamos a configurar el fichero “Samples.rc”

Page 97: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 97

así para configurar este fichero, lo podemos abrir con nuestro Editor de Texto ascil, o con el Bloc de Notas de Windows y le añadiremos las siguientes líneas, tal como se muestra a continuación: Nueva Bitmap "Res\Nueva.bmp" Corregir Bitmap "Res\Corregir.bmp" Eliminar Bitmap "Res\Eliminar.bmp" Consultar Bitmap "Res\Consultar.bmp" Impresora Bitmap "Res\Impresora.bmp" Salir Bitmap "Res\Salir.bmp" Ayuda Bitmap "Res\Ayuda.bmp" El resto del fichero debe de quedar tal como estaba, antes de añadirle estas líneas de Código. Cuando hayamos terminado de configurar estas líneas, 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 Opción del Programa. Como abran podido comprobar, en esta Práctica también hemos mejorado, mucho la presentación de nuestro Menú Principal, así como la forma de acceder, a cualquier Opción del Programa. Como en todas las prácticas, aquí también se incluyen los ficheros “Do.bat” “ArchiPel.mak”, “Samples.rc” y el archivo “ArchiPel.exe”, para que puedan comprobar el resultado de esta practica. También se incluye el archivo “ArchiPel.prg”, para que puedan ustedes consultarlo mientras realizan las practicas montando el suyo. NOTA: Con esta última Práctica doy por terminado, este pequeño Cursillo el cual espero, que haya sido de utilidad, para todos aquellos que quieren o están empezando, a utilizar el nuevo Compilador “C3” de 32 bits . Desde aquí, les doy mi agradecimiento, a los compañeros: Manuel, Xevi, Truesoft y especialmente a Bruno Cantero, por haberme ayudado a corregir, algunos errores y al mismo tiempo animado, a escribir este pequeño cursillo, a todos ellos un cordial saludo. El autor: Francisco Guillamon Bou

Page 98: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 98

Page 99: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 99

Índice de contenidos Nota del Autor ..................................................................................................... 3 Practica 1ª ............................................................................................................... 4 Configuración del entorno de trabajo .................................................................... 4 Practica 2ª ....................................................................................................... 7 La Ventana Principal ............................................................................................. 7 Modulo de Cabecera ...............................................................................................7 Inicio del Programa ................................................................................................7 Declaración de Métodos ..........................................................................................7 Modulo Principal ....................................................................................................8 Practica 3ª ......................................................................................................... 9 El Menú Principal .................................................................................................. 9 Declaración de Métodos ..........................................................................................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 Declaración de Métodos ........................................................................................13 Modulo Principal ..................................................................................................14 Barra de Estado del Menú .....................................................................................14 Practica 5ª ................................................................................................................17 Inicio del Programa ..............................................................................................17 Declaración de Métodos ........................................................................................17 Modulo Principal ..................................................................................................18 La Base de Datos (*.DBF) ....................................................................................18 El Índice (*.CDX) ................................................................................................19 Practica 6ª ................................................................................................................21 Declaración de Métodos ........................................................................................21 Menú Principal (Altas) .........................................................................................21 Buscador Base de Datos ........................................................................................21 Ventana Para Mensajes .........................................................................................22 Configurar Mensajes .............................................................................................23 Contador de Tiempo .............................................................................................24 Practica 7ª ................................................................................................................27 Declaración de Métodos ........................................................................................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 Declaración de Métodos ........................................................................................35 Buscar Fichas .......................................................................................................35 Construir Ficha Vacía ...........................................................................................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

Page 100: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 100

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 Declaración de Métodos ........................................................................................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 Declaración de Métodos ........................................................................................63 Menú Principal .....................................................................................................64 Mostrar Listados ...................................................................................................64 Practica 13ª ..............................................................................................................67 Imprimir ...............................................................................................................67 Declaración de Métodos ........................................................................................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 Declaración de Métodos ........................................................................................77 Menú Principal .....................................................................................................77 Busca Base de Datos .............................................................................................78 Imprimir Listado ..................................................................................................78 Líneas 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

Page 101: Curso de C3.pdf

© La Antorcha de los Grandes Exitos (Fraguibo) [email protected] Página: 101

Nueva Ventana Listados .......................................................................................91 Modificar Listados ...............................................................................................93 Practica 18ª ..............................................................................................................95 Menú Principal .....................................................................................................95 Declaración de Métodos ........................................................................................95 Método Boton Barra .............................................................................................95 Configurar Menú Principal ....................................................................................96 Carpeta Res ..........................................................................................................96 Configurar Fichero Samples.rc ..............................................................................96