Está en la página 1de 15

CURSODEGAMBAS2.0.

0
(Nivel1)

Carpano,Marzode2008

ProgramacinEnGAMBAS2.0.0

QUEESGAMBAS?
Gambasnoessolounlenguajedeprogramacin,estambinunentornodeprogramacin
visualparadesarrollaraplicacionesgrficasodeconsola.Haceposibleeldesarrollode
aplicacionescomplicadasmuyrpidamente.Elprogramadordisealasventanasdeforma
grfica,arrastraobjetosdesdelacajadeherramientasyescribeelcdigoenBASICpara
cadaobjeto.
ESGAMBASSOFTWARELIBRE?
Si.GambassedistribuyeconlalicenciaGPLGNU(GeneralPublicLicence).Significaque
sedistribuyeconelcdigofuenteyrespetalascuatrolibertadesdefinidasporla Free
SoftwareFundation.
ELEMENTOSDEGAMBAS
ParapoderdesarrollaryejecutarprogramasenGambas,sonnecesarioslossiguientes
elementos:

Un compilador, que se encargar de transformar el cdigo fuente y archivos que


formenpartedeunproyectohechoengambas,esunprogramaejecutable.

UninterpretecapazdehacerquelosprogramashechosenGambasseanejecutados
porelsistemaoperativo.

Un entorno de desarrollo que facilite la programacin y diseo de las interfaces


grficasdelosprogramas.

Componentes que aaden funcionalidad al lenguaje. La palabra componente en


Gambastieneunsignificadoespecifico,yaquenoaludeapartesgenricas,sinoa
libreras especificas que le dotan de mas posibilidades. En la actualidad existen
componentesparausarxml,conexionesdered,opengl,ODBC,distintasbasesde
datos,escritoriosbasadosenqt,engtk,etc.

DESCARGAREINSTALARGAMBAS
ExistendiferentesvasymtodosparalainstalacindeGambas.Enlaactualidadlas
versionesmasrecientesson:Gambas2.0.0yGambas2.2.1.Porrazonesdeestabilidad
ProgramacinEnGAMBAS2.0.0

muchosprogramadoresutilizanlaversin2.0.0,colocadaenlosrepositoriosdeDebiany
Ubuntu(K,X),enesperadelarevisinporpartedelosadministradoresdeestosproyectos
de la nueva versin 2.2.1 con el fin de minimizar los Bugs y tratar de aumentar la
documentacinysoporte.
Paralainstalacinvarepositorios:
En Debian: en consola modo superusuario, ubicarse en: root:/etc/apt#, y luego tipear:
nanosource.list
Dentrodeestearchivocolocarlasiguienteslineas:
debhttp://apt.linex.org/linex/gambas/stable/./
debhttp://apt.linex.org/linex/gtk2.10/./
Guardarloscambiosyactualizarlosrepositoriosdelasiguientemanera.
Aptgetupdate
aptgetinstallgambas2
Existenotrosmtodosdeinstalacinentreellosdescargarelarchivofuentedesdeelsitio
oficialdeGambas,peroestetipodeinstalacinimplicaunretomayoryaqueimplicala
bsquedadedependenciadelibreras,compilacindelasmismas,paraluegoprocedera
compilareinstalarloscdigosfuentesdeGambas.
DECLARACINDEVARIABLES
Haydoslugaresdondesepuedendeclararlasvariables,dependiendodelmbitoenel
quesevayanausar.Sisedeclarandentrodeunasubrutinaofuncin,estndisponibles
paraserusadassolodentrodeesasubrutinaofuncin.Sisedeclaraalprincipiodel
archivo de cdigo (un modulo o clase) estn disponibles para todo el cdigo de ese
archivo,entodassussubrutinas.
Sintaxisdedeclaracindeunavariable:
DIMnombre_variableastipo_variable
tipo_variable: hace referencia al tipo de dato de la variable: numero entero, cadena,
decimal,boleano,etc.
Lasvariablesquesedeclarenenunsubrutinaofuncinsoloseusarandentrodeellas.
ProgramacinEnGAMBAS2.0.0

Cuandoterminensedestruirn.Estopermiteutilizarelmismonombredevariabledentro
dedistintassubrutinasysuvalornuncaseconfundiromezclar.

ParadeclararunavariablealprincipiodelModulooClaseseusalasintaxis:
[STATIC](PUBLIC|PRIVATE)nombre_variableAStipo_variable

SiDefine PRIVATE: estardisponibledentrodetodoelfichero,peronoseraccesible


desdeotrosficherosdelmismoproyecto.
SiDefinePUBLIC:sepodraccederalavariabledesdeunficherodelproyectodistintoa
dondesedeclar.
SidefineSTATIC:Seusaenlosarchivosdeclase,noenlosMdulos.Sirveparadefinir
uncomportamientoespecialentodoslosobjetosdeunamismaclase.
SUBRUTINASYFUNCIONES
Subrutina:Esunprocedimientoqueejecutaalgo,peronodevuelveningnvalor.
Funcin:Esunprocedimientoquedevuelvesiempreunvaloralterminarsuejecucin.

TIPOSDEDATOS
LostiposdedatossoportadosporGambas,sonlossiguientes:

Boolean:SoloaceptavaloresTrueoFalse.

Byte:Representaunnumeroenteropositivoentre0y255.

Short:Representaunnumeroenteroconvaloresposiblesentre32.768y+32.767

Integer: Representa un numero enterocon valores posibles entre2.147.483.648 y


+2.147.483.647.

Long:

Representa un numero entero con valores posibles entre:

9.223.372.036.854.775.808y+9.223.372.036.854.775.807

Single: Representa un numero real, con decimales, con valors posibles entre
1.7014118E+38y+1,7014118E+38.

Float: Representa un numero real, con decimales, con valores posibles entre

ProgramacinEnGAMBAS2.0.0

8,98846567431105E+307y+8,98846567431105E+307.

Date: Almacena valores de fecha y hora. Internamente la fecha y la hora se


almacenanenformatoUTC.

String:Seusaparaalmacenarunacadenadetexto.

Variant:Significacualquiertipodedato,esdecir,sepuedealmacenarinteger,single,
boolean,etc.

Object:representacualquierobjetocreadoenGambas.

CONVERSINDETIPOSDEDATOS
SerealizanmedianteunasfuncionesqueestnGambas.

Cbool(expresin):Conviertelaexpresinaunvalorbooleano.

Cshort(expresin),Cint(expresin)oCinteger(expresin),yClong(expresin):convierte
respectivamente,laexpresinenunnumerodetipoShort,IntegeryLong.

Cdate(expresin):conviertela expresin enuna fecha. Debe tener cuidado porque


soloadmiteformatodefechaeninglesmes/dia/aohora:minutos:segundos.Ejemplo:
Cdate(09/06/1972)01:45:12),donde06seraeldia06ynoelmes06.

CStr(expresin):Conviertelaexpresinenunacadenadetextosintenerencuentala
configuracinlocal.

Str$(expresin):conviertelaexpresinenunacadenadetexto,teniendoencuentala
configuracinlocal.ejemplo.Str$(CDate(09/06/197201:45:12))devuelve:06/09/1972
01:45:12

Val(expresin): Convierteunacadenadetextoenuntipo Boolean,Date oalgunode


lostiposnumricos,dependiendodelcontenidodelaexpresin.

MATRICES
EnGambassepuedendefinirmatricesquecontengancualquiertipodedatos,peroconla
condicindequetodosloselementosdelamatrizseandelmismotipo.Noexistemas
limite en la dimensin de la matriz que la memoria del ordenador y la capacidad del
programadordeoperarmatricesdedimensionesgrandes.

ProgramacinEnGAMBAS2.0.0

Elejemploqueacontinuacinsemuestraeselmtododeordenacinconocidocomo
mtododelaburbuja,paraelsiguienteprogramaabraunprogramabajoconsola.
PUBLICSUBMain()
DIMColumnaASInteger
DIMN,i,j,AuxASInteger
DIMLimiteASInteger
DIMvectorASInteger[]
vector=NEWInteger[]
PRINT"Ingreseellimitemaximoaleerelvector:"
INPUTLimite
FORColumna=0TOLimite
PRINT"IngresaunNumero"
INPUTN
vector.Add(N)
NEXT
'EsteeselProcedimientoBurbuja
'paraordenarlosdatosquecontieneelvector
FORi=0TOLimite1
FORj=0TOLimite1
IFVector[j]>vector[j+1]THEN

'Enestaparteserealizaelintercambio
Aux=vector[j]
vector[j]=vector[j+1]
vector[j+1]=Aux
ENDIF
NEXT
NEXT
PRINT'Haceunsaltodelinea
'Porultimoprocedemosaimprimirelvector
FORj=0TOLimite
PRINTvector[j]
NEXT
END

OPERADORESMATEMTICOS
Adicional a los operadores matemticos ya conocidos en casi todos los lenguajes de
programacin,citamoslossiguientes:

ProgramacinEnGAMBAS2.0.0

^eseloperadordepotencia.Ejemplo:4^3=64

Para la divisin hay dos operadores adicionales, DIV y MOD, que revuelven
respectivamente, la parte entera del resultado de la divisin y el resto. Ejemplo:
9DIV2=4,9y9MOD4=1P.

Existentambinfuncionesmatemticaspararealizarclculosmascomplejos:

Abs(numero):calculaelvalorabsolutodeunnumero.

Dec(numero):decrementaunnumero.

Frac(numero):devuelvelapartedecimaldeunnumero.

Inc(numero):Incrementaunnumero.

Int(numero):devuelvelaparteenteradeunnumero.

Max(numero1,numero2,...):devuelveelnumeromayor.

Min(numero1,numero2,...):devuelveelnumeromenor.

Round(numero,decimales):redondeaunnumeroconlosdecimalesdeseados.

Rnd([mnimo],[mximo]):devuelveunnumeroaleatoriocomprendidoentremnimoy
mximo.

MANEJODECADENAS
Existeunmanejadordecadenasdetextoquepermiteconcatenardirectamente,setrata
delsmbolo&.Ejemplo:
DimnombreASString
DimApellidosASString
Nombre=Manuel
Apellidos=AlvarezGomez
PRINTApellidos&,&Nombre
Lasalidaenconsolasera:
AlvarezGomez,Manuel
Veamosahoraellistadodelasfuncionesdisponiblesparamanejarcadenasdetexto:

ProgramacinEnGAMBAS2.0.0

Asc(cadena,[Posicin]):devuelveelcodigoASCIIdelcaracterqueestaenlaposicin
indicadaenlacadenadada.Sinosedalaposicindevuelveelcdigodelprimer
caracter.

Chr$: devuelve un caracter a partir de su cdigo ASCII. Esta funcin es util para
aadorcaracteresespecialesaunacadenadetexto.Ejemplo:

PRINTManuel&Chr$(10)&Antonio
Insertarunatabulacinentrelosdosnombres,yaqueenlatablaASCIIelcdigo10
correspondeaunavancedelinea(LineFeed).

InStr(cadena, subcadena [, Inicio]): busca la subcadena dentro de la cadena y


devuelveunnumeroconlaposicindondelaencontr.Sisedaelvalordeinicio,la
bsquedaempezarenesaposicin.

Ejemplo:
PRINTInstr(Gambasesbasic,bas,5)
devuelveun11,mientrasque:
PRINTInstr(Gambasesbasic,bas)
devuelveuncuatro.
CONTROLDEFLUJO
If...Then...Else:Eslasentenciamascomnparatomarunadecisin:
SintaxisBasica:
IFexpresinTHEN
....
ENDIF

Siseejecutaunasolainstruccin:IFexpresinTHENsentencia_a_ejecutar.
Ejemplo:
DIMedadASInteger
.....
IFEdad>20THEN
PRINTAdulto
ProgramacinEnGAMBAS2.0.0

ENDIF
IFedad>20THENPRINTAdulto
IFEdad<2ANDedad>0THEN
PRINTBebe
ELSEIFEdad<12THEN
PRINTNio
ELSEIFedad<18THEN
PRINTJoven
ELSE
PRINTAdulto
ENDIF
ControlSELECTCASE.
Estasentenciaproduceuncodigolimpioycomododeleer.Susintaxiseslasiguiente:
SELECT[CASE]Expresin
[CASEexpresin[TOexpresin#2][,...]
...]
[CASEexpresin[TOexpresin#2][,...]
...]
[{CASEELSE|DEFAULT}
...}
ENDSELECT
Ejemplo:
DIMedadASInteger
...
SELECTCASEedad
CASE0TO2
PRINTBebe
CASE2TO12

ProgramacinEnGAMBAS2.0.0

PRINTNio
CASE18
PRINTBingo,yapuedesvotar
CASE13TO17
PRINTJoven
CASEELSE
PRINTAdulto
ENDSELECT
ControlFOR
Generalmente usado cuando se necesita contar o realizar una accin un numero
determinadodeveces.
Sintaxis:
FORvariable=ExpresinTOExpresin[STEPexpresin]
...
NEXT
Ejemplo:
DIMnASInteger
FORn=10TO1STEP1
PRINTn
NEXT
ControlWHILEyREPEAT
Cuandoserequiererepetirlaejecucindeunaporcindelcdigoenvariasocasiones
dependiendodeunacondicin,tenemosdosinstruccionesdistintas:WHILEyREPEAT.
Sucomportamientoescasiidntico.Ladiferenciaestribaenquesilacondicinnecesaria
paraqueseejecuteelcdigoesfalsadesdeelprincipio,conREPEATseejecutaruna
vezyconWHILEnoseejecutarnunca.Lasintaxisdeambases:
WHILECondicin

ProgramacinEnGAMBAS2.0.0

10

...instrucciones
WEND
y
REPEAT
...instrucciones
UNTILCondicin
En el caso del bucle WHILE existe una variante que permite sustituir WHILE por DO
WHILEyWENDporLOOP.Esexactamentelomismo.
Ejemplo:
DIMaASInteger
a=1
WHILEa<=10
PRINTHolaMundo;a
INCa
WEND

a=1

REPEAT
PRINTHolaMundo;a
INCa
UNTILa>10
EVENTOSCONELTECLADO
Loseventos KeyPress y KeyRelease realizanlafuncindecontrolsobreelteclado.La
claseestticaKeyproporcionalainformacinnecesariaparacontrolareltecladodentrode
estoseventos.
El evento KeyPress es cancelable con la instruccin STOP EVENT, de modo que se

ProgramacinEnGAMBAS2.0.0

11

puedeimpedir,porejemplo,queunacadadetextoseimprimandeterminadoscaracteres.
Ejemplo:
En este ejemplo se bloquea un TextBox, de forma que solo permita la entrada de
numeros,lapulsacindelasteclasSupr(borrar)yBackSpace(Barradohaciaatras)yel
tabuladorparapasarelfocoaotrocontrol.
PUBLICSUBTextBox1_KeyPress()
SELECTCASEKey.Code
CASE48TO57'CodigosASCIIdelosnumeros
CASEKey.BackSpace'Retroceso
CASEKey.Delete'Borrado
CASEKey.Tab'Tabulador
CASEELSE
STOPEVENT

ENDSELECT
END
GALERIADECONTROLES

Label: Esunaetiquetasimplequecontieneunalineadetextodepocalongitud.Su
funcinesmostraruntextoenunaposicindentrodeunformulario.

TextLabel:SimilaralLabel,peropuedemostrartextoformateadoconHTML.

Ejemplo:
TextLabel1.Text=<b>TextoconHTML</b><br>Dentrodeuna<i>etiqueta.

TextBox:Esunacajadetexto,deunasolalinea,enlacualelusuariopuedemodificar,
copiar,cortaroborrartexto.

TextArea:Setratadeunacajadetextoqueescapazdecontenermltipleslineas.

PictureBox: Tienelafuncindemostrarunaimagen.Respondeaeventosdelratn,
porloquepuedeserempleadocomocomobotnpersonalizado.

ListBox: Es una listasimple. Se aaden oeliminan elementos que se representan


comounalineadetextocadauno.LapropiedadModedeterminasielusuariopuede

ProgramacinEnGAMBAS2.0.0

12

nopuedeseleccionarninguno,solounoovarios.

ListView:SimilaralListBox.Puederepresentaruniconojuntoconcadaelementodela
lista, y cada uno de ellos est identificado por una clave nica de texto, que nos
permitehacerbsquedasdeloselementosporsucable.

ComboBox:Esunalistadesplegable.Elusuariosoloveelelementoseleccionadoen
cadamomentoypuededesplegarlalistaparaseleccionarunouotro.

OTROSCONTROLES
TreeView:Sirvepararepresentarelementosdeunrbol,deformaquecadanodopuede
tenerotrosnodoshijos.
ColumView:SimilaralTreeView,perocadanodopuededisponerdecolumnas.
GridView: Sirvecomorepresentacindeparrilla,deformaquedisponemosderegistros
agrupadosenfilasycolumnas.Generalmenteseutilizaparainteractuarconbasesde
datos.
DIALOGOS(Mensajes)
La clase Message se encarga de mostrar una ventana modal al usuario, en la cual
podemos definir un texto, que ser una informacin o una pregunta, y una serie de
botonesparaelegirunaopcin.

Message.Info:seutilizaparamostrarunmensajemeramenteinformativo.Solopermite
definir un botn que normalmente tendr un texto como OK o Aceptar. Ejemplo:
Messaje.info(estoesunmensaje)

Message.Delete:seutilizaparaindicarquesevaaprocederaeliminaralgo(archivos,
registrosdeunatabla,etc,),ysesolicitaalusuariosuconfirmacin.

Message.Error:Seempleaparaindicarunmensajedeerror.

Message.Question: es una pregunta al usuario, generalmente para confirmar una


accinounaopcindeconfiguracin.

Message.Warning: adviertealusuariodequelaaccinquevaarealizarsuponeun
ciertopeligro,porejemplo,perdidadedatosdeunatablaquepodransertilesaun.

ProgramacinEnGAMBAS2.0.0

13

MENSAJESPERSONALIZADOS
LosmtodosdelaclaseMessagedevuelvenunnumeroenteroquedenotaelbotnqueel
usuariopuls.Enestesentido,podemospersonalizarlosmensajes,conlacantidadde
botonesquequeramosyelmensajequedeseemos.
Ejemplo:
DimRespuestaasInteger
Respuesta=Message.Warning(DeseaCerrarelPrograma?,Si,No,Derepente)
IFRespuesta=1THEN
Message.Info(GraciasporusarelPrograma)
Me.close
ELSE
Message.Info(Aversitedecides...)
ENDIF
MENUS
La creacin de Mens es realmente sencilla, ya que un asistente del IDE permite
disearlos. Tan solo hay que situarse sobre un formulario, pulsar el botn derecho, y
seleccionarlaopcinEditordeMen...
Laspropiedadesmasimportantesson:

Nombre: queeselnombredelobjetomenyquecorresponderconsugestorde
eventos.

Titulo:queeseltextoqueaparecerenlapantalla.

Icono:quepermiteelegirunaimagenparalaopcindelmen.

TeclasdeAtajo:paralosaccesossinnecesidadderatn.

MENUCONTEXTUAL
Siloquedeseamosescrearunmendelosquesemuestrancuandoelusuariopulsa,
porejemplo,elbotnderechosobreunformularioocontrol,tendremosquecrearunmen

ProgramacinEnGAMBAS2.0.0

14

de primer nivel con su propiedad visible FALSE, y sus correspondientes hijos. Luego
indicaremosanuestromenuinvisiblequedebemostrarsecomounmencontextual.
Ejemplo:
PUBLICSUBForm_Menu()
MnuEditar.Popup()
END

ProgramacinEnGAMBAS2.0.0

15

También podría gustarte