You are on page 1of 66

Manual Bsico para crear componentes en Gambas2

Manual Bsico para crear componentes en Gambas2


Versin 1.00 rev 0

Autor: Julio Snchez Berro Octubre 2010, Dos Hermanas (Sevilla)

Cmo dira maikl: A partir de aqu se abre la veda para hacer controles a cascoporro

Pgina 1 de 66

Manual Bsico para crear componentes en Gambas2

Dedicado a mi padre, que siempre me dijo: Estudia que es para t Miguel Snchez Daz 1939-2009

Pgina 2 de 66

Manual Bsico para crear componentes en Gambas2

ndice
0. Agradecimientos...............................................................................................................................4 1. Introduccin......................................................................................................................................4 2.Modelo de objetos.............................................................................................................................6 1. Objetos y clases...........................................................................................................................6 1.1. Clases...................................................................................................................................6 1.2.Propiedades, mtodos y variables.........................................................................................7 1.3.Referencias............................................................................................................................7 1.4. Objetos no vlidos................................................................................................................7 1.5.Mtodos especiales................................................................................................................7 2.Eventos y observadores................................................................................................................7 2.1.Eventos..................................................................................................................................7 2.2.Bloquear objetos...................................................................................................................8 2.3.Los observadores...................................................................................................................8 3.Herencia........................................................................................................................................9 3.1.Que es lo que se hereda?.....................................................................................................9 3.2.Qu clase puede ser una clase padre?..................................................................................9 3.3.Virtual envo..........................................................................................................................9 3.4.La herencia y el constructor..................................................................................................9 3.5.Smbolo Reemplazar...........................................................................................................10 4. Componentes.............................................................................................................................10 4.1. Por defecto de componentes internos.................................................................................10 4.2.Las tablas de smbolos........................................................................................................10 4.3.Tabla de smbolos global.....................................................................................................10 4.4. Proyecto tabla de smbolos................................................................................................10 3. Sobre este manual...........................................................................................................................12 4. Empezamos: el componente supergridview...................................................................................13 5. Incluir un componente del usuario en un proyecto.....................................................................21 6. Creando el componente/clase convertirnumeroaletra.................................................................23 7. Control/Clase numeroaletras: Vamos a probarlo en un programa..................................................29 8. Ms Propiedades y Funciones al control supergridviews: colorear lineas pares e impares...........34 9. Supergridviews: Aadiendo la funcin Ordenar............................................................................39 11. Supergridviews: Aadiendo la funcin Copiar y Pegar del Portapapeles....................................43 12. Supergridviews: Aadiendo la funcin convertir en html: .crearhtml..........................................48 13. Crear el Paquete de Instalacin de nuestros componentes...........................................................51 Anexo I: Explicacin de Soplo de controles......................................................................................54 Anexo 2: Script de instalacin de Gambas2 realizado por jguardon..................................................60 Anexo 3: Desinstalar Gambas2..........................................................................................................63 a) Cuando lo hemos instalado desde Centro de Software de Ubuntu........................................63 b) Con el script de jguardon...........................................................................................................63

Pgina 3 de 66

Manual Bsico para crear componentes en Gambas2

0. Agradecimientos
Al autor de Gambas: Bernot Minisini Al foro http://www.gambas-es.org/ Al patrocinador de dicho foro http://www.sferahosting.com/webhosting.html A los participantes del foro: soplo, maikl, Ayortano, shordi, jguardon, fabianfv, etc ...que sin sus preguntas/comentarios/respuestas/explicaciones, me hubiera sido imposible realizar este manual bsico. Gracias a todos. Julio Snchez Berro

1. Introduccin.
(Obtenido de la documentacin oficial de Gambas) Los componentes en Gambas son libreras compartidas externas escritas en C, C++ o en Gambas que agregan nuevas funciones al interprete de Gambas. Estos son almacenados in $PREFIX/lib/gambas2, el valor del $PREFIX dependen de donde este instalado Gambas en su sistema. Por default, $PREFIX esta en /usr/local. Informacin relacionada con los componentes es almacenada en $PREFIX/share/gambas2/info. Para usar un componente en un proyecto, debe seleccionar el componente en el men Project Propiedades, o de lo contrario obtendr un mensaje de error:
Cannot load name class. Unable to load clase file

Presentamos a continuacin la tabla de componentes standard de gambas2

Pgina 4 de 66

Manual Bsico para crear componentes en Gambas2

Pgina 5 de 66

Manual Bsico para crear componentes en Gambas2

2.Modelo de objetos
Contenido 1. Objetos y clases 1.1. Clases 1.2. Propiedades, mtodos y variables 1.3. Referencias 1.4. objetos no vlidos 1.5. Mtodos especiales 2. Eventos y observadores 2.1. Eventos 2.2. Bloquear objetos 2.3. Los observadores 3. Herencia 3.1. Lo que se hereda? 3.2. Qu clase puede ser una clase padre? 3.3. Virtual envo 3.4. La herencia y el constructor 3.5. Smbolo Reemplazar 4. Componentes 4.1. Por defecto de componentes internos 4.2. Las tablas de smbolos 4.3. tabla de smbolos global 4.4. Proyecto tabla de smbolos 1. Objetos y clases Un objeto en Gambas es una estructura de datos que proporciona las propiedades, variables, mtodos y eventos. Los objetos se accede "por referencia", es decir, utilizando un puntero a la misma, es decir, utilizando una variable cuyo valor es la direccin de la estructura de datos de objeto en la memoria. Usted puede ver la direccin de un objeto mediante la instruccin de la impresin: DIM astr AS NEW String [] PRINT astr (String [] 0x80dccf8) La estructura de datos de objeto es descrito por una clase. 1.1. Clases As que cada objeto de Gambas tiene una clase que describe todos los pblicos sus propiedades, mtodos y eventos. Esta clase es un objeto demasiado Gambas, cuya clase es la clase denominada clase. Una clase esttica es una clase que todos los miembros son estticos (vase ms adelante). En Gambas, una clase esttica tambin se denomina un mdulo. Pgina 6 de 66

Manual Bsico para crear componentes en Gambas2

Una clase <esttica no puede ser instanciado: se creara un objeto con ninguna variable dinmica, que es intil. Ejemplo La clase System es una clase esttica: todos sus mtodos son estticos, y no se puede crear un objeto cuya clase sera Sistema. Una clase virtual es una pseudo-clase ocultos que no pueden manipular explcitamente. 1.2.Propiedades, mtodos y variables Propiedades y mtodos para manipular la estructura de datos. Una propiedad, un mtodo o una variable puede ser esttica: Una variable esttica ser compartida por todas las instancias de la misma clase. Una propiedad o un mtodo esttico slo puede modificar las variables estticas. Un mtodo o una variable puede ser pblica o privada. Una propiedad es siempre pblica. smbolos privada slo se puede utilizar desde el interior de clases. smbolos pblicos pueden ser utilizados en todas partes, siempre y cuando tengas una referencia apunta al objeto. 1.3.Referencias No hay recolector de basura en Gambas. As, cada objeto tiene un contador de referencia que se incrementa cada vez que el objeto es referenciado por cualquier variable, matriz, coleccin u otro objeto, y disminuye cuando es puesto en libertad. Este contador de referencias es cero en la creacin de objetos, y cuando se convierte en cero de nuevo despus de un comunicado de referencia, el objeto se libera. 1.4. Objetos no vlidos Un objeto puede ser vlida.Porque, por ejemplo, est vinculada a un objeto interno no gestionados por Gambas que fue destruida. Tratar de utilizar un objeto no vlido genera un error. 1.5.Mtodos especiales Mtodos especiales son mtodos declarados en las clases, cuyo nombre comienza con un carcter de subrayado, y que son llamados por el intrprete en las siguientes situaciones: Cuando se crea un objeto. Cuando un objeto se libera. Cuando la clase de objeto se carga. Cuando la clase de objeto se descarga. Cuando se utiliza un objeto como si se trata de una matriz. Al enumerar el objeto. Cuando se utiliza un objeto como si fuera una funcin. Al intentar utilizar un mtodo de objeto desconocido o propiedad. Vanse los mtodos especiales y mtodos especiales para obtener ms informacin. 2.Eventos y observadores 2.1.Eventos Los eventos son las seales enviadas por un objeto cuando algo sucede en l. Si un objeto provoca eventos, se llevar a cabo una referencia sobre su observador, o el objeto primario. Este observador es otro objeto que implemente los controladores de eventos. Un controlador de Pgina 7 de 66

Manual Bsico para crear componentes en Gambas2

eventos es un mtodo pblico que se llama cada vez que se provoc el evento. De forma predeterminada, el observador es el objeto actual en la que se declara el objeto recin instanciado. Para provocar eventos, un objeto debe tener un nombre de evento. Este evento es el nombre asignado al instanciation objeto, cuando se utiliza la nueva instruccin y la palabra clave AS, y es el prefijo de todos los mtodos de control de eventos. Ejemplo Esto crea un control Button que se provocan eventos. DIM hButton As Button hButton = NUEVO Button (ME) AS "ButtonEventName" Si no se especifica el nombre del evento, el objeto no provocar eventos. 2.2.Bloquear objetos Un objeto puede ser bloqueado para que deje de eventos de recaudacin, y se puede desbloquear para que se les plantea de nuevo. Ver la Object.Lock y mtodos Object.Unlock. Algunos eventos pueden ser cancelados por el controlador de eventos, utilizando la instruccin STOP EVENT. El efecto de esta cancelacin depende del evento. Un objeto se bloquea automticamente durante la ejecucin de su constructor: no puede enviar ni recibir ningn evento. 2.3.Los observadores Los observadores son objetos que le permiten interceptar los eventos provocados por otros objetos. Que "observar" ellos. Puede interceptar eventos justo antes de que se han planteado, o justo despus. Para cada evento interceptado, el observador levantar un evento con el mismo nombre y los mismos argumentos. Mediante el uso de STOP EVENT dentro de un controlador de eventos de observador, se cancela el evento original. Ejemplo:
PRIVATE $hButton as Button PRIVATE $hObserver AS Observer PUBLIC SUB Form_Load() $hButton = NEW Button(ME) AS "Button" $hObserver = NEW Observer(hButton) AS "Observer" END PUBLIC SUB Observer_Click() DEBUG "El botn ha echo click. Puedo cancelar el evento!" STOP EVENT END PUBLIC SUB Button_Click() DEBUG ud no debe verme" END

Pgina 8 de 66

Manual Bsico para crear componentes en Gambas2

3.Herencia La herencia es el camino para una clase para convertirse en una versin especializada de otra clase. 3.1.Que es lo que se hereda? La clase hereda de su padre todos los mtodos, propiedades, constantes y eventos. Debe utilizar la palabra clave ME para acceder a los elementos heredados de la clase en el interior. 3.2.Qu clase puede ser una clase padre? Usted puede heredar cualquier clase, incluso un nativo de uno! Por ejemplo, puede crear una clase que hereda MiCuadroDeLista ListBox pero permite asociar una etiqueta a cada elemento de la lista. Tenga en cuenta que no se puede utilizar Inherits en un archivo de clase de forma, porque las formas ya hereda la clase Form. La profundidad del rbol de herencia no puede ser mayor de 16. Esta es una constante en el cdigo dentro de la intrprete de Gambas. 3.3.Virtual envo Al llamar a un mtodo o acceso a una propiedad de un objeto de referencia, Gambas siempre utiliza virtuales de despacho. Esto significa que la clase real del objeto se utiliza siempre, y no el tipo de la variable que hace referencia al objeto - como era en Gambas 1.0. 3.4.La herencia y el constructor En contra de todo el lenguaje objeto que s, cada clase en la jerarqua de herencia consume los parmetros pasados al constructor. Supongamos que tenemos el rbol de herencia siguientes: MiCuadroDeLista --- hereda -> ListBox hereda --- ---> Control Control._new () no existe. ListBox._new () toma un parmetro: el control de los padres. MyListBox._new () toma un parmetro: un nombre - Es slo un ejemplo. As NEW MiCuadroDeLista tendr dos parmetros. El primero ser enviado a MyListBox._new (). El segundo ListBox._new (). Tenga cuidado: el ListBox._new () se llamar en primer lugar, de modo que usted est seguro de que el control ListBox existe cuando ests en MyListBox._new (). As que los argumentos deben ser especificados en orden inverso. A continuacin, crear un control MiCuadroDeLista de esta manera: hMyListBox = NEW MiCuadroDeLista ("Nombre", hContainer) Pgina 9 de 66

Manual Bsico para crear componentes en Gambas2

3.5.Smbolo Reemplazar Cuando un smbolo es anulado, el tipo de smbolo en la clase del hijo debe ser compatible con el tipo de smbolo en la clase padre. Las reglas son: -Un smbolo dinmico debe ser anulado por un smbolo dinmico y uno esttico por una esttica. -Un mtodo debe ser anulado por un mtodo. -La propiedad debe ser anulado por una propiedad. -Una propiedad de slo lectura se puede reemplazar por una de lectura y escritura de propiedad. -Una constante se puede reemplazar por una constante o una propiedad. Gambas 2 no se comprueba la compatibilidad de smbolo de primer orden, as que ten cuidado! La firma del mtodo hijo no se compara con la firma de uno de los padres. 4. Componentes Los componentes de Gambas son externos bibliotecas compartidas escrito en C, C++ o en Gambas que aaden nuevas funciones y / o clases para el intrprete de Gambas. Las clases se agrupan de acuerdo con el componente de procedencia. 4.1. Por defecto de componentes internos El intrprete incluye un componente interno gb nombre que define todas las clases estndar del lenguaje. Este componente est siempre cargado por defecto, y puede ser considerado como parte del lenguaje 4.2.Las tablas de smbolos Cada componente tiene su propia mesa privada smbolo de la clase, por lo que los nombres de clase no estn en conflicto. 4.3.Tabla de smbolos global As que los componentes pueden trabajar juntos, hay una tabla de smbolos global, donde todas las clases exportadas por los componentes y todas las clases exportadas por el proyecto actual se almacenan. Si hay un conflicto de nombres en esta tabla de smbolos globales, la clase cargada ltimo reemplaza la clase cargada anterior con el mismo nombre, mediante el uso de la herencia. En otras palabras, la clase predominante se extiende por imponerse a la una. Esta ltima caracterstica se puede utilizar para: Ampliacin de una clase ya declarada por la adicin de nuevos mtodos o propiedades a la misma. Por ejemplo, la clase Application gb.qt reimplementa la gb clase Application. Anulacin de los mtodos de una clase ya declarado. Por ejemplo, el componente gb.form.dialog sustituye a la mayora de los mtodos estticos de la clase de dilogo.

Pgina 10 de 66

Manual Bsico para crear componentes en Gambas2

4.4. Proyecto tabla de smbolos El proyecto tiene su propio smbolo privado, como cualquier otro componente, y puede exportar cualquiera de sus clases a la tabla de smbolos globales utilizando la palabra clave de exportacin. Las clases del proyecto se cargan despus de todos los componentes. As que la clase a exportar puedan reemplazar las clases exportadas declarado en cualquiera de los componentes.

Pgina 11 de 66

Manual Bsico para crear componentes en Gambas2

3. Sobre este manual Este manual bsico, os va a mostrar como realizar componentes de gambas paso a paso, utilizando el propio gambas (se pueden realizar en C o en C++ como viene en la documentacin oficial del proyecto Gambas) pero hasta ah no llego. :) De todos modos haremos nuevas clases, aadiremos propiedades, y mtodos a los componentes estandard que trae gambas para mejorarlos y ampliar su utilizacin. Espero que os sea til. Cualquier duda, sugerencia, mejora, rectificacin que tenga que hacer, etc.. que queris incluir, poneos en contacto conmigo.

jusabejusabe@hotmail.com

Pgina 12 de 66

Manual Bsico para crear componentes en Gambas2

4. Empezamos: el componente supergridview Vamos a empezar con algo muy fcil, que es aadirle una nueva propiedad a un control. Lo vamos a hacer con un gridviews, (que es mi control favorito), y la tarea consistir en aadirle una propiedad llamada tag2 con la cual el programador puede usarla para que lo que le convenga, ser del tipo string (o sea podr contener una cadena de texto).
Creamos un nuevo proyecto, y dejamos clickeados la opcin de Programacin de un componente y tambin en Internalizacin, dejamos asi la puerta abierta a una eventual traduccin a otros idiomas.

Creamos una nueva carpeta que llamaremos componentesGambas, dentro de nuestro directorio de usuario (en mi caso /home/uno/componentesGambas ) Nota: Es importante no dejar espacios y no utilizar caracteres especiales en el nombre de la carpeta, as evitaremos errores a la hora de la creacin de los paquetes de instalacin .deb

Pgina 13 de 66

Manual Bsico para crear componentes en Gambas2

Aadiremos en la siguiente pantalla el nombre del proyecto y titulo: supergridviews

Pulsamos el botn ok y vemos que se han creados varias clases, un formulario y en la carpeta Data, subcarpeta control aparecen 2 iconos

Para hacer nuestro control, vamos a borrar las clases CContainer y CCntrol, el formulario Ftest y en datos/control borramos tambin ccontainer.png. Al archivo ccontrol.png le vamos a cambiar el nombre por supergridviews.png. Tambin vamos a crear un archivo de clases que la llamaremos supergridviews.

Pgina 14 de 66

Manual Bsico para crear componentes en Gambas2

Nos quedar una cosa asi:

En el archivo de clases es donde pondremos nuestro cdigo.


'Gambas class file 'heredamos las propiedades de un gridview INHERITS gridview EXPORT 'aadimos la '1 para que 'propiedades PUBLIC CONST

propiedad Tag2 se pueda ver en el cuadro de propiedades, la aadimos a las existentes _Properties AS String = "*,Tag2"

'2 creamos la propiedad en si PROPERTY tag2 AS String PRIVATE htag2 AS String 'funcin de lectura PRIVATE FUNCTION tag2_Read() AS String RETURN htag2 END 'funcin de escritura PRIVATE SUB tag2_Write(Value AS String) htag2 = value END

Y ya est nuestro cdigo realizado. Ahora tenemos que hacer que el archivo de clases supergridviews sea clase de inicio, hacemos click sobre el nombre de la clase supergridviews, nos aparece un men y elegimos clase de inicio

Pgina 15 de 66

Manual Bsico para crear componentes en Gambas2

El siguiente paso es dar ciertas propiedades a nuestro proyecto.

Pgina 16 de 66

Manual Bsico para crear componentes en Gambas2

Nos vamos a Proyecto/Propiedades del proyecto. En la pestaa General pulsamos sobre el icono de Gambas y elegimos nuestro icono , en este caso esta en la carpeta control

En la pestaa Opciones, le damos a Si en Este proyecto en un componente y Versin Beta en Avance del componente

Pgina 17 de 66

Manual Bsico para crear componentes en Gambas2

En la pestaa Provee, el tipo le tenemos que poner Control y en grupo Form, para que aparezca pestaa de controles Form cuando se aada a un proyecto nuestro nuevo control.

Y en la pestaa Requiere pulsamos en Gestin grfica de formularios

Una vez hecho esto vamos a crear el ejecutable. (ctrl+alt+m) o Proyecto/Crear/Crear ejecutable y lo guardaremos en la ruta /home/uno Nota Importante: Cuando digo ruta /home/uno me refiero a la ruta /home/usuario, ya que mi usuario se llama uno.

Pgina 18 de 66

Manual Bsico para crear componentes en Gambas2

Como veis hemos marcado Mantener informacin de depuracin en el ejecutable y Instalar en el directorio de componentes del usuario, para que automticamente en nuestro ordenador se guarde en la carpeta de componentes nuestro nuevo control supergridviews.

Pgina 19 de 66

Manual Bsico para crear componentes en Gambas2

La informacin de los componentes del usuario, estn en las siguientes carpetas:


Direccin home/uno/.local/lib/gambas2/ Archivo enlace directo que apunta al ejecutable supergridviews1.gambas Enlace directo que apunta al archivo supergridviews.component enlace directo que apunta al icono supergridviews.png enlace directo que apunta al archivo .info supergridviews.info enlace directo que apunta al archivo .list supergridviews.list Carpeta donde apunta enlace /home/uno/supergridviews.gambas

home/uno/.local/lib/gambas2/

/home/uno/ componentesGambas/supergridview s/.component /home/uno/ componentesGambas/supergridview s/control/supergridviews.png /home/uno/ componentesGambas/supergridview s/.info /home/uno/ componentesGambas/supergridview s/.list

home/uno/.local/share/ gambas2 /control/supergridviews home/uno/.local/share/ gambas2 /info home/uno/.local/share/ gambas2 /info /home/uno/componentesGambas/ supergridviews

Pgina 20 de 66

Manual Bsico para crear componentes en Gambas2

5. Incluir un componente del usuario en un proyecto


Para incluir en un nuevo proyecto nuestro componente, una vez creado nuestro proyecto que lo llamaremos pruebacomponente, tenemos que ir al men de Proyecto/Propiedades/Componentes, bajar hasta abajo de la lista y llegar en componentes del usuario, marcar supergridviews y pulsar el botn ok

Ahora veremos que en nuestra ventana de componentes, en la pestaa Form, aparece nuestro icono y si creamos en el formulario un componente supergridviews, aparece en propiedades de supergridviews1, la nueva propiedad tag2.

Pgina 21 de 66

Manual Bsico para crear componentes en Gambas2

As mismo si pulsamos click en el formulario sobre supergridviews1, en la pantalla de Form.class y escribimos supergridviews1, aparecern las propiedades incluida la nueva programada tag2, siendo totalmente funcional.

Ahora podemos guardar y cerrar nuestro proyecto de componente, que en las siguientes lecciones iremos aadindole ms propiedades y funciones.

Pgina 22 de 66

Manual Bsico para crear componentes en Gambas2

6. Creando el componente/clase convertirnumeroaletra


Ahora vamos a crear una nueva componente/clase que no tenga heredado nada de otro componente (ni propiedades ni eventos ni mtodos). Nuestro objetivo es crear una nueva clase que haga que un nmero (dado en cifras) convertirlo en letras, y con la opcin de poner la moneda. Por ejemplo, que si tenemos una propiedad llamada .value=2030,30, tengamos tambin una funcin que nos devuelva dos mil treinta euros con treinta cntimos. Como hicimos con el ejemplo de supergridviews, crearemos el programa como componente, autaticamente se nos crear varios archivos, que modificaremos (borramos, aadiremos un icono, etc, tal como se hizo en la explicacin anterior). Llegaremos a esta pantalla:

Se ha creado una nueva clase llamada numeroaletra y un icono referente a lo que realiza esta funcin tema de la funcin. Empezamos con el cdigo de la clase numeroaletra:
' Gambas class file 'orden necesaria para que sea un compone EXPORT 'definimos varias variables PROPERTY valor AS Float ' es el numero que introduciremos PRIVATE hvalor AS Float PROPERTY enletra AS String 'es el nmero en letras PRIVATE henletra AS String PROPERTY moneda AS String ' es la moneda que aadira a la parte entera del nmero PRIVATE hmoneda AS String PROPERTY centimo AS String ' es el centimo que aadira a la parte decimal del numero PRIVATE hcentimo AS String 'definimos la propiedades que tendra en el cuadro de propiedades

Pgina 23 de 66

Manual Bsico para crear componentes en Gambas2

PUBLIC CONST _Properties AS String = "valor,moneda,centimo,enletra" PRIVATE FUNCTION valor_Read() AS Float RETURN hvalor END PRIVATE SUB valor_Write(Value AS Float) hvalor = value END PRIVATE FUNCTION enletra_Read() AS String RETURN henletra END PRIVATE SUB enletra_Write(Value AS String) henletra = Value ' END PRIVATE FUNCTION moneda_Read() AS String RETURN hmoneda END PRIVATE SUB moneda_Write(Value AS String) hmoneda = Value END PRIVATE FUNCTION centimo_Read() AS String RETURN hcentimo END PRIVATE SUB centimo_Write(Value AS String) hcentimo = Value END

'esta es la funcion que aparecer que nuestro IDE PUBLIC SUB convertiraletra() henletra = ConvierteNumero_a_letras(hvalor, hmoneda, hcentimo) END 'esta funcin es privada, osea no nos aparece en el IDE de programacin PRIVATE FUNCTION ConvierteNumero_a_letras(valor AS Float, moneda AS centimo AS String) AS String DIM i AS Float DIM r AS Float DIM hastacoma AS String DIM texto AS String DIM monedaPlural AS String DIM mCentPlural AS String DIM mcent AS String moneda = Upper$(moneda) mcent = Upper$(mcent) monedaPlural = palabraPlural(moneda) mCentPlural = palabraPlural(centimo) i = Int(valor) r = (valor - i) * 100 IF i = 0 THEN IF r = 1 THEN
String,

Pgina 24 de 66

Manual Bsico para crear componentes en Gambas2

RETURN Num2Text(r) & " " & mCent & " " ENDIF IF r > 1 THEN RETURN Num2Text(r) & " " & mCentPlural & " " ENDIF ELSE IF r = 0 THEN IF i = 1 THEN RETURN Num2Text(i) & " " & moneda ENDIF IF i > 1 THEN RETURN Num2Text(i) & " " & monedaPlural ENDIF ELSE r = Round(r, -1) 'para tener nmeros exactos redondeo los decimales en caso que el valor venga con ms de 2 decimales. r = Int(r) IF i = 1 THEN IF r = 1 THEN RETURN Num2Text(i) & " " & moneda & " CON " & Num2Text(r) & " " & mCent IF r > 1 THEN RETURN Num2Text(i) & " " & moneda & " CON " & Num2Text(r) & " " & mCentPlural ELSE IF r = 1 THEN RETURN Num2Text(i) & " " & monedaPlural & " CON " & Num2Text(r) & " " & mCent IF r > 1 THEN RETURN Num2Text(i) & " " & monedaPlural & " CON " & Num2Text(r) & " " & mCentPlural ENDIF ENDIF ENDIF END '-------------------------------'poner plurales en castellano '-------------------------------'tambien es una funcin privada PRIVATE FUNCTION palabraPlural(texto AS String) AS String DIM vocal AS String DIM ultimaLetra AS String IF texto = "" THEN RETURN vocal = "AEIOU" ultimaLetra = Right(texto, 1) IF (InStr(vocal, ultimaLetra)) THEN RETURN texto & "S" ELSE RETURN texto & "ES" ENDIF END '-------------------------------'escribir el numero '-------------------------------'tambien es una funcin privada PRIVATE FUNCTION Num2Text(value AS Long) AS String DIM texto AS String IF value = 0 THEN RETURN "CERO" IF value = 1 THEN RETURN "UN" IF value = 2 THEN RETURN "DOS" IF value = 3 THEN RETURN "TRES" IF value = 4 THEN RETURN "CUATRO"

Pgina 25 de 66

Manual Bsico para crear componentes en Gambas2

IF value = 5 THEN RETURN "CINCO" IF value = 6 THEN RETURN "SEIS" IF value = 7 THEN RETURN "SIETE" IF value = 8 THEN RETURN "OCHO" IF value = 9 THEN RETURN "NUEVE" IF value = 10 THEN RETURN "DIEZ" IF value = 11 THEN RETURN "ONCE" IF value = 12 THEN RETURN "DOCE" IF value = 13 THEN RETURN "TRECE" IF value = 14 THEN RETURN "CATORCE" IF value = 15 THEN RETURN "QUINCE" IF value >= 16 AND value < 20 THEN texto = "DIECI" & Num2Text(value - 10) RETURN texto ENDIF IF value = 20 THEN RETURN "VEINTE" IF value >= 21 AND value <= 29 THEN texto = "VEINTI" & Num2Text(value - 20) RETURN texto ENDIF IF value = 30 THEN RETURN "TREINTA" IF value = 40 THEN RETURN "CUARENTA" IF value = 50 THEN RETURN "CINCUENTA" IF value = 60 THEN RETURN "SESENTA" IF value = 70 THEN RETURN "SETENTA" IF value = 80 THEN RETURN "OCHENTA" IF value = 90 THEN RETURN "NOVENTA" IF value < 100 THEN texto = Num2Text(Int(value / 10) * 10) & " Y " & Num2Text(value MOD 10) RETURN texto ENDIF IF value = 100 THEN RETURN "CIEN" IF value < 200 THEN texto = "CIENTO " & Num2Text(value - 100) RETURN texto ENDIF IF value = 200 OR value = 300 OR value = 400 OR value = 600 OR value = 800 THEN texto = Num2Text(Int(value / 100)) & "CIENTOS" RETURN texto ENDIF IF value = 500 THEN RETURN "QUINIENTOS" IF value = 700 THEN RETURN "SETECIENTOS" IF value = 900 THEN RETURN "NOVECIENTOS" IF value < 1000 THEN texto = Num2Text(Int(value / 100) * 100) & " " & Num2Text(value MOD 100) RETURN texto ENDIF IF value = 1000 THEN RETURN "MIL" ENDIF IF value < 2000 THEN Texto = "MIL " & Num2Text(value MOD 1000)

Pgina 26 de 66

Manual Bsico para crear componentes en Gambas2

RETURN texto ENDIF IF value < 1000000 THEN texto = Num2Text(Int(value / 1000)) & " MIL" IF (value MOD 1000) THEN texto = texto & " " & Num2Text(value MOD 1000) RETURN texto ENDIF IF value = 1000000 THEN texto = "UN MILLON" IF value < 2000000 THEN Texto = "UN MILLON " & Num2Text(value MOD 1000000) RETURN texto ENDIF IF value < 1000000000000.0 texto = Num2Text(Int(value IF (value - Int(value / Num2Text(value - Int(value RETURN texto ENDIF THEN / 1000000)) & " MILLONES " 1000000) * 1000000) THEN / 1000000) * 1000000)

Texto

Texto

&

"

"

&

IF value = 1000000000000.0 THEN RETURN "UN BILLON" IF value >= 2000000000000 THEN Texto = "numero demasiado grande" RETURN texto ENDIF END FUNCTION

Como podis comprobar el cdigo no ha sufrido grandes cambios con respecto a si lo hubisemos hecho como un mdulo normal, salvo la definicin de variables. Ahora nos tocara darle al proyecto la propiedades (Proyecto/Propiedades), pestaas: Proyecto/Propiedades/Pestaa Opciones

Pgina 27 de 66

Manual Bsico para crear componentes en Gambas2

Proyecto/Propiedades/Pestaa Provee: aqu por un tema ms de estilistico, (quiero que aparezca un icono en la pantalla de controles), le digo que es de tipo Control y Grupo Control, se podra haber dejado con el tipo Clase

Proyecto/Propiedades/Pestaa Requiere:

aqu como no necesitamos ningun tipo de caracteristicas ni componente lo dejamos todo igual. Ahora pasamos a crear el ejecutable, de igual modo que hicimos con el supergridviews, marcamos las opciones en el menu Proyecto/Crear/ Ejecutable

Y ya lo tenemos, nuestro nuevo control/clase.

Pgina 28 de 66

Manual Bsico para crear componentes en Gambas2

7. Control/Clase numeroaletras: Vamos a probarlo en un programa Creamos un nuevo proyecto: PruebaNumeroAletras Nos iremos a Proyecto/Propiedades/Componentes componentes, marcamos numeroaletras

nos

aparecer

nuestros

Ahora nos vamos a nuestro formulario Fmain, y vamos a la pestaa de controles Control, cogemos nuestro icono de numeroaletras y lo soltamos en el formulario, apareciendo esta pantalla:

Pgina 29 de 66

Manual Bsico para crear componentes en Gambas2

Ahora vamos a borramos el control/clase numeroaletra1, que hemos puesto en el formulario, y ponemos los siguientes controles: un textbox, un botn y un textArea, quedando asi:

Pgina 30 de 66

Manual Bsico para crear componentes en Gambas2

Nos vamos a la ventana Fmain.class, o haciendo click directamente en el formulario Fmain, y escribimos el siguiente cdigo:
PUBLIC SUB _new() END PUBLIC SUB Form_Open() END PUBLIC SUB Button1_Click() DIM numeroaletra1 AS NEW numeroaletra numeroaletra1.centimo = "centimo" numeroaletra1.moneda = "euro" numeroaletra1.valor = valuebox1.value numeroaletra1.convertiraletra() Textarea1.text = numeroaletra1.enletra End

Pulsamos ejecutar, y ponemos en el valuebox1 la cantidad de 15424,48, y hacemos click en el Button1, obteniendo el resultado en el textarea1.

Objetivo conseguido !! Nota Importante: No nos funciona este control/clase colocndolo en el formulario, como haramos con cualquier control normal. Solo nos funciona si lo dimensionamos ,con la linea de cdigo: DIM numeroaletra1 AS NEW numeroaletra.

Pgina 31 de 66

Manual Bsico para crear componentes en Gambas2

Actualmente tendramos los siguientes archivos: En las carpetas \home\uno\.local\share\gambas2

En las carpetas \home\uno\.local\lib\gambas2

Nota Importante: Esto es en el caso de que Gambas2, lo hubisemos instalado con el script de jguardon (ver anexo 2), y no desde el Centro del Software de Ubuntu.

Pgina 32 de 66

Manual Bsico para crear componentes en Gambas2

Para el proyecto supergridviews

Para el proyecto de Numeroaletras:

Pgina 33 de 66

Manual Bsico para crear componentes en Gambas2

8. Ms Propiedades y Funciones al control supergridviews: colorear lineas pares e impares


En este capitulo vamos a aadir 4 nuevas propiedades a nuestro supergridviews: color de fondo en filas impares color de fondo en filas pares color de letras en filas impares color de letras en filas pares Y la subrutina colorear que haga posible esto. Empezamos: Abrimos el proyecto de supergridviews, nos vamos al archivo de clase llamado supergridviews, y 1) En la linea :
PUBLIC CONST _Properties AS String = "*,Tag2

vamos a aadir nuestra nuevas variables para que aparezcan en el cuadro de propiedades:
PUBLIC CONST _Properties AS String = "*,Tag2,colorfondoimpar,colorfondopar,colorletraimpar,colorletrapar"

2) Definimos nuestras variables

'--------------------------------------------------------------'variables de colore de fondo y de letras segun fila impar o par '---------------------------------------------------------------PROPERTY colorfondoimpar AS Integer PRIVATE hcolorfondoimpar AS Integer PRIVATE FUNCTION colorfondoimpar_Read() AS Integer RETURN hcolorfondoimpar END PRIVATE SUB colorfondoimpar_Write(Value AS Integer) hcolorfondoimpar = value END
PROPERTY colorfondopar AS Integer PRIVATE hcolorfondopar AS Integer PRIVATE FUNCTION colorfondopar_Read() AS Integer RETURN hcolorfondopar END PRIVATE SUB colorfondopar_Write(Value AS Integer) hcolorfondopar = value END PROPERTY colorletraimpar AS Integer PRIVATE hcolorletraimpar AS Integer PRIVATE FUNCTION colorletraimpar_Read() AS Integer RETURN hcolorletraimpar END PRIVATE SUB colorletraimpar_Write(Value AS Integer) hcolorletrapar = value END PROPERTY colorletrapar AS Integer PRIVATE hcolorletrapar AS Integer

Pgina 34 de 66

Manual Bsico para crear componentes en Gambas2

PRIVATE FUNCTION colorletrapar_Read() AS Integer RETURN hcolorletrapar END PRIVATE SUB colorletrapar_Write(Value AS Integer) hcolorletrapar = value END 3- Definimos la subrutina pblica que har el trabajo: '-----------------------------------'nueva funcion/subrutina de colorear '-----------------------------------PUBLIC SUB colorear() Ponercolorear(hcolorfondoimpar, hcolorletraimpar, hcolorfondopar, hcolorletrapar) END 4- Definimos las subritinas y funciones internas: '----------------------------------------------------------------------------' colorear tabla.... '----------------------------------------------------------------------------PRIVATE SUB Ponercolorear(fondoimpar AS Integer, letraimpar AS Integer, fondopar AS Integer, letrapar AS Integer) DIM a AS Integer DIM b AS Integer FOR a = 0 TO ME.rows.count - 1 IF Par(a) = FALSE THEN FOR b = 0 TO ME.columns.count - 1 ME[a, b].BackgRound = fondoimpar ME[a, b].Foreground = letraimpar NEXT ELSE FOR b = 0 TO ME.columns.count - 1 ME[a, b].Background = fondopar ME[a, b].Foreground = letrapar NEXT END IF NEXT ME.Refresh END PRIVATE FUNCTION Par(a AS Integer) AS Boolean IF Round(a / 2, 0) * 2 = a THEN 'el numero es par RETURN 1 ELSE RETURN 0 END IF END

Pgina 35 de 66

Manual Bsico para crear componentes en Gambas2

Nota Importante: Comentar que podemos dividir en 4 zonas o secciones, un archivo de clases: 1) Donde definimos la herencia y la orden export
INHERITS gridview EXPORT

2) Aadimos las propiedades que aparecern en el cuadro de propiedades


PUBLIC CONST _Properties AS String = "*,Tag2,colorfondoimpar,colorfondopar,colorletraimpar,colorletrapar"

3) Definimos las variables tanto Pblicas como Privadas de la clase


PROPERTY tag2 AS String PRIVATE htag2 AS String

'funcin de lectura PRIVATE FUNCTION tag2_Read() AS String RETURN htag2 END 'funcin de escritura PRIVATE SUB tag2_Write(Value AS String) htag2 = value END

4) Definirmos las subrutinas y funciones que podran ser pblicas o privadas.


PUBLIC SUB colorear() ............... END PRIVATE SUB Ponercolorear(fondoimpar AS Integer, letraimpar AS Integer, fondopar AS Integer, letrapar AS Integer) ... End

Una vez aadido el cdigo, tendremos que hacer de nuevo el ejecutable, con las mismas opciones que hicimos de supergridviews cuando definimos la propiedad tag2. No lo voy a explicar aqu ya que sino sera recursivo, estando ya explicado con todo detalle anteriormente. Vamos a probar el componente ampliado, abrimos de nuevo proyecto pruebacomponente, y vamos a aadirle el siguiente cdigo: Un mdulo al que llamaremos Titulos, con el siguiente cdigo:
PUBLIC SUB ponertitulo() WITH FMain.supergridviews1 .header = 3 .rows.count = 4 .columns.count = 3 .Columns[0].title = "Articulo" .Columns[1].title = "Precio"

Pgina 36 de 66

Manual Bsico para crear componentes en Gambas2

.Columns[2].title = "Id" .Columns[0].width = 50 .Columns[1].width = 84 .Columns[2].width = 350 .font.name = "Sans" .font.size = 7 .Background = 16777215 .Foreground = 0 END WITH 'los colores los he cogido con el programa definir_gridviews_tableviews, aunque se pueden coger 'desde la propiedad backGROUND (elegimos en el cuadro de color el color que queremos) y 'copiar el numero que nos sale en la propiedes que nos interesen) FMain.supergridviews1.colorfondoimpar = 16162098 FMain.supergridviews1.colorletraimpar = 676630 FMain.supergridviews1.colorfondopar = 16134706 FMain.supergridviews1.colorletrapar = 2566525 fMain.supergridviews1.colorear() END PUBLIC SUB dibujo(tabla AS supergridviews) DIM a AS Integer DIM b AS Integer FOR a = 0 TO tabla.rows.count - 1 IF Par(a) = FALSE THEN FOR b = 0 TO tabla.columns.count - 1 tabla[a, b].text = "prueba" NEXT ELSE FOR b = 0 TO tabla.columns.count - 1 tabla[a, b].text = "prueba" NEXT END IF NEXT tabla.Refresh END 'averigua si un numero es par o impar PUBLIC FUNCTION Par(a AS Integer) AS Boolean IF Round(a / 2, 0) * 2 = a THEN 'el numero es par RETURN 1 ELSE RETURN 0 END IF END En el formulario Fmain: PUBLIC SUB Form_Open() titulos.ponertitulo titulos.dibujo(supergridviews1) END

Pgina 37 de 66

Manual Bsico para crear componentes en Gambas2

Importante: Nos tenemos que ir a Proyecto/Propiedades/ Pestaa Opciones, y poner Simbolos en mdulos son publicos... como S y Los controles en formularios son pblicos como S

Si lo ejecutamos, tendremos el siguiente resultado:

Pgina 38 de 66

Manual Bsico para crear componentes en Gambas2

9. Supergridviews: Aadiendo la funcin Ordenar


En este captulo vamos a aadir otra interesante subrutina a nuestro supergridviews, se trata de hacer que ordene las filas del gridviews, proporcionandole la columna con la queremos que se ordene. De nuevo, abrimos nuestro proyecto supergridviews y vamos a la clase supergridviews aadiendo el siguiente cdigo :
'----------------------------------------------------------'variables para llevar el control de ordenar '----------------------------------------------------------PRIVATE ordenadoalgunavez AS Boolean 'comprueba si se ha ordenado algunavez PRIVATE titulosiniciales AS String 'almacena los titulos de las columnas incialmente antes de ordenar PRIVATE ordenactual AS String 'indica como esta actualmente ordenador el gridviews

la seccin 3 (zona donde definimos la variables):

y en la seccion 4 (subrutinas y funciones):

'------------------------------------ ordenar por columnas -------------------------------'------------------------------------------'guarda los titulos actuales '------------------------------------------Public SUB guardartitulosiniciales() DIM a AS Integer FOR a = 0 TO ME.columns.count - 1 titulosiniciales = titulosiniciales & ME.columns[a].title & "|" NEXT END '------------------------------------------' se restauran los titulos que tenemos almacenados cuando ejecutamos guardartitutlosiniciales de las columnas '------------------------------------------PUBLIC SUB restaurartitulosiniciales() DIM antiguotitulo AS String[] DIM a AS Integer antiguotitulo = Split(titulosiniciales, "|") FOR a = 0 TO ME.columns.count - 1 ME.columns[a].text = antiguotitulo[a] NEXT END
PUBLIC SUB ordenar(columna AS Integer, OPTIONAL AZ_o_ZA AS String) IF ordenadoalgunavez = FALSE THEN guardartitulosiniciales() ordenadoalgunavez = TRUE ordenactual = "AZ" ENDIF IF AZ_o_Za = "AZ" THEN ord_AZ(columna) ordenactual = "AZ" STOP EVENT ENDIF IF AZ_o_Za = "ZA" THEN

Pgina 39 de 66

Manual Bsico para crear componentes en Gambas2

ord_ZA(columna) ordenactual = "ZA" STOP EVENT ENDIF IF AZ_o_Za = "" THEN IF ordenactual = "AZ" THEN ord_ZA(columna) ordenactual = "ZA" ELSE ord_AZ(columna) ordenactual = "AZ" ENDIF ENDIF END

'------------------------ordenar AZ-----------------------------------------------'a: indica la columna a la que ordenamos


PRIVATE SUB ord_AZ(a AS Integer) DIM limite AS Integer DIM cambio1 AS String DIM i AS Integer DIM j AS Integer DIM col AS Integer 'version 3.1 DIM antiguotitulo AS NEW String[] ME.visible = FALSE limite = ME.Rows.Count 'aadido version 3.1 antiguotitulo = Split(titulosiniciales, "|") IF (ME.Columns.Count < a + 1) OR a < 0 THEN Message.Error("Error en la columna introducida para ordenar") GOTO salidaordenar END IF FOR i = 0 TO ME.Columns.count - 1 IF Mid$(ME.Columns[i].text, 1, 3) = "" OR Mid$(ME.Columns[i].text, 1, 3) = "" THEN ME.Columns[i].Text = antiguotitulo[i] ENDIF NEXT ME.Columns[a].Text = "" & antiguotitulo[a] 'fin aadido 3.1 FOR i = 0 TO limite - 1 FOR j = 0 TO limite - 2 IF UCase$(ME[j, a].Text) > UCase$(ME[j + 1, a].Text) THEN FOR col = 0 TO ME.Columns.Count - 1 cambio1 = ME[j, col].Text ME[j, col].text = ME[j + 1, col].Text ME[j + 1, col].text = cambio1 NEXT END IF NEXT NEXT ME.Refresh() salidaordenar: ME.visible = TRUE END

'------------------------ordenar ZA-----------------------------------------------'a: indica la columna a la que ordenamos


PRIVATE SUB ord_ZA(a AS Integer) DIM limite AS Integer

Pgina 40 de 66

Manual Bsico para crear componentes en Gambas2

DIM cambio1 AS String DIM i AS Integer DIM j AS Integer DIM col AS Integer DIM nuevotitulo AS String 'version 3.1 DIM antiguotitulo AS NEW String[] ME.visible = FALSE limite = ME.Rows.Count 'aadido 3.1 antiguotitulo = Split(titulosiniciales, "|") IF (ME.Columns.Count < a + 1) OR a < 0 THEN Message.Error("Error en la columna introducida para ordenar") GOTO salidaordenar END IF FOR i = 0 TO ME.Columns.count - 1 IF Mid$(ME.Columns[i].text, 1, 3) = "" OR Mid$(ME.Columns[i].text, 1, 3) = "" THEN ME.Columns[i].Text = antiguotitulo[i] ENDIF NEXT ME.Columns[a].Text = "" & antiguotitulo[a]

'ver mtodo de ordenacion se puede mejorar mucho.... FOR i = 0 TO limite - 2 FOR j = i TO limite - 1 IF UCase$(ME[i, a].Text) <= UCase$(ME[j, a].Text) THEN FOR col = 0 TO ME.Columns.Count - 1 cambio1 = ME[j, col].Text ME[j, col].text = ME[i, col].Text ME[i, col].text = cambio1 NEXT END IF NEXT NEXT ME.Refresh() salidaordenar: ME.visible = TRUE END

Y guardamos, hacemos el ejecutable y cerramos el proyecto supergridviews. Ahora vamos a probarlo: Abrimos otra vez el programa pruebacomponente Y escribimos el siguiente cdigo en el Fmain:
PUBLIC SUB supergridviews1_Click() 'se restauran los titulo iniciales (quitamos la flechas) supergridviews1.restaurartitulosiniciales() END PUBLIC SUB supergridviews1_ColumnClick(Column AS Integer) 'ordenamos segn la columna del titulo donde hemos hecho click supergridviews1.ordenar(column) END

Pgina 41 de 66

Manual Bsico para crear componentes en Gambas2

Ejemplo el programa pruebacomponente:

Haciendo click en el ttulo de la columna Id, vemos como se ordena dicha columna (aparece una flecha, para indicarnos el orden de la ordenacin)

Si volvemos hacer click en el mismo ttulo, se cambia el sentido del orden y de la flecha.

Si pulsamos en otra columna, se ordenara por esa columna

Haciendo click en alguna celda, aparecen los ttulos iniciales (desaparece la flecha)

Pgina 42 de 66

Manual Bsico para crear componentes en Gambas2

11. Supergridviews: Aadiendo la funcin Copiar y Pegar del Portapapeles


Vamos a aadir dos nuevos procedimientos: copiar el contenido del supergridviews en el portapapeles para pegarlo en una hoja de calculo (por ejemplo) pegar el contenido del portapapeles en la tabla (por ejemplo una parte seleccionada de una hoja de calculo) Abrimos el componente supergridviews y pegamos en la seccin 4, el siguiente cdigo:
'----------------------------------------------------------------------' codigo que genera copiar al portapapeles '----------------------------------------------------------------------PUBLIC SUB copiaralportapapeles() DIM texto AS String DIM a AS Integer DIM b AS Integer IF ME.header = 1 OR ME.header = 3 THEN FOR a = 0 TO ME.Columns.count - 1 texto &= ME.Columns[a].Title & "\t" NEXT texto &= "\n" ENDIF FOR a = 0 TO ME.Rows.Count - 1 FOR b = 0 TO ME.Columns.count - 1 texto &= revisa(ME[a, b].text) & "\t" NEXT ' b texto &= "\n" NEXT 'a Clipboard.Copy(texto) Message.Info(("Copiado contenido al portapapeles")) END 'revisa que el punto decimal lo convierta en la coma decimal PRIVATE SUB revisa(cadena AS String) AS String DIM a AS Integer DIM letra AS String DIM devuelta AS String DIM prueba AS Integer 'compruebo si tiene solo numero FOR a = 1 TO Len(cadena) letra = Mid$(cadena, a, 1) prueba = InStr("0123456789.", letra) IF prueba = 0 THEN RETURN cadena 'contiene letras ENDIF NEXT FOR a = 1 TO Len(cadena) letra = Mid$(cadena, a, 1) IF letra = "." THEN letra = "," ENDIF devuelta &= letra NEXT

Pgina 43 de 66

Manual Bsico para crear componentes en Gambas2

RETURN devuelta END '----------------------------------------------------------------------------' codigo para pegar contenido del portapapeles al grid '----------------------------------------------------------------------------PUBLIC SUB pegardelportapapeles() 'titulos: 0: sin titulo, -1 titulo contiene la 1 fila DIM lineas AS String[] DIM linea_procesada AS String DIM columnas AS String[] DIM a AS Integer DIM c AS Integer DIM cadena AS String DIM portapapeles AS String DIM finlinea AS String DIM fincolumna AS String DIM titulos AS String DIM respu AS String DIM annadir AS Integer DIM antiguotitulo AS String[] finlinea = "\n" ' retorno de carro (separa las filas) fincolumna = "\t" 'tabulador (separa las colunas) respu = Message.Question(("Contiene titulos las columnas a pegar?"), "Si", "No") IF respu = "1" THEN titulos = -1 ELSE IF respu = "2" THEN titulos = 0 ELSE 'operacion cancelada GOTO finleer ENDIF ENDIF 'titulos: 0: sin titulo, -1 titulo contiene la 1 fila respu = Message.Question(("Desea sobreescribir los datos existentes?"), "Si", "No") portapapeles = Clipboard.paste() lineas = Split(portapapeles, finlinea) TRY columnas = Split(lineas[0], fincolumna) IF ERROR THEN Message.Error(("error al leer columnas")) GOTO finleer ENDIF IF respu = 1 THEN annadir = 0 ELSE annadir = ME.Rows.Count ENDIF IF TITULOS = -1 THEN ME.Rows.count = lineas.Count - 1 + annadir ' para sobreescribir IF TITULOS = 0 THEN ME.Rows.count = lineas.Count + annadir ' para sobreescribir

Pgina 44 de 66

Manual Bsico para crear componentes en Gambas2

linea_procesada = lineas[a] columnas = Split(linea_procesada, fincolumna) FOR c = 0 TO ME.Columns.count - 1 IF titulos = -1 THEN ME.Columns[c].title = columnas[c] ENDIF IF titulos = 0 THEN TRY ME[a + annadir, c].text = columnas[c] IF ERROR THEN Message.Error(("Producido un error al intentar pegar")) GOTO finleer ENDIF ENDIF NEXT FOR a = 1 TO ME.Rows.count - 1 linea_procesada = lineas[a] IF linea_procesada = "" THEN BREAK columnas = Split(linea_procesada, fincolumna) FOR c = 0 TO ME.columns.count - 1 ME[a + annadir + titulos, c].text = columnas[c] finnext: NEXT 'c NEXT 'a ME.Rows.count -= 1 'hemos pegado informacion, ya el gridvies esta desordenado FOR a = 0 TO ME.Columns.count - 1 IF Mid$(ME.Columns[a].text, 1, 3) = "" OR Mid$(ME.Columns[a].text, 1, 3) = "" THEN ME.Columns[a].Text = Mid$(ME.columns[a].text, 4, Len(ME.columns[a].text)) ENDIF NEXT 'refrescamos el contenido de la tabla ME.Refresh colorear() finleer: END

Bien ahora vamos al proyecto pruebacomponente, para ver como funcionan las dos nuevas subrutinas: Creamos dos botones en el formulario con el siguiente cdigo: (uno con el texto Copiar y otro con el texto Pegar) PUBLIC SUB Button2_Click() supergridviews1.copiaralportapapeles() END PUBLIC SUB Button3_Click() supergridviews1.pegardelportapapeles() END

Pgina 45 de 66

Manual Bsico para crear componentes en Gambas2

Quedara una cosa as:

Al pulsar click sobre el botn copiar, nos saldr

Si nos vamos a la hoja de calculo OpenOffice Calc y pulsamos Pegar (ctrl+v), nos saldr este cuadro de dilogo:

Y si le damos a aceptar, obtenemos:

Pgina 46 de 66

Manual Bsico para crear componentes en Gambas2

Ahora haremos el caso contrario pegar, seleccionamos un trozo de la tabla,y pulsamos copiar (ctrl+c), en la hoja de clculo.

Nos vamos a nuestro programa (pruebacomponente) y pulsamos en el botn Pegar, y nos saldr el siguiente cuadro de dilogo:

En nuestro caso no tenemos los ttulos y contestamos No

Ahora nos saldr otro cuadro de dilogo:

Le vamos a decir que no, osea, que lo aada al contenido actual de la rejilla, pulsando el botn No

Ahora vemos lo que ha ocurrido, se han insertado las dos lineas seleccionadas

Pgina 47 de 66

Manual Bsico para crear componentes en Gambas2

12. Supergridviews: Aadiendo la funcin convertir en html: .crearhtml


Para aadir esta procedimiento a supergridviews, necesitamos aadir un componente ms gb.desktop:

Sealamos en la pestaa componentes, gb.desktop

Y en la pestaa Requiere, agregamos gb.desktop.

Y pasamos a escribir el siguiente cdigo en la clase supergridviews, en la zona 4:


'------------------------------------------------------------------------'exportar a .html '------------------------------------------------------------------------PUBLIC SUB crearhtml(OPTIONAL ruta AS String) DIM archivo AS File DIM i, j AS Integer DIM titulo AS String 'la ruta es opcional IF ruta = "" THEN ruta = User.Home &/ "reporte.html" OPEN ruta FOR WRITE CREATE AS #archivo PRINT #archivo, "<html>" PRINT #archivo, "<head><title>" & ("Reporte en HTML") & "</title>" PRINT #archivo, "<?xml version=" & Chr$(34) & "1.0" & Chr$(34) & " encoding=" & Chr$(34) & "UTF-8" & Chr$(34) & "?>" & Chr$(13) PRINT #archivo, "<!DOCTYPE html PUBLIC " & Chr$(34) & "-//W3C//DTD XHTML 1.1//EN" & Chr$(34) & Chr$(13) PRINT #archivo, " " & Chr$(34) & "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" & Chr$(34) & ">" & Chr$(13) PRINT #archivo, " <HTML xmlns=" & Chr$(34) & "http://www.w3.org/1999/xhtml" & Chr$(34) & " xml:lang =" &

Pgina 48 de 66

Manual Bsico para crear componentes en Gambas2

Chr$(34) & "es" & Chr$(34) & ">" & Chr$(13) PRINT #archivo, "<meta http-equiv=" & Chr$(34) & "Content-Type" & Chr$(34) & " content =" & Chr$(34) & "text/html;charset =utf-8" & Chr$(34) & " /" & Chr$(13) & "</head>" PRINT #archivo, "<body topmargin='0' leftmargin='0'" PRINT #archivo, ">" PRINT #archivo, "<table border='1' width='500' cellpadding='4' cellspacing='0'>" PRINT #archivo, " <tr>" PRINT #archivo, " <td colspan='6' align='center'>" 'aqu escribimos el titulo del supergridviews (le hemos puesto: Listado) PRINT #archivo, " <h3>" & ("Listado") & "</h3>" PRINT #archivo, " </td>" PRINT #archivo, " </tr>" PRINT #archivo, " <tr>" 'imprime cabeceras PRINT #archivo, " <td align='center'>" & "<P STYLE=" & Chr$(34) & "background: silver" & Chr$(34)& ">" & ""& "</p>" & "</td>" 'escribe los titulos de las columnas FOR i = 0 TO ME.Columns.count - 1 titulo = ME.columns[i].title PRINT #archivo, " <td align='center'>" & "<P STYLE=" & Chr$(34) & "background: silver" & Chr$(34)& ">" & titulo & "</p>" & "</td>" NEXT 'imprime tabla en si PRINT #archivo, " </tr>" FOR i = 0 TO ME.rows.Count - 1 PRINT #archivo, " <td align='center'>" & "<P STYLE=" & Chr$(34) & "background: silver" & Chr$(34)& ">" & Str$(i + 1)& "</p>" & "</td>" FOR j = 0 TO ME.Columns.Count - 1 PRINT #archivo, " <td> " & "<P STYLE=" & Chr$(34) & "background: " & Hex$(ME[i, j].Background)& Chr$(34)& "><FONT COLOR=" & Chr$(34)& Hex$(ME[i, j].Foreground)& Chr$(34) & ">" & ME[i, j].Text & "</FONT></P>" & "</td> " NEXT PRINT #archivo, " </tr>"

Pgina 49 de 66

Manual Bsico para crear componentes en Gambas2

NEXT PRINT #archivo, "</table>" PRINT #archivo, "</body>" PRINT #archivo, "</html>" CLOSE #archivo ' con esta orden que pertenece a gb.desktop, abrimos con el navegador que tenga por determinado el equipo, el listado en .html Desktop.Open(ruta) END

Ahora probamos nuestra nuevo procedimiento. Abrimos el archivo pruebacomponente, le aadimos un botn al formulario y ponemos el siguiente cdigo: PUBLIC SUB Button1_Click() supergridviews1.crearhtml() END Al hacer click en el botn, obtenemos el siguiente resultado:

Nota: mi navegador por defecto es el Chromium.

Pgina 50 de 66

Manual Bsico para crear componentes en Gambas2

13. Crear el Paquete de Instalacin de nuestros componentes


Hasta ahora hemos trabajados con los componentes que hemos realizados en nuestro propio ordenador, pero que pasa si lo tenemos que darselo a otro usuario y que lo instale el en su ordenador?. Tendramos entonces tres casos: 1) Que haya instalado gambas2 con el centro de software de ubuntu 2) Que no tenga instalado gambas2, entonces Ubuntu proceder a instalar automticamente el paquete gambas2-runtime-2.19, actualmente (octubre de 2010) es el paquete que viene en los repositorios oficiales. Para estos dos casos, la solucin es sencilla, ya que desde el proyecto de componente, pulsamos en el men Proyecto/Crear/Paquete de Instalacin/

Es necesario poner el nombre del vendedor gambas2

Pgina 51 de 66

Manual Bsico para crear componentes en Gambas2

Nota: Elegimos dos opciones como mnimo (en este caso Debian y Ubuntu)

Definimos el Grupo/Admin para Debian

Y tambin el Grupo/Admin para Ubuntu

Elegimos el destino y pulsamos en Crear directorio para cada distribucin

Pgina 52 de 66

Manual Bsico para crear componentes en Gambas2

Y finalmente se crean los paquetes

Vemos como se han creado las carpetas y los archivos de instalacin para Ubuntu y Debian para el componente supergridviews

3) Caso que lo hallamos instalado con el script de jguardon. Para este caso lo tendramos que realizar a mano, o sea, con la estructura que sabemos que se crea de carpetas/accesos directo a archivos (ver pag 20, 32 y 33.), hacerlos de igual modo para nuestro componente. Esto lo podiamos hacer con un pequeo script con bash. Nota: En el caso de que instalemos por error el paquete .deb, Ubuntu instalara en gambas2-runtime-2.19, con lo cual estropear gambas2, y no nos funcionara. La solucin que he encontrado es desinstalar el runtime desde Synaptic, y ya tendremos otra nuestro gambas2.21 otra vez en funcionamiento. Pero el componente no aparecer.

Pgina 53 de 66

Manual Bsico para crear componentes en Gambas2

Anexo I: Explicacin de Soplo de controles


Entrada del foro:http://www.gambas-es.org/viewtopic.php?f=4&t=175&highlight=property Soplo y maikl Tu creas una clase nueva. Si te basas en una clase ya existente pones el inherits Luego aades la clasula export. Luego tienes que definir la constante _properties que es obligatoria. Esta constante proporciona informacin al IDE de como debe operar con esa propiedad. Tambin tienes que definir un icono para ese control en la caja de herramientas. Y por ltimo te tienes que poner a escribir cdigo para esas propiedades y mtodos. la constante _properties Luego pones la variable _properties que tiene el siguiente formato: Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _properties="*, propiedad1, propiedad2, ..., etc" cada propiedad en la lnea anterior lleva la siguiente informacin: Cdigo: [Descargar] [Ocultar] [Seleccionar] [-] Name [ { Kind [ Arguments ] } ] = Default El signo menos: Si una de las propiedades la declaras con un signo - significa que las quitas. Eso ocurre si usas un * para heredar todas las propiedades del padre, pero alguna de ellas no la quieres. Entonces la declaras como una mas pero con un signo menos. La clase puede valer lo siguiente: Color ---> un entero que representa a un color. Al verlo el IDE sacar un colorchooser para elegir el color Font ---> Una fuente. El IDE sacar un fontchooser para elegir una fuente. Path ---> Un path. El IDE sacar un filechooser para elegir un path Picture ---> Una imagen o un icono de stock. El IDE sacar un picturechooser para elegirla. Range ---> Una propiedad con valor entero y un valor mnimo y mximo. El IDE sacar un spinbox para elegirlo. Clase ---> En vez de los casos anteriores puedes poner el nombre de una clase que contenga una lista de constantes. Si no especificas clase entonces se utiliza el tipo de dato de la propiedad (string, ..., etc). Ejemplo Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _properties="Enabled=True,Font{Font},Background{Color}=1,Foreground{Color}=-1," & "mode{select.*}=Single,Handle,Tag" Esto declara las siguientes propiedades: Pgina 54 de 66

Manual Bsico para crear componentes en Gambas2

Una propiedad TAG que no tiene ningn valor inicial. Al no especificarle nada el IDE asumir su valor datatype especificado posteriormente. Una propiedad HANDLE que no tienen ningn valor inicial. Al no especificarle nada el IDE asumir su valor datatype especificado posteriormente y que como veremos es integer. Una propiedad ENABLED que inicialmente valdr TRUE Una propiedad FONT. No tiene un valor inicial y para seleccionar una fuente el IDE mostrar el fontchooser. Una propiedad BACKGROUND que tiene valor inicial -1 (no se que color es ese) y para elegirla el IDE usar el colorchooser. Una propiedad FOREGROUND que funciona igual que la anterior. Una propiedad MODE cuyos valores posibles estn definidos como constantes en una clase llamada 'select'. Tiene por valor por defecto 'single' que es el nombre de una de esas constantes de esa clase. Con ello habrs definido el nombre de las diversas propiedades que tendrs. el * se utiliza para heredar todas las propiedades de la clase padre si ests basando tu nueva clase en una ha existente que tendrs que heredar de la siguiente forma: Cdigo: [Descargar] [Ocultar] [Seleccionar] inherits nombre_clase Si una de las propiedades la declaras con un signo - significa que las quitas. Eso ocurre si usas un * para heredar todas las propiedades del padre, pero alguna de ellas no la quieres. Entonces la declaras como una mas pero con un signo menos. La constante DefaultEvent Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _DefaultEvent AS String = "Click" Si pones esto (no es obligatorio) entonces al estar en el IDE y hacer doble click para acceder al cdigo te saldr el evento click para escribir cdigo. La constante DefaultSize Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _DefaultSize AS String = "36,36" Es el tamao del control cuando lo pones en un formulario del IDE. En este caso es 36x36. La constante _DrawWith Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _DrawWith AS String = "TextBox" Cuando pongas un control de esta clase en el formulario del IDE pintar un textbox. La constante _Arrangement Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC CONST _Arrangement AS Integer = 2 ' Arrange.Vertical Es el arrange que tendrn sus hijos si se trata de un contenedor. En el caso propuesto es 2. Los Pgina 55 de 66

Manual Bsico para crear componentes en Gambas2

valores posibles son los de la clase arrange.class Solo se usa si el control es un container. El icono del componente En la caja de herramientas debe aparecer un icono del control para poder seleccionarlo. Para definirlo hacemos lo siguiente: En la raz del directorio del proyecto creamos una carpeta llamada control que contendr los iconos (deben ser png) y el nombre del icono debe ser el nombre de la clase. Implementacin de las propiedades Anteriormente se explic como declararlas para el IDE. Esto es el icono que tendr en la caja de herramientas o la manera en que el IDE debe ofrecernos dar valores a las propiedades o el valor por defecto que tendrn. Pero llega el momento en que hay que escribir cdigo de lo que esas propiedades hacen. Una propiedad ser de tipo string o integer o lo que sea. Cdigo: [Descargar] [Ocultar] [Seleccionar] PROPERTY Enabled AS Boolean PROPERTY READ Handle AS Integer ... PRIVATE $bEnabled AS Boolean PRIVATE $iHandle AS Integer ' Implements the Enabled property FUNCTION Enabled_Read() AS Boolean RETURN $bEnabled END SUB Enabled_Write(bEnabled AS Boolean) $bEnabled = bEnabled UpdateEverything END ' Implements the Handle property FUNCTION Handle_Read() AS Integer RETURN $iHandle END En este caso implementamos la propiedad ENABLED que es de tipo boolean. Cdigo: [Descargar] [Ocultar] [Seleccionar] PROPERTY Enabled AS Boolean y tambin definimos una propiedad handle que es de tipo entero y de solo lectura Cdigo: [Descargar] [Ocultar] [Seleccionar] PROPERTY READ Handle AS Integer Pgina 56 de 66

Manual Bsico para crear componentes en Gambas2

Recuerdo que en _properties se escribi una propiedad enabled=true osea que el ide pondr el valor true a una propiedad enabled que ahora definimos como boolean. Como la propiedad ENABLED es de lectura escritura esta ser la funcin para el caso de lectura (nota el _Read) Cdigo: [Descargar] [Ocultar] [Seleccionar] FUNCTION Enabled_Read() AS Boolean RETURN $bEnabled END Y esta ser la funcin de escritura para ENABLED (nota el _write) Cdigo: [Descargar] [Ocultar] [Seleccionar] SUB Enabled_Write(bEnabled AS Boolean) $bEnabled = bEnabled UpdateEverything END La variable $bEnabled es una variable privada y UpdateEverything es un mtodo privado de esta clase. La funcin handle es de solo lectura as que solo tiene funcin _read Cdigo: [Descargar] [Ocultar] [Seleccionar] FUNCTION Handle_Read() AS Integer RETURN $iHandle END Tras la codificacin de las propiedades vendran los mtodos uno de los cuales ser un mtodo privado llamado UpdateEverything Cdigo: [Descargar] [Ocultar] [Seleccionar] PRIVATE SUB UptadeEverything() ... END Y otros sern pblicos y devolvern valores Cdigo: [Descargar] [Ocultar] [Seleccionar] PUBLIC FUNCTION Ordenar(MiArray as string[]) as string[] ... return MiArray END As que en definitiva un componente nuevo que se base en un textbox y que admita la propiedad locked que sea boolean y por defecto false sera as: Cdigo: [Descargar] [Ocultar] [Seleccionar] Pgina 57 de 66

Manual Bsico para crear componentes en Gambas2

inherits textbox export PUBLIC CONST _properties="*,locked=false" 'el * hereda todas las propiedades de textbox PUBLIC CONST _DefaultEvent AS String = "Keypress" 'el evento por defecto en el IDE es keypress PUBLIC CONST _DrawWith AS String = "TextBox" 'se pinta como un textbox PROPERTY Locked AS Boolean PRIVATE FUNCTION Locked_read() ... END PRIVATE FUNCTION Locked_write() ... END y aqu comenzara la declaracin de mtodos Adems crearemos un icono para la caja de herramientas, lo dejaremos en la carpeta controls, ser de tipo png y tendr por nombre el de la clase "miclase.png" Con esto habremos conseguido un nuevo textbox que se llame como sea y que adems de las propiedades del textbox tenga una propiedad nueva llamada locked que puede valer true o false y que hace lo que corresponda segn locked_read al leer o locked_write al escribirla.(por ejemplo en este caso anular el keypress) cuando sea true Se trata de agregar la informacin global del nuevo componente. Cuando vas a proyecto y propiedades para agregar algn nuevo componente aparece una lista que puedes elegir donde cada componente tiene una descripcin y unos requerimientos. Se trata de completar esa informacin. Se hace en Proyecto - Propiedades Pestaa Provee Por cada clase hay que especificar el tipo y el grupo. El tipo es si es un control y que clase de control. Los distintos tipos son: class ----> una clase normal que no es un control control --> un control que no es un container virtual ---> Es una clase que puede ser puesta en el formulario y hace cosas pero no muetra nada (ej. el timer). container ---> pues eso multicontainer ----> un control container que contiene otros container pero solo uno visible a la vez como por ejemplo el tabstrip form ---> solo posible en gambas 3 para especificar alguna nueva clase de formulario. El grupo es el nombre de la pestaa de la caja de herramientas donde este contrl estar includo (containers, form, network, ..., etc). La pestaa requiere Pgina 58 de 66

Manual Bsico para crear componentes en Gambas2

Aqu se anotan las dependencias de componentes de este nuevo componente. Por ejemplo quiz hemos hecho un componente que requiere gb.settings. Hay cuatro opciones. Activar una de ellas (por ejemplo gestin grfica de formularios) supone que requerimos los componentes bsicos para la gestin grfica de formularios sean cuales fueren. Si por alguna razn necesitamos uno concreto (quiz porque es uno propio) podemos agregarlo un poquito mas abajo en la opcin de componentes. en principio con las cuatro opciones anteriores no debiera ser necesario cuando se trata de componentes nativos de gambas. Instalacin Basta con hacer el ejecutable y aparecer en la lista de componentes de las propiedades de un proyecto.

Pgina 59 de 66

Manual Bsico para crear componentes en Gambas2

Anexo 2: Script de instalacin de Gambas2 realizado por jguardon


Con este script instalamos la versin ms actual SVN de Gambas2
#!/bin/bash initcolor() { esc="\033" rojo="${esc}[31m${esc}[1m" verde="${esc}[32m${esc}[1m" amarillo="${esc}[33m${esc}[1m" negrita="${esc}[1m" reset="${esc}[0m" } initcolor echo -e "${amarillo} Vamos a instalar la ltima versin SVN de Gambas2${reset}" echo '' echo -e "${rojo} Por favor, introduce tu password de root:${reset}" stty_orig=`stty -g` stty -echo read PASS stty $stty_orig clear echo -e "${rojo} Se borrarn los archivos antiguos, Deseas continuar?${reset}" OPTIONS="Si No" select opt in $OPTIONS; do if [ "$opt" = "No" ]; then echo 'Saliendo' exit elif [ "$opt" = "Si" ]; then echo -e "${rojo} Borrando archivos...${reset}" echo $PASS | sudo -S rm -rv /usr/local/lib/gambas2 /usr/local/share/gambas2 sudo rm -v /usr/local/bin/gbr2 /usr/local/bin/gbx2 /usr/local/bin/gbs2* /usr/local/bin/gbi2 /usr/local/bin/gbc2 \ /usr/local/bin/gba2 sudo rm -v /usr/local/bin/gambas2* clear break else echo -e "${negrita} Opcion Incorrecta, 1) Borrar, 2) Salir${reset}" fi done echo -e "${verde} Gambas2 se ha eliminado del sistema${reset}" echo '' echo -e "${amarillo} Ahora vamos a descargar la ltima revisin del cdigo fuente${reset}" echo -e "${amarillo} Comprobar si 'subversion' est instalado, si no, se instalar ahora${reset}" SVN=$(which svn) if [ -z $SVN ]; then echo -e "${verde} Instalando Subversion...${reset}" echo $PASS | sudo -S apt-get --assume-yes install subversion fi echo '' echo -e "${verde} SVN Instalado, creando directorio...${reset}" cd ~ rm -rf ~/2.0 mkdir 2.0 release="`cat /etc/lsb-release 2>/dev/null | grep CODENAME | awk -F= '{print $2}'`"

Pgina 60 de 66

Manual Bsico para crear componentes en Gambas2

echo -e "${amarillo} Instalando las dependencias de desarrollo para $release...${reset}" sleep 3 case $release in hardy) echo $PASS | sudo -S apt-get --assume-yes install build-essential g++ automake autoconf libbz2-dev \ libgnorba-dev libfbclient2 libmysqlclient15-dev unixodbc-dev libpq-dev libsqlite0-dev \ libgtk2.0-dev libldap2-dev libcurl3-dev libgtkglext1-dev libqt3-mt-dev kdebase-dev \ libpcre3-dev libsdl-sound1.2-dev libsdl-mixer1.2-dev libsdl-image1.2-dev libsage-dev \ libxml2-dev libxslt1-dev build-essential libbonobo2-dev libcos4-dev libomniorb4-dev \ firebird2.0-dev librsvg2-dev libpoppler-dev libpoppler-dev libpoppler-glib-dev \ libasound2-dev libartsc0-dev libesd0-dev libesd-alsa0 libdirectfb-dev libaa1-dev \ libarts1-dev kdelibs4-dev libffi4-dev libxtst-dev gettext libsqlite3-dev ;; intrepid) echo $PASS | sudo -S apt-get --assume-yes install build-essential autoconf libbz2-dev libgnorba-dev \ libmysqlclient15-dev unixodbc-dev libpq-dev libsqlite0-dev libsqlite3-dev libgtk2.0-dev \ libldap2-dev libcurl4-gnutls-dev libgtkglext1-dev libpcre3-dev libsdl-sound1.2-dev \ libsdl-mixer1.2-dev libsdl-image1.2-dev libsage-dev libxml2-dev libxslt1-dev libbonobo2-dev \ libcos4-dev libomniorb4-dev librsvg2-dev libpoppler-dev libpoppler-glib-dev libasound2-dev \ libartsc0-dev libesd0-dev libesd-alsa0 libdirectfb-dev libaa1-dev libarts1-dev libxtst-dev \ libffi-dev kdelibs4-dev firebird2.1-dev libqt4-dev libfbclient2 ;; jaunty) echo $PASS | sudo -S apt-get --assume-yes install build-essential autoconf libbz2-dev libgnorba-dev \ libfbclient2 libmysqlclient15-dev unixodbc-dev libpq-dev libsqlite0-dev libsqlite3-dev \ libgtk2.0-dev libldap2-dev libcurl4-gnutls-dev libgtkglext1-dev libpcre3-dev libsdl-sound1.2-dev \ libsdl-mixer1.2-dev libsdl-image1.2-dev libsage-dev libxml2-dev libxslt1-dev libbonobo2-dev \ libcos4-dev libomniorb4-dev librsvg2-dev libpoppler-dev libpoppler-glib-dev libasound2-dev \ libesd0-dev libesd-alsa0 libdirectfb-dev libaa1-dev libxtst-dev libffi-dev kdelibs4-dev \ firebird2.1-dev libqt4-dev libglew1.5-dev libimlib2-dev libv4l-dev libsdl-ttf2.0-dev ;; karmic|lucid) echo $PASS | sudo -S apt-get --assume-yes install build-essential autoconf libbz2-dev libfbclient2 \ libmysqlclient15-dev unixodbc-dev libpq-dev libsqlite0-dev libsqlite3-dev libgtk2.0-dev \ libldap2-dev libcurl4-gnutls-dev libgtkglext1-dev libpcre3-dev libsdl-sound1.2-dev \ libsdl-mixer1.2-dev libsdl-image1.2-dev libsage-dev libxml2-dev libxslt1-dev libbonobo2-dev \ libcos4-dev libomniorb4-dev librsvg2-dev libpoppler-dev libpoppler-glib-dev libasound2-dev \ libesd0-dev libesd-alsa0 libdirectfb-dev libaa1-dev libxtst-dev libffi-dev kdelibs4-dev \ firebird2.1-dev libqt4-dev libglew1.5-dev libimlib2-dev libv4l-dev libsdl-ttf2.0-dev ;; maverick) echo $PASS | sudo -S apt-get --assume-yes install build-essential autoconf libbz2-dev libfbclient2 \ libmysqlclient-dev unixodbc-dev libpq-dev libsqlite0-dev libsqlite3-dev libgtk2.0-dev libldap2-dev \ libcurl4-gnutls-dev libgtkglext1-dev libpcre3-dev libsdl-sound1.2-dev libsdl-mixer1.2-dev \ libsdl-image1.2-dev libsage-dev libxml2-dev libxslt1-dev libbonobo2-dev libcos4-dev libomniorb4-dev \ librsvg2-dev libpoppler-dev libpoppler-glib-dev libasound2-dev libesd0-dev libdirectfb-dev libaa1-dev \ libxtst-dev libffi-dev kdelibs4-dev firebird2.1-dev libqt4-dev libglew1.5-dev libimlib2-dev libv4l-dev \ libsdl-ttf2.0-dev libgnome-keyring-dev libgdk-pixbuf2.0-dev ;; *) echo -e "${rojo} No se cumplen los requisitos, pulsa 'intro' para salir.${reset}" read exit ;; esac echo ''

Pgina 61 de 66

Manual Bsico para crear componentes en Gambas2

echo -e "${amarillo} Descargando ltima revisin, espera por favor...${reset}" svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/branches/2.0 cd 2.0 echo '' echo -e "${verde} Descargado, comenzando tareas de configuracin y compilado${reset}" sleep 3 ./reconf-all echo '' echo -e "${rojo} Configurando...${reset}" sleep 3 ./configure -C echo '' echo -e "${rojo} Compilando...${reset}" sleep 3 make echo '' echo -e "${rojo} Instalando...${reset}" sleep 3 echo $PASS | sudo -S make install echo '' echo -e "${verde} Proceso completo. Ahora puedes iniciar Gambas2 desde la consola o men${reset}" echo -e "${amarillo} Pulsa intro para salir${reset}" read

Pgina 62 de 66

Manual Bsico para crear componentes en Gambas2

Anexo 3: Desinstalar Gambas2.


Tendremos dos casos: a) Cuando lo hemos instalado desde Centro de Software de Ubuntu Nos vamos al Centro de Software y nos vamos a Software instalado y hacemos click en Desinstalar

b) Con el script de jguardon. Aqu teneis la parte del script de jguardon que desinstala gambas2 :
#!/bin/bash initcolor() { esc="\033" rojo="${esc}[31m${esc}[1m" verde="${esc}[32m${esc}[1m" amarillo="${esc}[33m${esc}[1m" negrita="${esc}[1m" reset="${esc}[0m" } initcolor echo -e "${amarillo} Desinstalando la versin de Gambas2 instalada por script de jguardon${reset}" echo '' echo -e "${rojo} Por favor, introduce tu password de root:${reset}" stty_orig=`stty -g` stty -echo read PASS stty $stty_orig clear echo -e "${rojo} Se borrarn los archivos antiguos, Deseas continuar?${reset}" OPTIONS="Si No" select opt in $OPTIONS; do if [ "$opt" = "No" ]; then echo 'Saliendo'

Pgina 63 de 66

Manual Bsico para crear componentes en Gambas2

exit elif [ "$opt" = "Si" ]; then echo -e "${rojo} Borrando archivos...${reset}" echo $PASS | sudo -S rm -rv /usr/local/lib/gambas2 /usr/local/share/gambas2 sudo rm -v /usr/local/bin/gbr2 /usr/local/bin/gbx2 /usr/local/bin/gbs2* /usr/local/bin/gbi2 /usr/local/bin/gbc2 \ /usr/local/bin/gba2 sudo rm -v /usr/local/bin/gambas2* clear break else echo -e "${negrita} Opcion Incorrecta, 1) Borrar, 2) Salir${reset}" fi done echo -e "${verde} Gambas2 se ha eliminado del sistema${reset}"

Pgina 64 de 66

Manual Bsico para crear componentes en Gambas2

ndice alfabtico
Cannot load name class. Unable to load clase file...............................................................................4 clase de inicio.....................................................................................................................................15 crear el ejecutable.........................................................................................................................18, 28 Debian.............................................................................................................................................52 s. El icono del componente....................................................................................................................56 gb.desktop.....................................................................................................................................48, 50 gb.settings...........................................................................................................................................59 home/uno/.local/lib/gambas2/............................................................................................................20 home/uno/.local/share/........................................................................................................................20 Implementacin de las propiedades ...................................................................................................56 Instalar en el directorio de componentes del usuario.........................................................................19 la pestaa Provee.............................................................................................................................18 la pestaa Requiere.........................................................................................................................18 Los controles en formularios son pblicos.........................................................................................38 Mantener informacin de depuracin en el ejecutable.......................................................................19 nota ....................................................................................................................................................57 Nota ....................................................................................................................................18, 31 s., 36 Nota Importante:.................................................................................................................18, 31 s., 36 Nota:....................................................................................................................................13, 50, 52 s. Pestaa Provee...................................................................................................................................28 Pestaa Requiere...............................................................................................................................28 pestaa Opciones................................................................................................................................17 Pestaa Opciones..........................................................................................................................27, 38 Pestaa Provee ...................................................................................................................................58 Proyecto/Crear/ Ejecutable.................................................................................................................28 Proyecto/Crear/Crear ejecutable.........................................................................................................18 Proyecto/Crear/Paquete de Instalacin/..............................................................................................51 Proyecto/Propiedades..................................................................................................17, 21, 27 ss., 38 Proyecto/Propiedades/Componentes............................................................................................21, 29 Proyecto/Propiedades/Pestaa Opciones............................................................................................27 Simbolos en mdulos son publicos....................................................................................................38 STOP EVENT.............................................................................................................................8, 39 s. tag2................................................................................................................................13, 15, 21 s., 36 Tag2........................................................................................................................................15, 34, 36 ubuntu.................................................................................................................................................51 Ubuntu...........................................................................................................................3, 32, 51 ss., 63 vendedor gambas2..........................................................................................................................51 zona ..............................................................................................................................................39, 48 zonas o secciones................................................................................................................................36 /home/uno.......................................................................................................................................18 /home/usuario..................................................................................................................................18 copiar...............................................................................................................................................47 Copiar..............................................................................................................................................45 Crear directorio para cada distribucin...........................................................................................52 Pgina 65 de 66

Manual Bsico para crear componentes en Gambas2

Gestin grfica de formularios........................................................................................................18 Internalizacin.................................................................................................................................13 pegar................................................................................................................................................47 Pegar..........................................................................................................................................45 ss. Programacin de un componente ...................................................................................................13 /usr/local...............................................................................................................................................4 \home\uno\.local\lib\gambas2............................................................................................................32 \home\uno\.local\share\gambas2........................................................................................................32 $PREFIX/lib/gambas2..........................................................................................................................4

Pgina 66 de 66

You might also like