Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción A Gambas (Básico)
Introducción A Gambas (Básico)
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:
UninterpretecapazdehacerquelosprogramashechosenGambasseanejecutados
porelsistemaoperativo.
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
TIPOSDEDATOS
LostiposdedatossoportadosporGambas,sonlossiguientes:
Boolean:SoloaceptavaloresTrueoFalse.
Byte:Representaunnumeroenteropositivoentre0y255.
Short:Representaunnumeroenteroconvaloresposiblesentre32.768y+32.767
Long:
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.
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.
CStr(expresin):Conviertelaexpresinenunacadenadetextosintenerencuentala
configuracinlocal.
Str$(expresin):conviertelaexpresinenunacadenadetexto,teniendoencuentala
configuracinlocal.ejemplo.Str$(CDate(09/06/197201:45:12))devuelve:06/09/1972
01:45:12
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).
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.
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.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