Continuando con la publicación de nuevos componentes para Xailer 2, hoy le toca a TRoundButton y TRoundGroupBox.
Archivo del Autor: José Lalín
Nuevos componentes para Xailer 2
Tras la publicación de la versión 2 con soporte de componentes (Post) y ya que empieza a haber movimiento alrededor de la creación de componentes externos he pensado que es un buen momento para publicar la mayoría de componentes que he desarrollado en los últimos dos años.
Actualización de librerías
Tras unas semanas usando Xailer 2.0 en producción y viendo que hay un gran porcentaje de usuarios que se han actualizado y aprovechando que tenemos otros muchos nuevos de esta versión (bienvenidos a todos), he decidido publicar las actualizaciones de algunas librerías que sólo estaban disponibles para la versión 1.9 y anteriores.
Apagar el sistema
A raíz de un mensaje de Dionisis en el foro en el que comentaba que necesitaba reiniciar un ordenador desde su aplicación surge este componente para Xailer que encapsula la funcionalidad de Windows para lograr este cometido de un modo sencillo y se encarga de hacer las comprobaciones necesarias para cada plataforma.
Convertir formatos de imágenes
Varios miembros del foro se han visto en la necesidad de tener que convertir imágenes a diferentes formatos y preguntan si es posible hacerlo directamente con Xailer y sin tener que recurrir a utilidades externas, DLLs, etc.
Usando FTP
Hace algún tiempo, Carlos Ortiz preguntaba si había un modo sencillo de descargar y/o subir archivos a un FTP.
Coincidiendo con Carlos en que el uso de los métodos :OpenFile(), :ReadFile() y :WriteFile() del componente TFtp de Xailer no es el mejor camino para un usuario nuevo con la herramienta, me dispuse a escribir un componente que lo haga de un modo un poco más amigable, donde sólamente sea necesario especificar los datos de la conexión, el nombre del archivo y poco más.
Las propiedades de este componente son:
-
PROPERTY cRemoteFile: el nombre del archivo en el servidor FTP.
PROPERTY cLocalFile: el nombre del archivo local.
PROPERTY cUser: el nombre de usuario para acceder al FTP.
PROPERTY cPassword: la contraseña.
PROPERTY cServer: el servidor FTP. Puede indicarse tanto con su nombre (ftp.myserver.com) como con una dirección IP (127.0.0.0).
PROPERTY nTransferType: especifica si vamos a hacer una transferencia binaria o ASCII. Los valores que puede tomar esta propiedad son ftpBINARY o ftpASCII.
PROPERTY nBuffer: el tamaño del buffer de lectura y/o escritura que se va a utilizar durante la subida o bajada del archivo. Su valor por defecto es de 16 Kb.
Los eventos:
-
EVENT OnError( oSender, nError, cError )
Este evento nos notificará cuando alguna operación falle del código del error y su descripción.
En caso de que el error sea un error remoto, el valor de nError será mayor o igual que 12.000 y cError nos informará en casi todos los casos de la descripción, pero si el error se debe a un fallo local nError tendrá el último valor devuelto por FError() y cError estará vacío.
EVENT OnStart( oSender, nFileSize )
Se lanza cuando se va a empezar a subir o bajar un archivo y nos informa de su tamaño total en bytes. Es útil si se quiere actualizar una barra de progreso o informar al usuario del tamaño del archivo.
EVENT OnComplete( oSender )
Se lanza cuando la subida o descarga del archivo termina.
EVENT OnProgress( oSender, nBytes )
Cada vez que se envía o recibe un bloque de datos se lanza este evento y se informa en nBytes de la cantidad de datos leídos. Al igual que en OnStart(), sirve para actualizar una barra de progreso y/o informar al usuario de cuántos bytes se han leído/enviado.
Los métodos:
-
METHOD Upload()
METHOD Download()
Sirven para subir y descargar un archivo respectivamente.
Un pequeño ejemplo de cómo descargar un archivo.
DATA nRead INIT 0
oSender:lEnabled := .F.
WITH OBJECT TFTPFile():Create( Self )
:cRemoteFile := "tests/test.zip"
:cLocalFile := "c:test.zip"
:cServer := "ftp.myserver.com"
:cUser := "User"
:cPassword := "Password"
:OnStart := {|oSender, nSize| ::oLabel2:cText := ToString( nSize ) + " bytes" }
:OnProgress := {|oSender, nBytes| ::nRead += nBytes, ::oLabel1:cText := ToString( ::nRead ) }
:OnComplete := {|oSender| ::oLabel2:cText := "¡ Descargado !" }
:Download()
//:Upload()
:Destroy()
END
oSender:lEnabled := .T.
Para proba el test, sólo hay que configurar los datos de la conexión con unos reales y tras compilar/ejecutar ya podemos empezar a subir o descargar archivos desde nuestro FTP favorito.
En el ZIP está el fuente del componente y la librería lista para usar.
Saludos,
José Lalín
Capturar una imagen de un formulario
Varios usuarios han tenido la necesidad de hacer capturas de pantalla desde su aplicación, así que me he puesto a ello y he escrito un pequeño componente para hacerlo directamente desde Xailer.
Sigue leyendo
No todo es programar
Mientras hacía limpieza y archivaba algunos viejos proyectos hechos con Xailer, me he encontrado algo que hice hace mucho tiempo y que había olvidado completamente.
Espero que os guste.
Descargar xatris.zip
Controles nativos de Vista en Xailer
Vista introduce un nuevo tipo de control llamado CommandLink que se comporta como un botón estándar, pero pretende hacer más agradable la experiencia del usuario.
Veamos una imagen:
Se puede apreciar cómo el control muestra una imagen, un texto principal y una breve descripción de su cometido.
Para entender cómo funciona, nada mejor que un poco de código que crea un TCommandLink como el que se ve en la imagen anterior:
WITH OBJECT TCommandLink():New( oForm )
:cText := "CommandLink"
:cNote := "This is the new TCommandLink control"
:lShield := .T.
:Create()
END
En el archivo vistacommandlink.zip está todo el código fuente del control, tan sólo hay que compilarlo y añadir el OBJ al proyecto en el que se quiera utilizar.
Un saludo.
Correo SMTP con Blat y Xailer
En estas últimas semanas se ha preguntado varias veces en los foros si es posible utilizar Blat para enviar correo desde Xailer, así que me he decidido a pulir y publicar una pequeña librería que empezé en el mes de enero a partir de un trabajo inicial de José Luis Capel
Sigue leyendo