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