FoxPress – Octubre 2004

 

      FTP con barra de progreso

 

 

Por la Redacción de Foxpress                                                                               Ejemplo.zip

 

 

 

        Cada vez se usa más Internet, no sólo para realizar consultas o compras sino para interactuar con otros usuarios o programas y por eso los usos de FTP ya no solo es para bajarse ficheros o canciones, sino para mantener actualizados los programas y esto es algo que se va a ir generalizando cada vez más.

 

        Uno de los problemas recurrentes del FTP es que pueda mostrar una barra de progreso de forma que el usuario pueda saber en qué estado se encuentra su descarga y esperar pacificamente a que acabe antes de que empiece a aporrear todo tipo de teclas.

 

        Para este ejemplo vamos a usar dos cosas:

 

-              El ActiveX de Barra de Progreso de Microsoft que se te instala junto con el Fox.

-              El ActiveX gratuito de chilkatsoft para FTP que te lo puedes bajar de http://www.chilkatsoft.com/ftp-activex.asp

 

Primero veamos como funcionan aisladamente estos dos controles.

 

 

Barra de Progreso de Microsoft

 

        Siguiente la vieja máxima de que más vale un buen código que 1000 palabras, aquí te trascribo el código más simple  que he encontrado. Si te lo copias y pegas en un programa de Fox verás perfectamente su funcionamiento.

 

PUBLIC oForm
oForm = CREATEOBJECT("Form")   && Create a form

* The following line adds the ProgessBar control to the form

oForm.ADDOBJECT("OleProgress", "OLEControl", "COMCTL.ProgCtrl.1")

* The following lines specify the location
* and size of the ProgressBar control

oForm.OleProgress.Top = 5
oForm.OleProgress.Left = 5
oForm.OleProgress.Height = 25
oForm.OleProgress.Width = 289

oForm.OleProgress.Visible = .T. && Display the ProgessBar
oForm.Visible = .T. && Display the Form

FOR i = 1 to 10
  oForm.OleProgress.Value=i*10 && Update the ProgressBar
  = INKEY(1)   && Wait one second
ENDFOR

 

 

Activex de FTP de Chilkatsoft

 

        Visto lo fácil que es el uso del control de la barra de progreso, vamos a mirar este otro control que también observarás que es muy fácil de usar.

 

        Una vez descargado, instálalo en tu máquina ejecutando el instalador que te has bajado. En realidad el fichero es una DLL que te deberás de preocupar de incorporar a tu instalador para que se pueda usar por tus clientes.

 

        Una vez instalado el código para usarlo es:

 

oFTP = CREATEOBJECT('chilkatFTP.chilkatFTP')

oFTP.HostName = “miHost” (por ejemplo: ftp.microsoft.com)

oFTP.Username = “miAlias

oFTP.Password = “miClave”

 

WAIT WINDOW 'Conectando... ' NoWait

success = oFTP.Connect()

If (success = 0) Then

   ? "Failed to connect"

    Return

ENDIF

WAIT WINDOW 'Espere... Por Favor' NoWait

 

lnResult = oFTP.GetFile("actualiza.arj", "actualiza.arj")

IF lnResult = 0

    MESSAGEBOX('No se encuentra el fichero',16,'Atención')

ELSE

    MESSAGEBOX('Proceso Realizado',48,'Atención')

ENDIF

oFTP.Disconnect()

CLEAR WINDOW

RETURN

 

Ya ves que es bastante fácil. La función GetFile te indica el nombre del fichero remoto y el nombre que tiene que tener en local.

 

Si no tienes un servidor FTP disponible, te puedes “montar” uno en tu máquina instalando el IIS. Si no tienes ganas de instalarlo, te puedes bajar un FTP Server Open Source como el Filezilla (en la página de Descargas, asegúrate de que bajas el servidor y no el cliente que también está ahí disponible).

 

 

Uso conjunto del control de FTP con la Barra de Progreso

 

 

Para esto hacemos lo siguiente:

 

1.- Creamos un proyecto

 

2.- Nos creamos una clase basada en Form con el nombre frmbarra y guardada en un fichero que se puede llamar oactivex.

 

3.- En la nueva clase frmbarra le ponemos el ActiveX llamado Microsoft ProgressBar:

 

 

        A continuación modificamos una serie de propiedades del formulario para quitarle todo el aspecto de formulario que tiene. Dejaremos las siguiente propiedades como sigue:

 

AlwaysOntoP = .T.

AutoCenter = .T.

Caption = (None)

Closable = .F

ControlBox = .F.

MaxButton = .F.

MinButton = .F.

Movable = .F.

 

        Y nos quedará algo parecido a esto:

 

 

4.- Guardamos todo esto y vamos a por lo siguiente.

 

5.- Nos creamos un formulario nuevo que se puede llamar Form1 y le pegamos encima el control de FTP y un botón de comandos.

 

        El control de FTP lo puedes ver en:

 

 

El formulario nos quedará algo parecido a esto:

 

 

El código a poner en el botón es el siguiente:

 

ThisForm.oFTP.HostName = 'ftp.microchoft.com’

ThisForm.oFTP.Username = 'Billy’

ThisForm.oFTP.Password = 'Ghost’

_vfp.AutoYield = .F.

 

SET DEFAULT TO c:\ejemplo

 

SET CLASSLIB TO oActiveX.vcx ADDITIVE

 

ocontenedor = CREATEOBJECT('frmbarra')

 

oContenedor.oProgBar.Visible = .T. && Display the ProgessBar

oContenedor.activate()

 

WAIT WINDOW 'Conectando... ' NoWait

success = thisForm.oFTP.Connect()

If (success = 0) Then

   ? "Failed to connect"

ELSE

ENDIF

WAIT WINDOW 'Espere... Por Favor' NoWait

oContenedor.visible = .T.

 

ThisForm.oFTP.GetProgress(0)

 

lnResult = Thisform.oFTP.GetFile("actualiza.arj", "actualiza.arj")

 

IF lnResult = 0

    MESSAGEBOX('No se encuentra el fichero',16,'Atención')

ELSE

    ? 'OK'

ENDIF

 

Thisform.oFTP.Disconnect()

 

Asuntos importantes a tener en cuenta es la instrucción:

 

_vfp.AutoYield = .F.

 

También tienes que poner bien el path y las claves de acceso y los nombres de los ficheros, pero por lo demás ya ves que es más fácil de lo que parece.

 

 

 

FoxPress – Octubre de 2004

© 2004 FoxPress. All rights reserved