<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.41">
 <META NAME="LFCATEGORY" CONTENT="SoftwareDevelopment">
 <link rel="icon" href="../../common/images/lf-16.png" type="image/png">
 <TITLE>lf329, SoftwareDevelopment: Gambas: Basic para Linux</TITLE>
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-family:monospace,Courier }
 pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; 
           border-style:none; border-width:medium; border-color:#FFD700; 
           padding:0.5cm;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; 
          border-style:none; border-width:medium; border-color:#aedbe8; 
          padding:0.1cm;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; 
          border-width:medium; border-color:#AAAAAA; padding:0.5cm ; 
          margin-top:0.1cm; margin-right:1cm; margin-left:1cm; 
          text-align:center }
 .mark  { background-color:#e6e6ff }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- this is used by a number of tools:
 =LF=AUTHOR: Jon&aacute;s Alvarez
 =LF=CAT___: SoftwareDevelopment
 =LF=TITLE_: Gambas: Basic para Linux
 =LF=NUMBER: 329
 =LF=ANAME_: article329.shtml
 -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar, style=2 -->
 <!-- top navegation bar -->
 <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif"
           alt="[LinuxFocus-icon]" width="319" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE summary="topbar_1_links" width="100%">
               <TR align="right">
                 <TD class="top">
                 <A class="nodec" href="index.shtml"><FONT color=
                 "#DDDDDD" size="2">&lt;--</FONT></A> &nbsp;| 
                 <A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD" size="2">Hogar</FONT></A> &nbsp;| 
                 <A class="nodec" href="../map.html"><FONT color=
                 "#DDDDDD" size="2">Mapa</FONT></A> &nbsp;| 
                 <A class="nodec" href="../indice.html"><FONT color=
                 "#DDDDDD" size="2">Indice</FONT></A> &nbsp;| 
                 <A class="nodec" href="../Search/index.html"><FONT color=
                 "#DDDDDD" size="2">Busqueda</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Noticias</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Arca</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../Links/index.html"><FONT color=
           "#FFFFFF">Enlaces</FONT></A> </TD>
           <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD>
           <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">Sobre LF</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Este documento est&aacute; disponible en los siguientes idiomas: <A href="../../English/March2004/article329.shtml">English</a> &nbsp;<A href="../../Castellano/March2004/article329.shtml">Castellano</a> &nbsp;<A href="../../ChineseGB/March2004/article329.shtml">ChineseGB</a> &nbsp;<A href="../../Deutsch/March2004/article329.shtml">Deutsch</a> &nbsp;<A href="../../Francais/March2004/article329.shtml">Francais</a> &nbsp;<A href="../../Russian/March2004/article329.shtml">Russian</a> &nbsp;<A href="../../Turkce/March2004/article329.shtml">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0  WIDTH="190" summary="about the author">
<TR>
<TD>

<IMG SRC="../../common/images2/JonasAlvarez.jpg">
<BR>por  Jon&aacute;s Alvarez <br> <small>&lt;jalvarez(en)eitb.com&gt;</small>
<BR><BR>
<I>Sobre el autor:</I><BR>
<!-- aboutauthor_start -->
<P>
Jon&aacute;s Alvarez ha trabajado como programador de aplicaciones
en entornos UNIX y Windows durante varios a&ntilde;os. Entre otras cosas,
ha dado varios cursos de Sistemas Operativos, redes y programaci&oacute;n.
</P>
<!-- aboutauthor_stop -->
<!-- TRANSLATED TO es -->
<!-- TRANSLATED TO STOP -->
<BR><i>Contenidos</i>:
<UL>
  <LI><A HREF="#329lfindex0">Introducci&oacute;n</A></LI>
  <LI><A HREF="#329lfindex1">A qui&eacute;n le puede interesar</A></LI>
  <LI><A HREF="#329lfindex2">El ejemplo</A></LI>
  <LI><A HREF="#329lfindex3">Y lo mejor: Gambas es multilenguaje, como debe ser</A></LI>
  <LI><A HREF="#329lfindex4">Conclusi&oacute;n</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=329">Formulario de "talkback" para este art&iacute;culo</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<table border="0"><tr><td>
<H2>Gambas: Basic para Linux</H2>
 <img src="../../common/images2/article329/gamba.png" ALT="Dibujo de una gamba...">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Resumen</i>:
<P>
<!-- articleabstract_start -->
<p>
Gambas es uno de los Basic disponibles hoy en d&iacute;a para Linux.
En este art&iacute;culo desarrollamos un ejemplo en el que vemos
su simplicidad y potencia para tareas cotidianas.
</p>
<!-- articleabstract_stop -->

<br><!-- HR divider --><center><font color="#8282e0"><b>_________________ _________________ _________________</b></font></center><br>
</td></tr></table>
<!-- BODY OF THE ARTICLE -->


<A NAME="329lfindex0">&nbsp;</A>
<H2>Introducci&oacute;n</H2>


<P>
Uno de los lenguajes de programaci&oacute;n m&aacute;s extendidos
y f&aacute;ciles de usar, sobre todo para los principiantes, es el
Basic. Hasta ahora el entorno m&aacute;s habitual para el desarrollo
de aplicaciones Basic era el IDE del Visual Basic de Microsoft.
&Uacute;ltimamente se est&aacute; extendiendo el uso de Linux
hasta el escritorio del usuario. De estar limitado a servidores y ser
manejado &uacute;nicamente por gur&uacute;s, est&aacute; pasando a
ser el sistema operativo que encontramos en los ordenadores de los
clientes, dando respuesta a necesidades tales como poder leer el
correo electr&oacute;nico, navegar por la web y editar textos. En esa
tendencia nos encontramos varios entornos de desarrollo. El que vamos
a tratar en este art&iacute;culo es Gambas, un entorno gr&aacute;fico
de desarrollo en Basic. Con un estilo de programaci&oacute;n muy
parecido a Visual Basic, como veremos m&aacute;s adelante, tiene
tambi&eacute;n sus <A HREF="http://www.binara.com/gambas-wiki/bin/view/Gambas/DifferencesFromVB">diferencias</A>.
La versi&oacute;n que voy a emplear es la 0.64a, incluida en mi
distribuci&oacute;n SuSE 9.0. En el momento de escribir estas l&iacute;neas
en la <A HREF="http://gambas.sourceforge.net/">p&aacute;gina del
proyecto</A> van por la 0.81, aunque esto no debe afectar a lo que
sigue.
</P>

<A NAME="329lfindex1">&nbsp;</A>
<H2>A qui&eacute;n le puede interesar</H2>


<P>
Como programador durante un tiempo de aplicaciones en Visual
Basic, no he necesitado m&aacute;s que ponerme a ello para
desarrollar este ejemplo. Adem&aacute;s es la primera vez que toco
Gambas, lo que demuestra que para cualquiera que haya usado alguna
vez VB es m&aacute;s que suficiente. Para los dem&aacute;s, puede
valer como ejemplo de lo sencillo que es el Basic para muchas cosas.
</P>

<A NAME="329lfindex2">&nbsp;</A>
<H2>El ejemplo</H2>


<P>
Como el movimiento se demuestra andando, vamos a verlo con un
ejemplo. Se trata de una aplicaci&oacute;n sencillita que tiene un
cron&oacute;metro con una cuenta atr&aacute;s en pantalla. Podemos
cambiar el tiempo del crono, detenerlo y arrancarlo cuando queramos.
Al meollo.
</P>

<P>
Nada m&aacute;s abrir Gambas nos encontramos con su asistente:
</P>

<P>
<IMG SRC="../../common/images2/article329/BienvenidoAGambas.png" border=0>
</P>

<P>
Elegimos <B>Nuevo Proyecto</B>. En la siguiente ventana, en el
<B>Paso 1</B> nos pide <B>Nombre del Proyecto</B>. Nuestro proyecto
se llamar&aacute; <I>CuentaAtras</I>. En el <B>Paso 2</B> debemos
elegir la <B>Carpeta del Proyecto</B>. Seleccionamos nuestro
directorio de trabajo, y en la caja de edici&oacute;n de la parte
inferior, escribimos el nombre de la carpeta que vamos a crear.
</P>

<P>
<IMG SRC="../../common/images2/article329/NuevoProyecto.png" border=0>
</P>

<P>
Si es la primera vez que abrimos Gambas o no hemos desactivado la
opci&oacute;n, veremos los Consejos del d&iacute;a. Leemos lo que nos
interese y cerramos su ventana. Ya estamos en el entorno dispuestos a
empezar a trabajar. Vemos varias ventanas en nuestro escritorio. Si
estamos en el entorno gr&aacute;fico KDE, con varios
escritorios, seguramente nos interesar&aacute; dedicar uno de estos a
Gambas y as&iacute; tendremos todas sus ventanas controladas.
Personalmente una de las primeras opciones que suelo activar en KDE,
es que en cada escritorio s&oacute;lo me aparezcan sus iconos.</P>
<P>Vamos a crear el formulario principal de la aplicaci&oacute;n.
Para ello, en cualquier parte de la ventana del Proyecto hacemos
clic con en bot&oacute;n derecho del rat&oacute;n y creamos un
formulario nuevo.
</P>

<P>
<IMG SRC="../../common/images2/article329/NuevoFormulario.png" border=0>
</P>

<P>
En el di&aacute;logo posterior le indicamos el nombre del
formulario, en este caso <I>FCuentaAtras</I>, con todos los valores
por defecto.
</P>

<P>
<IMG SRC="../../common/images2/article329/NuevoFormularioDialogo.png" border=0>
</P>

<P>
Ya tenemos nuestro primer formulario, que por ahora est&aacute;
vacio.
</P>

<P>
<IMG SRC="../../common/images2/article329/FCuentaAtras0.png" border=0>
</P>

<P>
Aqu&iacute; vamos a incluir los controles que va a tener nuestro
cron&oacute;metro. Hacemos clic en los elementos de la barra de
herramientas que incluiremos en nuestro formulario. Si pasamos el
rat&oacute;n por encima de cada control veremos su nombre. Con doble
clic se situar&aacute; al control en la parte superior izquierda del
formulario. Con un s&oacute;lo clic pondremos el control,
cambi&aacute;ndolo de tama&ntilde;o, en la parte del formulario que
queramos. Para nuestro programa vamos a necesitar un Label, un
TextBox, un Timer, dos Button y un ToggleButton.
</P>

<P>
<IMG SRC="../../common/images2/article329/BarraDeControles.png" border=0>
</P>

<P>
Una vez situados todos los controles nos debe quedar algo parecido
a esto (m&aacute;s o menos, cada uno lo puede poner como le d&eacute;
la gana):
</P>

<P>
<IMG SRC="../../common/images2/article329/FCuentaAtras1.png" border=0>
</P>

<P>
Una vez que tenemos los controles en nuestro formulario les
cambiamos los nombres por algo que tenga l&oacute;gica para nosotros. Para ello editamos
la propiedad <B>Name</B> de la <B>Hoja de Propiedades</B>. Si no
vemos la <B>Hoja de Propiedades</B> en pantalla podemos activarla
desde la ventana del proyecto en el bot&oacute;n al efecto. Para
buscarlo pasamos el rat&oacute;n por encima de los botones y as&iacute;
localizaremos el que buscamos.
</P>

<P>
Al control <I>Label1</I> le llamo <I>lblContador:</I> hago un
clic en el control y a continuaci&oacute;n puedo cambiar su nombre
en la <B>Hoja de Propiedades</B>. Para ello edito la propiedad <B>Name</B>
y le pongo como valor <I>lblContador.</I> Despu&eacute;s cambio su
tipo de letra por otro m&aacute;s grande y visible ya que va a
visualizar el cron&oacute;metro en esta cuenta descendente. Para
ello, en el bot&oacute;n ... de su propiedad <B>Font</B> elijo el
Tipo de Letra <I>Courier Bold de 72</I> y Acepto (<B>OK</B>). De la
misma manera, al <I>ToggleButton1</I> le cambio el nombre por
<I>tglFuncionando</I>. Al control <I>TextBox1</I> le llamo
<I>txtSegundos</I>, al control <I>Timer1 </I>le llamo <I>clkMiReloj</I>,
a <I>Button1</I> <I>cmdPonerSegundos</I> y por &uacute;ltimo renombro
<I>Button2</I> por <I>cmdSalir</I>. Adem&aacute;s cambio el <B>Alignment</B>
de <I>txtSegundos</I> por <I>Right</I>.
</P>

<P>
Y empezamos con el c&oacute;digo Basic. Es muy sencillo y no es
muy estricto en lo que se refiere a la sintaxis. Lo primero que vamos
a hacer es cambiar los textos que vemos en el formulario por valores
m&aacute;s reales. Aunque muchas de las opciones se est&aacute;n
cambiando desde Basic, tambi&eacute;n lo podr&iacute;amos haber hecho
en la misma hoja de propiedades de cada control, con cualquiera de
las opciones obtendr&iacute;amos el mismo efecto.
</P>

<P>
Nada mas abrirse el formulario rellenamos los t&iacute;tulos que
queremos que tenga cada control. Al decir <I>nada mas abrirse el
formulario</I> estamos hablando de manejar un evento: la apertura del
formulario. Para ello hacemos doble clic en una parte de nuestro
formulario que no tenga ning&uacute;n control. Se abre una ventana de
edici&oacute;n y se sit&uacute;a el cursor dentro de un procedimiento
nuevo: <B>Public Sub Form_Open()</B> (si hemos programado
anteriormente en Visual Basic, hubi&eacute;ramos empleado el evento
Form_Load). Vamos a hacer que el control <I>lblContador</I> presente
los segundos restantes de la cuenta atr&aacute;s. Las primeras l&iacute;neas
de c&oacute;digo de la clase formulario en la que nos encontramos
quedan de esta manera:
</P>

<pre class="code">
' Gambas class file
CONST fSegundosPorDefecto AS Float=120.0
fSegundos AS Float

PRIVATE SUB VerValores()
  DIM nMinutos AS Integer

  nMinutos = Int(Int(fSegundos) / 60)
  lblContador.Caption = nMinutos &amp; &quot;:&quot; &amp; Format (fSegundos - nMinutos * 60, &quot;00.0&quot;)
END

PRIVATE SUB VerActivarDesactivar()
  IF tglFuncionando.Value THEN
    tglFuncionando.Text = (&quot;&amp;Detener&quot;)
  ELSE
    tglFuncionando.Text = (&quot;&amp;Arrancar&quot;)
  ENDIF
END

PUBLIC SUB Form_Open()
  fSegundos = fSegundosPorDefecto
  VerValores
  tglFuncionando.Value = FALSE
  VerActivarDesactivar
  txtSegundos.Text = fSegundos
  cmdPonerSegundos.Text = (&quot;&amp;Reiniciar&quot;)
  cmdSalir.Text = (&quot;&amp;Salir&quot;)
END
</pre>

<P>
Hemos a&ntilde;adido despu&eacute;s del comentario que nos hab&iacute;a
generado Gambas, ' <I>Gambas class file</I>, una constante que
contiene el n&uacute;mero de segundos por defecto de la cuenta atr&aacute;s,
<I>fSegundosPorDefecto</I>, con un valor de 120 segundos (dos
minutos), y una variable, <I>fSegundos</I> que va a contener la
cuenta atr&aacute;s. Hemos creado tambi&eacute;n dos procedimientos:
<I>VerValores</I>, que visualiza los valores de la cuenta atr&aacute;s,
y <I>VerActivarDesactivar</I>, que cambia el texto del bot&oacute;n
de Marcha/Paro.
</P>

<P>
En este momento ya tenemos un formulario que funciona. No hace
nada &uacute;til, a parte de hacernos entender lo que hemos hecho
hasta ahora, por lo que vale la pena que lo probemos. Guardamos los
cambios a todo desde la ventana principal del proyecto, <I>Proyecto &ndash;
CuentaAtras</I>, y arrancamos la aplicaci&oacute;n con <B>F5</B>, o
con el bot&oacute;n <B><I>Ejecutar</I></B> de la barra de botones de
la misma ventana. Esto es lo que debemos ver:
</P>

<P>
<IMG SRC="../../common/images2/article329/FCuentaAtras2.png" border=0>
</P>

<P>
Si no se parece a esto o nos da cualquier error debemos revisar lo
que hemos hecho hasta ahora. Aunque pulsemos <B>Arrancar</B>,
<B>Reiniciar</B> o <B>Salir</B> no ocurre nada. Esa ser&aacute;
nuestra siguiente tarea: asignar eventos a estos botones para que
cuando el usuario pulse cualquiera de ellos esto se mueva. Antes de
seguir jugamos un poco con nuestra aplicaci&oacute;n y descubrimos
todo lo que ya contiene. Para cerrarla pulsamos en la X de la parte
superior derecha. Yo estoy con KDE, con el tema de SuSE, como habr&aacute;s
podido comprobar en los formularios y puede ser que en tu caso tengas
otra manera de cerrar una ventana.
</P>

<P>
Vamos a por el m&aacute;s f&aacute;cil de los botones: &iquest;qu&eacute;
debe pasar cuando el usuario pulse <B>Salir</B>? Debemos cerrar la
aplicaci&oacute;n. Para introducir el c&oacute;digo Basic que se
ejecutar&aacute; cuando el usuario pulse ese bot&oacute;n, hacemos
doble clic en el bot&oacute;n con el texto <B>Salir</B> (<I>cmbSalir</I>).
Vemos que Gambas nos genera unas l&iacute;neas de c&oacute;digo y que
sit&uacute;a el cursor entre ellas. Aqu&iacute; es donde hay que
rellenar con c&oacute;digo. Este procedimiento se ejecutar&aacute;
cuando el usuario haga clic en este bot&oacute;n. Para cerrar la
aplicaci&oacute;n debemos ejecutar Me.Close, con lo que el c&oacute;digo
de este evento es:
</P>

<pre class="code">
PUBLIC SUB cmdSalir_Click()
  ME.Close
END
</pre>

<P>
El siguiente bot&oacute;n que vamos a controlar es el de <B>Reiniciar</B>.
De la misma manera: hacemos doble clic en el bot&oacute;n y en la
ventana de c&oacute;digo que nos presenta Gambas rellenamos:
</P>

<pre class="code">
PUBLIC SUB cmdPonerSegundos_Click()
  fSegundos = txtSegundos.Text
  VerValores
END
</pre>

<P>
Pero al grano, todav&iacute;a parece que no pasa nada. Hay que darle
acci&oacute;n a nuestra aplicaci&oacute;n. Vamos a activar el objeto
<I>Timer</I> que tenemos situado en el formulario desde el principio.
Para ello tenemos que establecer el intervalo para recibir eventos
del reloj. O lo hacemos desde c&oacute;digo, en el evento anterior
<I>Form_Open</I>, o lo ponemos en el formulario. Ahora lo haremos de
esta manera. En el formulario hacemos un clic en el objeto <I>Timer</I>
y en su <B>Hoja de Propiedades</B> cambiamos su valor <B>Delay</B>,
que contiene 1000ms, por 100, para recibir un evento cada d&eacute;cima
de segundo, que va a ser la precisi&oacute;n de nuestro cron&oacute;metro.
</P>

<P>
Nos falta el c&oacute;digo que se ejecutar&aacute; cada vez que
salte el reloj y la manera de activar este &uacute;ltimo, que todav&iacute;a
est&aacute; parado. Para generar el c&oacute;digo del evento del
reloj nada m&aacute;s sencillo, como siempre, que hacer doble clic
en el reloj del formulario. Nos lleva a la ventana de c&oacute;digo
en la posici&oacute;n correcta. Despu&eacute;s de introducir nuestro
c&oacute;digo debe quedarnos as&iacute;:
</P>

<pre class="code">
PUBLIC SUB clkMiReloj_Timer()
  IF fSegundos &lt; 0.1 THEN
    tglFuncionando.Value = FALSE
    tglFuncionando_Click
  ELSE
    fSegundos = fSegundos - 0.1
    VerValores
  END IF
END
</pre>

<P>
Y finalmente activamos a voluntad del usuario el cron&oacute;metro
con el bot&oacute;n Toggle, que es el que nos quedaba por manejar.
Con doble clic en el bot&oacute;n podemos rellenar el c&oacute;digo
de su evento:
</P>

<pre class="code">
PUBLIC SUB tglFuncionando_Click()
  clkMiReloj.Enabled = tglFuncionando.Value
  VerActivarDesactivar
END
</pre>

<P>
Y ya podemos probar nuestro trabajo, ya hemos terminado.
</P>

<A NAME="329lfindex3">&nbsp;</A>
<H2>Y lo mejor: Gambas es multilenguaje, como debe ser</H2>


<P>
Otra de las capacidades de Gambas en el soporte para m&uacute;ltiples idiomas. Si
seguiste el c&oacute;digo pudiste ver que las
cadenas estaban rodeadas por par&eacute;ntesis; era para indicar a
Gambas que luego iban a ser traducidas. Los textos de los controles
de los formularios no necesitan estos par&eacute;ntesis. Nuestro
proyecto se ha convertido en algo muy &uacute;til y la gente nos pide
que los di&aacute;logos aparezcan en su idioma. Nada m&aacute;s
sencillo. Vamos al men&uacute; <B>Proyecto / Propiedades</B> de la
ventana del proyecto.
</P>

<IMG SRC="../../common/images2/article329/PropiedadesDeProyecto.png" border=0>

<P>
Aqu&iacute; ponemos un <B>T&iacute;tulo</B> a nuestro proyecto y
activamos la opci&oacute;n <B>El proyecto es traducible</B> que nos
va a permitir traducir los di&aacute;logos. Ahora tenemos activa una
nueva opci&oacute;n en los men&uacute;s: <b>Proyecto / Traducir</b>. Si
abrimos el di&aacute;logo, vemos que ahora es muy intuitiva esta
traducci&oacute;n:
</P>

<IMG SRC="../../common/images2/article329/TraducirProyecto.png" border=0>

<P>
Primero elegimos en la parte superior el idioma destino. Cuando
queremos traducir una cadena, la seleccionamos y rellenamos la parte
inferior. Una vez traducidas todas las cadenas, podemos probarlo
arrancando la aplicaci&oacute;n desde un terminal si establecemos
antes la variable LANG en el idioma al que hemos hecho la traducci&oacute;n.
Si quiero ver como me ha quedado la traducci&oacute;n al ingl&eacute;s,
cierro gambas y desde una consola ejecuto:
</P>

<pre class="code">
$ LANG=en_US; gambas
</pre>

<P>
Para volver a la situaci&oacute;n anterior arranco Gambas desde el
men&uacute; del KDE, ya que aqu&iacute; no tengo esta variable de
entorno que s&oacute;lo vive en su consola.
</P>

<A NAME="329lfindex4">&nbsp;</A>
<H2>Conclusi&oacute;n</H2>


<P>
Aunque es un lenguaje interpretado y necesitamos tener todo el
Gambas instalado, es una buena opci&oacute;n para empezar a
desarrollar aplicaciones dentro del escritorio de Linux. Como hemos
visto es muy sencillo y el desarrollo muy r&aacute;pido. Para una
gran cantidad de aplicaciones del d&iacute;a a d&iacute;a es mas que
suficiente.
</P>

<P>
La ayuda en pantalla es bastante completa, adem&aacute;s de los
ejemplos de que dispone desde el men&uacute; <B>Archivo/Abrir
ejemplo</B>. Tambi&eacute;n podemos pasarnos por la <A HREF="http://gambas.sourceforge.net/">web
del proyecto</A>, que en la secci&oacute;n de enlaces contiene otros
proyectos de Basic que tambi&eacute;n pueden ser interesantes. Esto
s&oacute;lo es el principio de un proyecto al que por mi parte le
auguro muy buen porvenir.
</P>




<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Formulario de "talkback" para este art&iacute;culo</h2>
Cada art&iacute;culo tiene su propia p&aacute;gina de "talkback". A trav&eacute;s de esa p&aacute;gina puedes enviar un comentario o consultar los comentarios de otros lectores
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1" summary="tb-button-outerpart">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1" summary="tb-button">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=329"><b>&nbsp;Ir a la p&aacute;gina de "talkback"&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<a style="background-color:#bdc6d5" href="index.shtml">&lt;--, regresar al &iacute;ndice de este n&uacute;mero </a><br><HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%" summary="footer">
<TR><TD ALIGN=CENTER BGCOLOR="#bdc6d5" WIDTH="50%">
<A HREF="../../common/lfteam.html">Contactar con el equipo de LinuFocus</A>
<BR><FONT COLOR="#FFFFFF">&copy; Jon&aacute;s Alvarez, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
</TD>
<TD BGCOLOR="#bdc6d5">
<!-- TRANSLATION INFO -->
<font size=2>Informaci&oacute;n sobre la traducci&oacute;n:</font>
<TABLE summary="translators">
  <tr><td><font size="2">es --&gt; -- : Jon&aacute;s Alvarez <small>&lt;jalvarez(en)eitb.com&gt;</small></font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2004-02-29, generated by lfparser version 2.41</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>