Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



martes, 30 de septiembre de 2014

Web Constructor: Una pagina web hecha en 10 minutos


Es este articulo, os dejo un vídeo donde explico como usar el Web Constructor que tiene la página de hosting http://www.dondominio.com/, es la forma más sencilla de poder hacer una página web vosotros mismos.

No necesitáis ningún conocimiento de html ni de css, ni javascript, solo tenéis que seguir  los pasos para elegir plantilla que más os guste, crear la estructuras de páginas que tendrá vuestro sitio web  y luego rellenar con textos e imágenes cada página.

En la parte superior podéis ver los pasos o etapas para crear la página web:



Y en la parte inferior tendréis los botones para moveros entre las distintos pasos:



Aquí os dejo el video tutorial:




Como verás, en muy sencillo modificar o añadir más páginas, y para hacer sitios web normales, el sistema del web constructor hace bien su cometido


Si quieres paginas web "a medida" o muy personalizadas, ya hay que emplear lo que se llama CMS (gestores de contenidos) o directamente hacerlas "a pelo" con Html5+CSS+Javascript+ etc...


Saludos

Jsbsan


Generador de diagramas de secuencia. Front End de pic2plot

Generador de diagramas de secuencia. Front End de pic2plot


Este es un simple Front End para usar el comando pic2plot, con el cual podemos generar diagramas de secuencia. Al instalar estre front end, se instalaran los programas necesarios:
- el pic2plot, que generar el diagrama, 
- el evince, que es un visor de archivos .ps, 
- y el archivo de configuración de diagramas secuenciasles (secuence.pic)

Para codificar el diagrama de secuencia, hay que seguir los ejemplos que se explican en la página http://www.umlgraph.org/doc

A continuación una captura del programa y ejemplo del diagrama que genera:






Descarga del programa:
Descargar


Para más información de como codificar el diagrama de secuencia visita los ejemplos de las siguiente páginas web:
http://www.umlgraph.org/doc/uml-appa.html
http://www.umlgraph.org/doc/dist-52.html
http://www.umlgraph.org/doc/uml-182.html
http://www.umlgraph.org/doc/uml-184.html
http://www.umlgraph.org/doc/uml-71.html
http://www.umlgraph.org/doc/dns.html
http://www.umlgraph.org/doc/gui-db.html

Fuente donde encontre  como usar el programa en la linea de comando:
http://ubuntulife.wordpress.com/2007/05/25/crear-diagramas-de-secuencia-con-pic2plot/



domingo, 28 de septiembre de 2014

Gambas3: Me y Super. Ejemplo de uso

Gambas3: Me y Super. Ejemplo de uso

En este artículos  hablaremos del uso de ME y de SUPER. En la documentación oficial explica que son:

ME

Devuelve una referencia al objeto actual.
ME es obligatorio cuando quiere llamar a un método heredado, o acceder a una propiedad o heredada.


SUPER

Devuelve una referencia al objeto actual que empleará la implementación de los símbolos de la clase padre.

Como veis con ME hacemos referencia al objeto actual. Si estamos en el código del formulario, y lo queremos cerrar, usamos esta orden:

me.close()

De esta forma,  estamos cerrando el formulario actual.

Ejemplo:
Os dejo un ejemplo de uso de Super y Me.

Se trata de tener dos clases, una clase padre llamada Soldado y otra que le herede llamado "SoldadoAmetralladora"


Código de la clase Soldado:
' gambas class file

Public Sub dispara()

Print "me prepararo para disparar...."

Me.dibujadisparo()

End

Public Sub dibujadisparo()

Print "---- dibuja una piedra volando por la pantalla -------"

End


Código de la clase SoldadoAmetralladora:
' gambas class file

Inherits Soldado
' gambas class file
Private arma As String = "ametralladora"

Public Sub dispara()

Print "me prepararo para disparar...."

Me.dibujadisparo()

End

Public Sub dibujadisparo()

If arma = "ametralladora" Then
Print "---- dibuja disparando una ametralladora -------"
Else
Super.dibujadisparo()
Endif

End

Public Sub quitoarma()

arma = "sin ametralladora"

End


Y el programa principal:
Public Sub Form_Open()

Dim soldadotmp As New Soldado
Dim soldadoAmetralladora As New SoldadoAmetralladora

Print soldadotmp
soldadotmp.dispara()

Print SoldadoAmetralladora
SoldadoAmetralladora.dispara()

Print "--------Quito arma -----"
soldadoAmetralladora.quitoarma()

soldadoAmetralladora.dispara()

End

Lo que hace la aplilcación es crear un la clase Soldado (soldadotmp), y luego crear otra del tipo SolddoAmetralladora (que hereda de la clase Soldado).

Cuando ejecutamos el método SoldadoAmetralladora.dispara(), ejecuta las ordenes que tiene el método dispara(). Este método llama a "dibujadisparo". Que según un el valor de la variable arma, escribe "dibuja dispara  una ametralladora" o hace la llamada al método dibujadisparo() de la clase padre, usando SUPER


Resultado:
El resultado de la aplicación es este:
(Soldado 0x8879b54)
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------
(soldadoAmetralladora 0x8879c14)
me prepararo para disparar....
---- dibuja disparando una ametralladora -------
--------Quito arma -----
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------

Enlace de descarga del ejemplo: enlace de descarga a box.com


Para más información:
http://gambaswiki.org/wiki/lang/me?l=es
http://gambaswiki.org/wiki/lang/super?l=es
http://gambaswiki.org/wiki/cat/object?l=es
Foro Gambas-es.org: Un Detalle De La Herencia Entre Clases Y Prioridad De Uso De Métodos



sábado, 27 de septiembre de 2014

Curso Creación y retoque de imágenes con software libre. Últimas Tareas. Filtros G'MIC

Curso Creación y retoque de imágenes con software libre. Últimas Tareas




Os comenté en otra entrada, enlace ,  el curso de creación y retoque de imágenes con software libre que se estaba realizando en Miriada X. Os dejo mis últimas tareas realizadas, que ha sido aplicar 3 filtros distintos a 3 imágenes usando el complemento G'MIC ( http://gmic.sourceforge.net/gimp.shtml )



Os dejo también un video tutorial para explicar como conseguir un retrato del tipo Warhol



Resolver: ERROR: #2: Cannot load class 'XXX': Bytecode too recent.Please upgrade Gambas


Resolver: ERROR: #2:
Cannot load class 'XXX':
Bytecode too recent.

Please upgrade Gambas



Este error se produce cuando intentamos ejecutar un programa hecho en gambas3 cuando la versión del gambas instalado en nuestro ordenador es inferior a la que necesita el programa. Hacer notar que este mensaje solo se muestra en consola, si lo intentamos ejecutar desde menu o desde algún lanzador no muestra ningún mensaje.

En la mayoria de las distribuciones, te puedes instalar gambas3 en la version 3.1.1
Pero esta versión ya es bastante antigua y se han corregido muchos errores, en las versiones siguientes.

Para actualizar la versión de gambas, depende un poco de la distribución que tengas:

Por ejemplo:

Para Debian, tienes que usar el repositorio SID (lo explique en esta entrada http://jsbsan.blogspot.com.es/2014/07/actualizacion-gambas-354-en-el.html)

Para Ubuntu y Derivadas:
Los paquetes binarios de Gambas3 más recientes se pueden encontrar en un PPA creado y mantenido por el 'Gambas Team'.
Ello te permite instalar la versión estable más reciente de Gambas3 sin la necesidad de compilar.
Primeramente añade la PPA a tu fichero sources.list. Abre un terminal y escribe:
$ sudo add-apt-repository ppa:gambas-team/gambas3

Luego actualiza las fuentes e instala Gambas3:
$ sudo apt-get update $ sudo apt-get install gambas3

Tras la instalación, encontrarás Gambas3 en el menú 'Desarrollo' o 'Programación'.
Ver tambien enlace:

Saludos

viernes, 26 de septiembre de 2014

TPV: "Cortes" Añadido Gestión de Almacén



TPV: "Cortes" Gestión de Peluquería y pequeñas tiendas con Software Libre

Añadido Gestión del Almacén



El 19 de agosto, os escribí sobre este programa ( enlace ). Hoy os traigo una nueva versión, donde se ha añadido la gestión de almacén.

Ahora se le añade la opción de añadir "Gestión de Almacén", donde podemos gestionar los albaranes del almacén. Divididos en 3 tipos: Entrada, Rotura  y Robo

 Con esto, lo  podemos llevar la contabilidad de existencias del almacén, los productos que se han comprado al proveedor, y los que se han deteriorado (rotura) o directamente robado. La idea es de poder llevar una inventario del almacén.

Ademas en la nueva versión podemos imprimir dos informes relativos al almacén donde obtenemos la información de: los productos que hemos:
- Comprado al nuestro proveedor: suma de albaranes de entrada
- Los productos vendidos: esto es obtenido de los recibos de venta a los clientes
- Roturas: son albaranes de almacén donde apuntamos productos que han sufrido rotura o deterioro
- Robos: sol albaranes de almacén donde apuntamos productos robados.
- Existencia en el almacén: Hace la operación de sumar  las entradas menos lo vendido, roturas y robas, para obtener cuantos productos de cada tipo, tenemos en el almacén.



En este video os lo explico todo:




En la página web del proyecto podeis encontrar más información y os lo podeis descargar gratuitamente:


Nota:
No se trata de una demo, el programa es completamente funcional.

Saludos

jueves, 25 de septiembre de 2014

Mensa: Enviar correos automáticamente....

Mensa: Enviar correos automáticamente....


Mensa es un programa que envía correos electrónico automáticamente. Organiza los correos en 3 carpetas (por enviar, enviados y otros). Nos permite organizar nuestra agenda de envíos de mensajes, por fecha. Y Una vez enviados, se guardan, para poder luego reenviarlos o reusarlos en otros nuevos mensaje.

Lo podemos instalar como aplicación de inicio, para que cuando encendamos el ordenador, automáticamente mande los mensajes que tiene programados.

Esta seria la forma de configurarlo:



Y os dejo un video explicando todos los detalles del programa:




Código fuente y paquete de instalación: alojado en google drive


Saludos

Julio

miércoles, 24 de septiembre de 2014

¿spectrum, comodore, msx, cpc amstrad? ¿os suenan? RetroActivo Historia de la informática, juegos, ordenadores....



¿spectrum, comodore, msx, cpc amstrad? ¿os suenan?

RetroActivo historia de la informática, juegos, ordenadores....



Si os gusta la historia de la informática, los ordenadores antiguos (con los que empezaste a jugar), no os podeis perder este blog:




Os dejo aquí el programa nº 20, dedicado a los inicios de la programación de los tertulianos... seguro que muchas de las historias coinciden con la vuestra:


Instrucciones de como instalar gambas3 en Ubuntu

Instrucciones de como instalar 

Gambas3 en Ubuntu



Gracias a Jesus Guardón, el administrador del foro http://www.gambas-es.org tenemos traducido al español las instrucciones de como instalar Gambas3 en Ubuntu, tanto usando las nuevas PPA como para compilar en la wiki oficial de gambas




Para otras distribuciones de gnu/linux teneis que ver este enlace:

martes, 23 de septiembre de 2014

Mostrar el esquema de una base de datos sqlite3


Mostrar el esquema 

de una base de datos sqlite3

Os dejo una pequeña aplicación que es capaz  de mostrar el esquema de una base de datos Sqlite: sus tablas, Vistas, nombre y tipo campos.


Vista Diseño

Código fuente::
' gambas class file

Public Sub _new()

End

Public Sub Form_Open()

Me.center

End

Public Sub ButtonSalir_Click()

Me.Close

End

Public Sub ButtonEligeFichero_Click()

Dialog.filter = ["*.sqlite", "sqlite"]
If Not Dialog.OpenFile() Then

TextBoxRuta.text = Dialog.Path
ButtonMostrarEsquema_Click()
Endif

End

Public Sub ButtonMostrarEsquema_Click()

Dim hconn As New Connection
Dim hresult As Result
Dim contenido As String
'abrir base de datos
hconn.host = TextBoxRuta.Text
hconn.Name = TextBoxRuta.Text
hconn.Type = "Sqlite3"

Try hconn.Open()
If Error Then
Message.Error("Se ha producido un error al intentar leer la base de datos")
Return

Endif

hresult = hconn.Exec("SELECT sql From sqlite_master ")

contenido = ""
While hresult.Available

contenido &= hresult["sql"] & gb.NewLine
hresult.MoveNext
Wend

TextArea1.text = contenido

End






En ejecución mostrando el esquema.



Descarga el código y proyecto completo: descarga alojada en google drive

Fuente:
http://www.gambas-es.org/viewtopic.php?f=3&p=23369#p23369

Curso Gratuito de Desarrollo en HTML5, CSS y Javascript de WebApps, incl. móviles FirefoxOS* (3.ª ed.) en MiríadaX

Curso Gratuito de Desarrollo en HTML5, CSS 

y Javascript de WebApps,
incl. móviles FirefoxOS* (3.ª ed.)  en MiríadaX


El próximo 1 de octubre (2014) empieza la 3º edición de este curso.
Yo lo hice el año pasado, y quede muy contento ya que no sabia casi nada ni de html, ni de css ni de javascript, y en el curso aprendes "desde cero", con lo cual te enteras muy bien de todo.

Al final llegas a aprendes a crear aplicaciones móviles, para firefoxOS o para ejecutarlo desde el navegador del móvil.

Os dejo aquí la descripción del curso:
Este curso capacita para un primer nivel de desarrollo de aplicaciones móviles en HTML5, CSS y JavaScript accesibles desde PC, móvil, tableta, SmartTv u otros dispositivos que soporten HTML5. El curso es para principiantes en HTML5 e ilustra los conceptos con ejemplos sencillos y multidisciplinares, tanto de programación, como de diseño gráfico o de diseño de la interacción. Los participantes aprenderán a diseñar interfaces con HTML y CSS, así como a programar en JavaScript nuevas funcionalidades y aplicaciones. Se enseñará a crear aplicaciones Web genéricas independientes de dispositivo, así como a empaquetarlas para FirefoxOS. Empaquetarlas para Android o iPhone es sencillo, pero no se cubre en este curso.
Firefox OS es el nuevo sistema operativo libre para teléfonos móviles y tabletas de la Fundación Mozilla, que utiliza software libre y se programa en HTML5, utilizando HTML, CSS y Javascript, igual que las aplicaciones Web de los grandes portales de Internet, Google, Twitter, Facebook, Amazon. etc. Su calidad y carácter abierto ha conseguido el apoyo de Telefónica, Qualcomm, LG, Huawei Foxconn, etc.
Este curso es el primero del programa "Diseño de servicios en la nube para acceso móvil y multi-dispositivo con HTML5 "impulsado y patrocinado por Red.es, Universia, CENATIC, Telefónica Digital y TLS. El programa consta de 5 cursos, que se irán incorporando progresivamente en MiríadaX.
Esta iniciativa está recogida dentro de la medida “Formación para el Empleo” del Plan de Inclusión Digital y Empleabilidad de la Agenda Digital para España.


Os dejo el enlace para registraros en miriadax.net e inscribiros en el curso:




jueves, 18 de septiembre de 2014

Recursos gratuitos para Gimp: Curso del Instituto de Tecnologías Educativas: GIMP, aplicaciones didácticas

Recursos Gratuitos para Gimp:

 Curso del Instituto de Tecnologías Educativas: 


GIMP, aplicaciones didácticas


Os dejo aqui el enlace a este interesante recurso gratuito para Gimp:



Indice:

miércoles, 17 de septiembre de 2014

Video tutoriales de PyQT en castellano (#python usando #qt4)



Video tutoriales de PyQT en castellano


Buscando tutoriales y documentación de Python para hacer aplicaciones gráficas, encontré estos video tutoriales de Jesus Conde. Por ahora a subido 19 video tutoriales a su canal de youtube, están muy bien. 

En los primeros explican paso a paso todo el proceso de hacer la interfaz gráfica con Qt designer (creando el archivo .ui), convertirlo en .py, y luego enlazarlo con la aplicación en python (.pyw) para ejecutarla. 

Lista de videos en youtube sobre el curso de PyQt de Jesus Conde:


Nota: el video nº 14 esta en esta direccion: http://youtu.be/6EW5rnxfrHg



Título de los videos: Curso de Python gráfico con PyQT (a fecha de 17/09/2014)

1. Configurar entorno de desarrollo.
2. Anatomía de una aplicación PyQT
3. Creación de GUIs para Python con PyQT. Manejo de eventos en PyQT
4. Crear interface de usuario con QT Designer
5. Concextar Señales con Slots (eventos con métodos)
6. Convertir interfaces .ui en archivos Python
7. Crear archivo .pyw, lanzador de apliación.
8. Crear Slots (métodos) personalizados
9. Convertir entre tipos de datos
10. Enlazar widgets (controles) con Buddies (controles amigos o compañeros). Setfocus
11. Crear lanzador para Buddies.
12. Widgets radiobuttons
13. Lanzador de Widgets radio buttons
14. Widgets CheckBoxes.
15. Usar Checkboxes
16. Uso de widgets básicos.
17. Listas e items de listas
18. Crear una lista editale
19. Aplicaciones con varios documentos.Widget MdiArea.


Nota: 22/09/2014
http://zetcode.com/gui/pyqt4/drawing/
En esta web encontrais un ejemplo de dibujar en pantalla.
Descargar: enlace de archivo de ejemplo para dibujar



martes, 16 de septiembre de 2014

Manuales INKSCAPE avanzados


Manuales INKSCAPE avanzados

Lo que más me gusta de los cursos de  miriadax, son sus foros, siempre encuentras información extra de problemas que les ocurren a los alumnos y de como resolverlos. Incluso hay gente que deja enlaces para ampliar la información.

Os dejo dos direcciones, que ha compartido Jose Antonio Carrascosa Garcia, donde podeís encontrar manuales avanzados sobre Inkscape, un editor de imágenes vectoriales softwarelibre:


http://tavmjong.free.fr/INKSCAPE/MANUAL/html_es/index.html


http://joaclintistgud.files.wordpress.com/2011/04/logo_a_logo_segunda_edicion.pdf




domingo, 14 de septiembre de 2014

Tutoriales Gimp (I): Crear logotipos con Gimp

Crear logotipos con Gimp



En este video tutorial, os explico como crear logotipos usando Gimp. Además también aprendereís a mostrar en formularios los menús que os interesen, para asi tenerlos a la vista y fácilmente disponibles.





Saludos













sábado, 13 de septiembre de 2014

Nuevo canal de youtube sobre Gambas3, trucos, aplicaciones y softwarelibre


Nuevo canal de yotube
sobre Gambas3, trucos,
 aplicaciones y softwarelibe


Os dejo aqui  el nuevo canal de youtube que estoy haciendo junto a Federico Trillo, donde subiremos videos sobre Gambas3, tutoriales, trucos, aplicaciones y softwarelibre. No olvideis suscribiros.




Como mi canal de youtube estaba más centrado al gambas2, dejaré de subir videos alli, para subirlos a este nuevo canal.


Saludos

Herramienta para cálculos dimensiones de impresión según la resolución de una imagen

Herramienta para cálculos dimensiones de impresión según la resolución de una imagen

"necesito calcular el ancho y alto de una imagen a milímetros": A partir de esta pregunta, en el foro de gambas-es.org (ver enlace 1), estuvimos hablando sobre el tema. Jesus Guardón, dió varios enlaces donde explicaban las fórmulas para hacer las conversiones ( http://www.fmedda.com/es/article/dpi_ppi ).





Un ejemplo:
Calcular las dimensiones en pixeles de una imagen, que queremos imprimir en un poster de tamaño 90x60cm y con un mínimo de 150 PPI.




De esta descripción, se puede calcular que el tamaño de la fotografía digital debe añadirse por lo menos hasta 5315x3543 Pixeles (~18,8 MegaPixeles):



Me me hecho esta pequeña calculadora  que hace los cálculos automáticamente, en los dos sentidos:
-sabiendo las dimensiones del papel y los ppi, calcular los pixeles que tiene que tener la imagen
-sabiendo los pixiles que tiene la imagen y los ppi que queremos imprimir, calcular la dimension del papel.




Enlace de descarga: alojado en google drive




Fuentes:
http://www.gambas-es.org/viewtopic.php?f=1&p=22657#p22657
http://www.fmedda.com/es/article/dpi_ppi

Herramientas usadas:
gambas3
latex como editor de fórmula
libreoffice math

Nota:
Formula expresada para latex:
px=\frac {DimensionPapel(cm) * PPI (\frac {px}{Inch})} {2.54  (\frac {cm}{Inch})}
Formula expresada para libreoffice math:
{ DimensiónPapel (cm) * PPI ({px} over {Inch}) } over {2,54  ({cm} over {Inch})} = {px}

jueves, 11 de septiembre de 2014

Resolver el error: 502 Bad Gateway

Resolver el error: 502 Bad Gateway

Os dejo un video de como resolver el error "502 Bad Gateway", que sale algunas veces en algunas páginas web (por ejemplo en la del foro de gambas-es.org)


Video para la version de Firefox 33

Video para version anterior de Firefox


Se debe a problemas con las cookies que deja la página web en el navegador. Como veis al borrar el  cookie concreto de la página queda resuelto el problema.

Hay otra opción que es borrar todas las cookies, pero resulta más cómodo borrar sola la que nos esté dando problemas, ya que la mayoría de las páginas web necesitan cookies para funcionar, perdiendo contraseñas, configuraciónes , etc.

Espero que os sea útil.

Saludos

Ejemplo de programa orientado a eventos

Ejemplo de programa orientado a eventos

En este ejemplo vamos a ver como programar usando eventos y observadores.  Se basa en que cuando se produce un evento en un objeto del programa, este evento se propaga por toda la aplicación haciendo que los objetos que lo estuvieran observando  ejecuten el código que tengan asociado a dicho evento.



Eston son los comandos que vamos a usar:
Event: es un comando que hace que se declare un evento dentro de una clase (ver http://gambaswiki.org/wiki/lang/eventdecl?l=es&w )
EVENT Nombre ( [ Parámetro #1 [ , Parámetro #2 ... ] )
Raise: es un comando que hace que se dispare el evento. (ver http://gambaswiki.org/wiki/lang/raise?l=es&w )

[ Cancelado = ] RAISE Evento ( [ Parámetro #1 [ , Parámetro #2 ... ] )

Observer: Los Observadores son objetos que le permiten interceptar eventos lanzados por otros objetos, es decir que los "observan". (ver http://gambaswiki.org/wiki/comp/gb/observer/_new?l=es&w )

hObserver = New Observer ( Object As Object [ , After As Boolean ] )



Nuestro Ejemplo:



Tenemos varios objetos "peloton" los cuales cuando son atacados (evento atacar), informan a sus superiores (que los estan observando), para que tomen las acciones adecuadas.





 Este es el código de la clase Pelotón:
' gambas class file

Event ataque(obj As Object, dato As Point)
Private posicion As New Point

Public Sub _new(xx As Integer, yy As Integer)
'posicion en el tablero

posicion.X = xx
posicion.y = yy

End

Public Sub SiendoAtacado()

Raise ataque(Me, posicion)

End



Como veis, hemos declarado un evento, "ataque", que acepta los parametros obj (un objeto) y dato (una coordenada)
Cuando se ejecuta el método "SiendoAtacado()", este hace que se dispare en el programa, el evento ataque, pasando los datos (parámetros) el propio objeto (ME) y su posicion.


Ahora vemos,la clase ControlDeTropas:
' gambas class file

Private ObservadorControl2 As Observer

Public Sub _new()

End

Public Sub addObservador(p As Peloton)

ObservadorControl2 = New Observer(p) As "Observador"

End

Public Sub Observador_ataque(obj As Object, d As Point)

Print "Posicion atacada (evento desde objeto): ", obj, d.x, d.y

End




Comentamos el código:
Lo primero que hacemos es definir un observador: ObservadorControl2
Luego tenemos el metodo publico .addObservador, que tiene como parámetro a un objeto peloton, y que lo que hace es crear un observador al objeto pasado , agrupandolo en "Observador"

"Observador" tiene ahora un evento "_ataque", que recibe los datos del objeto y de la posición (los datos que manda Raise). Y nos presenta un texto por pantalla. Esto  de escribir un mensaje, es una simplificación, no normal seria que hiciera algo: mandar ayuda (otro peloton) a esa posición, etc


La clase ServiciosSanitarios:
' gambas class file

Private ObservadorControl As Observer

Public Sub _new()

End

Public Sub addObservador(p As Peloton)

ObservadorControl = New Observer(p) As "Observador"

End

Public Sub observador_ataque(obj As Object, d As Point)

Print "Posicion que tengo que enviar ayuda (evento desde objeto): ", obj, d.x, d.y

End



Esta clase es muy similar a la anterior, lo que cambia es la acción que realizará cuando se produzca el evento  _Ataque(), ya que nos muestra distitno mensaje

El principal Fmain
:

' gambas class file

Public cTropas As ControlTropas
Public ServSani As ServiciosSanitarios
Public ptmp As Peloton
Public listaPelotones As New Peloton[]

Public Sub _new()

End

Public Sub Form_Open()

cTropas = New ControlTropas
ServSani = New ServiciosSanitarios

ptmp = New Peloton(10, 243)
listaPelotones.add(ptmp)
ptmp = New Peloton(130, 3)
listaPelotones.add(ptmp)
ptmp = New Peloton(-2, -53)
listaPelotones.add(ptmp)

For Each ptmp In listaPelotones
cTropas.addObservador(ptmp)
ServSani.addObservador(ptmp)
Next

End

Public Sub Button1_Click()

Dim p As Peloton

If RadioButton1.value = True Then p = listaPelotones[0]
If RadioButton2.value = True Then p = listaPelotones[1]
If RadioButton3.value = True Then p = listaPelotones[2]

p.SiendoAtacado()

End


En el programa pincipal, cuando se abre el formulario (_open() ) se crea una lista de objetos pelotones. y estos se van añadiendo a los objetos cTropas y ServSani, para que los observen.

Si se elige a un peloton dependiendo del radiobutton seleccionado. elegido y se pulsa el boton del formulario (button1_click) , , se llama al método ".siendoAtacado" del peloton seleccionado.

De una manera "trasparente" .siendoAtacado, hace que se dispare el evento Ataque, y que los objetos que observan al peloton elegido, respondan y manden los mensajes.


En el siguiente video podemos ver como se ejecuta el programa y lo que se va obteniendo.


¿que utilidad tiene todo esto? Imaginaos que creamos otra clase "X" que tambien va a observar y hacer algo cuando un peloton sea atacado....solo con  añadir el código de la nueva clase, y modificando el bucle For Each,  para que observen los objetos pelotones por el objeto "X", podemos ampliar el código, sin tocar el resto del programa:

For Each ptmp In listaPelotones
cTropas.addObservador(ptmp)
ServSani.addObservador(ptmp)

'.....aqui se pueden añadir los  nuevos objetos que observen a ptmp
Next




'Codigo fuente de ejemplo:
https://drive.google.com/file/d/0B02Ro2CNt-OOSjUtc2RGRG1OS00/edit?usp=sharing
https://drive.google.com/file/d/0B02Ro2CNt-OOQUw0UnhZdEV2c3c/edit?usp=sharing

El 2º enlace es un ejemplo ampliado, añadiendo un nuevo observdor al formulario

Nota:
Todo lo anteriormente dicho, se trata de la forma que tiene gambas3 de aplicar el patron observador.
Como vereis es más simple ya que nos proporciona todas las herramientas para aplicarlo.


Fuente:
http://gambaswiki.org/wiki/doc/object-model?l=es
http://www.gambas-es.org/viewtopic.php?f=1&t=3960&highlight=eventos