PDF de programación - Programando un front-end con Gambas

Imágen de pdf Programando un front-end con Gambas

Programando un front-end con Gambasgráfica de visualizaciones

Publicado el 6 de Abril del 2017
1.560 visualizaciones desde el 6 de Abril del 2017
173,7 KB
7 paginas
Creado hace 15a (21/01/2009)
Programando un front-end con Gambas

Prof. Mileti, P.

Gambas es un excelente lenguaje y permite, entre tantas otras cosas, reutilizar aplicaciones de consola.
A lo largo de este artículo veremos como programar un front-end para la aplicación de consola
ImageMagick.

Un front-end no es mas que una interfaz gráfica de usuario cuya finalidad es recolectar los datos necesarios
para activar ciertos comandos de consola. Se podría decir que un usuario de un programa del tipo front-end es
un usuario que ejecuta comandos de consola sin escribirlos o sin ser consciente de ello.

Todos sabemos que en el mundo GNU/Linux existen potentes aplicaciones de consola, pero el
desconocimiento sobre como utilizarlas hace que muchos usuarios las desechen, buscando alternativas gráficas
a ellas. Entonces, les propongo en este artículo, tomar una aplicación de consola y dotarla de interfaz gráfica
para facilitar su uso.

Sobre ImageMagick

Según Wikipedia ImageMagick es una aplicación que sirve para crear, editar y componer imágenes, puede
leer, convertir y guardar imágenes en una gran variedad de formatos. Si consultamos la web oficial de
ImageMagick veremos que promocionan su software como una aplicación que típicamente es utilizada desde
la linea de comandos. Para instalar ImageMagick en distribuciones del tipo Debian no hay mas que abrir la
consola y escribir:

sudo apt-get install imagemagick

La propuesta de este apunte

Supongamos ahora que tengo una imagen del tipo bitmap (vamos a llamarla unaimagen.bmp) y la quiero
convertir a formato PNG (con el nombre unaimagen.png). Una posible solución, si tengo ImageMagick
instalado, es ejecutar desde consola:

convert unaimagen.bmp unaimagen.png

Ahora, que pasa si tengo en un directorio 200 fotos en formato BMP y quiero elegir, mientras las voy

viendo en pantalla, cuáles convertir...

Pensaron ya como hacerlo? Tal vez coincidan conmigo, creamos un front-end en gambas y listo.

Creando el front-end para convertir imágenes.

Iniciamos Gambas y creamos un nuevo proyecto del tipo aplicación gráfica. Una vez creado el proyecto, les

propongo que diseñen el siguiente formulario:

Se trata de un formulario compuesto por dos controles ComboBox, un control FileChooser, un DirChooser,

un Button y el resto son controles Label.

Los controles FileChooser y DirChooser se encuentran en la caja de herramientas bajo la solapa Dialog. El

resto de los controles se hallan en la solapa Form.

Ubicamos primero los ComboBox, a uno lo llamaremos (mediante la propiedad Name) CboOrigen y al otro
CboDestino. La propiedad List del ComboBox contiene los elementos de su lista desplegable. Ambos Combos
tendrán los mismos elementos. En este caso, los elementos serán los formatos de imagen que nuestro front-end
aceptará. Propongo entonces cargar los siguientes elementos en la propiedad List:

Otra propiedad que debemos modificar en los ComboBox es ReadOnly. Si ReadOnly es True el usuario solo
podrá seleccionar un elemento de la lista desplegable. Si ReadOnly es False el usuario podrá escribir lo que
desee en él. En este caso no es aconsejable que el usuario pueda escribir en ellos, así que le asignamos a
ReadOnly el valor True.

Llego el momento de agregar los controles FileChooser y DirChooser. El FileChooser lo vamos a usar para
que el usuario pueda visualizar y seleccionar los archivos que desea convertir. El DirChooser va a permitir
seleccionar el directorio en donde se guardaran las nuevas imágenes resultantes de la conversión. Dejamos el
mismo nombre por defecto para cada uno por ser lo suficientemente descriptivos a la hora de leer el código.

Por ultimo agregamos un control Button al que llamaremos BtnConvertir y por medio de la propiedad Text

colocamos en su interior la leyenda Convertir.

La interfaz gráfica de usuario ya está terminada, solo resta darle vida mediante código.

Codificando el front-end

En Gambas. al iniciar una aplicación se dispara el evento Form_Open, es aquí donde vamos a definir los
diferentes filtros del control FileChooser. Los filtros nos van a asegurar que sólo se muestren archivos que sean
del tipo BMP, JPG, PNG o GIF. Estos filtros serán aplicados cuando seleccionemos el tipo de imagen en el
control CboOrigen. Entonces, si en CboOrigen tenemos cuatro elementos, en la propiedad Filter del
FileChooser debemos tener cuatro filtros. La propiedad Filter espera recibir un array de string. Cada filtro se
crea pasando dos strings, el primer string es el fltro propiamente dicho y el segundo es la leyenda del fltro. Si
queremos tener dos filtros tendremos que pasar cuatro strings, si queremos tres filtros pasaremos seis strings,
y así se incrementan los strings de a dos por cada filtro que se agregue. Por eso, en nuestro caso, asignamos
en Filter cuatro pares de string separados cada uno ellos por comas. Vean como queda el evento Form_Open:

PUBLIC SUB Form_Open()
FileChooser1.Filter = ["*.bmp", "Imagenes BMP",
"*.jpg;*.jpeg", "Imagenes JPG",
"*.png", "Imagenes PNG",
"*.gif", "Imagenes GIF"]
FileChooser1.Multi = TRUE
CboOrigen.Index = 0
CboDestino.Index = 1
END

En el código anterior también indicamos que en el FileChooser esta permitido seleccionar múltiples
archivos (propiedad Multi) y que la opción predeterminada de CboOrigen es el primer elemento de la lista
(posición cero, BMP), mientras que la opción predeterminada para CboDestino, será el segundo elemento
(posición uno, JPG).

Ya tenemos perfectamente inicializada la aplicación, ahora pensemos a qué eventos debe responder nuestro
programa. Son solo dos lo eventos involucrados. Cuando el usuario seleccione el tipo de imagen que desea
convertir (por medio de CboOrigen), debemos activar el filtro correspondiente en el FileChooser y cuando se
pulse el botón Convertir se debe iniciar el proceso de conversión. Veamos como se programa el primer evento:

PUBLIC SUB CboOrigen_Click()
FileChooser1.FilterIndex = CboOrigen.Index
END

Simplemente indicamos qué elemento del array cargado en Filter deseamos activar. Justamente la posición
de cada filtro se corresponde con la posición de cada elemento del ComboBox. A eso apunta el código
anterior.

Llegó el momento de programar el segundo evento, el más importante, el que desencadena la conversión de
las imágenes seleccionadas. Los archivos que fueron seleccionados en el FileChooser están contenidos en un
array de string que podemos consultar mediante la propiedad SelectedPaths. Ahora, qué pasa si el usuario
pulsa Convertir y no ha seleccionado ningún archivo. En este caso deberíamos validar que existan archivos
seleccionados para convertir, lo podemos hacer consultando la cantidad de elementos de la propiedad
SelectedPaths mediante Count. Por otro lado, debemos evitar que el formato de origen sea el mismo al formato
destino, esto lo haremos verificando que la propiedad index de ambos combos no sean iguales. Lo dicho
anteriormente está programado en los dos primeros IF del siguiente código, en donde al detectar alguna de la
posibilidades planteadas, avisamos al usuario y salimos del evento.

PUBLIC SUB Button1_Click()
DIM archivo AS String
IF FileChooser1.SelectedPaths.Count = 0 THEN
Message.Error("Debe seleccionar los archivos a convertir.")
RETURN
END IF
IF CboOrigen.Index = CboDestino.Index THEN
Message.Error("El formato destino debe ser diferente al de origen.")
RETURN
END IF
ME.mouse = 150 ' puntero wait
Button1.Text = "Procesando..."
WAIT 0.1 ' para redibujar el formulario
FOR EACH archivo IN fileChooser1.SelectedPaths
Convertir(archivo)
NEXT
ME.mouse = 2 'volvemos al puntero por defecto
Button1.Text = "&Convertir"
Message.Info("Operación finalizada.")
END

Con Me.mouse cambiamos el puntero del mouse para que el usuario sepa que la aplicación está trabajando

y debe aguardar. Luego se cambia la leyenda del botón y se redibuja el formulario con la llamada a WAIT.

Lo genial del código anterior esta acá:

FOR EACH archivo IN fileChooser1.SelectedPaths
Convertir(archivo)
NEXT

La variable archivo es del tipo String, y a lo largo del FOR irá tomando el valor de cada uno de los
elementos de SelectedPaths. Sería algo así como decir: para cada archivo que está seleccionado en el
FileChooser1, llamar a un procedimiento que lo convierta. El procedimiento Convertir va a recibir como
parámetro un string que contendrá la ruta absoluta mas el nombre del archivo que se va a convertir.

La conversión la vamos a realizar dentro de un procedimiento llamado Convertir, lanzando un comando de

consola mediante la sentencia EXEC. Recuerdan que el comando era:

convert unaimagen.bmp unaimagen.png

El primer valor para el comando convert ya lo tenemos, será el parámetro que le pasemos al procedimiento
Convertir. Nos faltaría el segundo, el nuevo nombre que tendrá. Y aquí vamos a tener que programar un
poquito.

A partir del directorio destino seleccionado, el nombre del archivo que estamos convirtiendo y el nuevo
formato que tendrá, debemos crear el segundo parámetro para el comando convert. Tomemos el siguiente
ejemplo para que vean la dificultad que se presenta:

PUBLIC SUB Convertir(archivo AS String)
DIM nuevoNombre AS String
nuevoNombre = DirChooser1.SelectedPath & "/" & archivo & "." & LCase(CboDestino.Text)
EXEC ["convert", archivo, nuevoNombre] WAIT
END

Esto es lo que planteaba anteriormente, es simple y claro, pero tropezamos con que el parámetro archivo
contiene además la ruta del archivo origen, por ejemplo si selecciono una imagen de mi directorio home, la
variable archivo valdrá “/home/mil/10-12-08_2036.jpg” y para que el código anterior funcione debería valer
“10-12-08_2036”,
  • Links de descarga
http://lwp-l.com/pdf2663

Comentarios de: Programando un front-end con Gambas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad