You are on page 1of 103

Aprenda Visual Basic 4.

0
como si estuviera en Primero
San Sebastin, 21 de Noviembre de 1997
Coleccin preparada por:
Javier Garca de Jaln de la Fuente
Rufino Goi Lasheras
Alfonso Brazlez Guerra
Jos Ignacio Rodrguez Garrido
Francisco Javier Funes artnez
Aitor I!az olina
NDICE
1. Introduccin 1
1.1 Proramas secuencia!es, interactivos " orientados a eventos 1
1.2 Proramas #ara e! entorno $indo%s 2
1.2.1 &odo de Dise'o " &odo de E(ecucin 2
1.2.2 )ormu!arios " Contro!es 2
1.2.* +b(etos " Pro#iedades 2
1.2., Nombres de ob(etos *
1.2.- Eventos ,
1.2.. &/todos ,
1.2.7 Pro"ectos " 0ic1eros ,
1.* E! entorno de #roramacin 2isua! 3asic ,.4 -
1., E! 5e!# de 2isua! 3asic ,.4 -
1.- E(em#!os .
1.-.1 E(em#!o 1.16 Senci!!o #rorama de co!ores " #osiciones .
1.-.2 E(em#!o 1.26 &inica!cu!adora e!ementa! 7
1.-.* E(em#!o 1.*6 7rans0ormacin de unidades de tem#eratura 9
1.-., E(em#!o 1.,6 Co!ores 893 14
2. Entorno de #roramacin 2isua! 3asic ,.4 1*
2.1 Introduccin 6 :;u/ es 2isua! 3asic< 1*
2.2 E! entorno de 2isua! 3asic ,.4 1*
2.2.1 =a barra de men>s 1*
2.2.2 =as 1erramientas ?too!bo@A 1,
2.* )ormu!arios ?for!sA " mdu!os 1,
2., =a ventana de #ro"ecto ?"ro#ectA 1-
2.- =a ventana de #ro#iedades ?$ro"ertiesA 1-
2.. Creacin de #roramas e(ecutab!es 1.
2.7 Cmo uti!iBar e! 5e!# 1.
2.7.1 Cti!iBacin de! Debuer 17
*. =enua(e 3DSIC 19
*.1 Introduccin 19
*.2 Comentarios " otras uti!idades en !a #roramacin con visua! basic 19
*.* Pro"ectos " mdu!os 24
*.*.1 Embito de !as variab!es " !os #rocedimientos 24
*.*.1.1 2ariab!es " 0unciones de mbito !oca! 24
*.*.1.2 2ariab!es " 0unciones de mbito !oba! 21
*., 2ariab!es 21
*.,.1 Identi0icadores 21
*.,.2 2ariab!es " constantes 22
*.,.* Nombres de variab!es 22
*.,., 7i#os de datos 2*
*.,.- E!eccin de! ti#o de una variab!e 2,
*.,.. Dec!aracin e@#!Fcita de variab!es 2,
*.- +#eradores 2-
*.. Sentencias de contro! 2.
*...1 Sentencia I) ... 75EN ... E=SE ... 2.
*...2 Sentencia SE=EC7 CDSE 27
*...* )+8 ... NEG7 2H
*..., Sentencia D+ ... =++P 2H
*...- Sentencia $5I=E I $END 29
*.7 D!oritmos 29
*.7.1 Introduccin 29
*.7.2 8e#resentacin de a!oritmos *4
*.H )unciones " Procedimientos *1
*.H.1 Conce#tos enera!es sobre 0unciones *1
*.H.2 )unciones " #rocedimientos en 2isua! 3asic *1
*.H.* )unciones ?0unctionA *2
*.H., Procedimientos ?SubA **
*.H.- Drumentos #or re0erencia " #or va!or **
*.H.. Procedimientos recursivos *,
*.9 Drra"s *,
*.9.1 Drra"s estticos *-
*.9.2 Drra"s dinmicos *-
*.14 Estructuras *.
*.11 )unciones #ara mane(o de cadenas de caracteres *7
*.12 )unciones matemticas *H
,. Eventos, Pro#iedades " Contro!es ,4
,.1 Eventos ,4
,.1.1 Eventos enera!es ,4
,.1.1.1 Cara " descara de 0ormu!arios ,4
,.1.1.2 Paint ,2
,.1.1.* E! 0oco ?0ocusA. ,2
,.1.1., Je"Press, Je"C# " Je"Do%n ,*
,.1.2 Eventos re!acionados con e! ratn ,*
,.1.2.1 C!icK " Db!C!icK ,*
,.1.2.2 &ouseDo%n, &ouseC# " &ouse&ove ,,
,.1.2.* Dra+ver " DraDro# ,,
,.2 Pro#iedades ms comunes ,,
,.* Contro!es ms usua!es ,.
,.*.1 3otn de comando ?Command 3uttonA ,.
,.*.2 3otones de o#cin ?+#tion 3uttonA ,.
,.*.* 3otones de se!eccin ?C1ecK 3o@A ,.
,.*., 3arras de des#!aBamiento ?Scro!! 3arsA ,.
,.*.- EtiLuetas ?=abe!sA ,7
,.*.. Ca(as de te@to ?7e@t 3o@A ,7
,.*.7 =istas ?=ist 3o@A ,7
,.*.H Ca(as combinadas ?Combo 3o@A ,H
,.*.9 Contro!es re!acionados con 0ic1eros ,H
,.*.14 Contro! 7imer ,H
,., Ca(as de di!oo estndar ?Contro!es Common Dia!oA ,9
,.,.1 +#enMSave Dia!o Contro! -4
,.,.2 Print Dia!o Contro! -4
,.,.* )ont Dia!o Contro! -4
,.,., Co!or Dia!o Contro! -1
,.- )ormu!arios m>!ti#!es -1
,.-.1 )ormu!arios " subN0ormu!arios -2
,.. Drra"s de contro!es -*
-. &en>s -,
-.1 Introduccin a !as #osibi!idades de !os men>s -,
-.2 E! editor de men>s ?&enu EditorA --
-.* D'adir cdio a !os men>s -.
-., Drra"s de men>s -.
-.- E(em#!o6 &en> #ara determinar !as caracterFsticas de un te@to -7
.. 9r0icos en 2isua! 3asic ,.4 -9
..1 7ratamiento de! co!or -9
..1.1 8e#resentacin 1e@adecima! de !os co!ores -9
..1.2 Dcceso a !os co!ores de! sistema -9
..1.* )uncin 893 .4
..1., Pa!eta de co!ores .4
..2 )ormatos r0icos .1
..* Contro!es r0icos .1
..*.1 Contro! !ine .1
..*.2 Contro! s1a#e .1
..*.* E(em#!o ..16 Cso de !os contro!es !ine " s1a#e .2
..*., Contro! imae .2
..*.- Contro! Picture 3o@ .*
.., &/todos r0icos .,
..,.1 &/todo #rint .,
..,.2 Dibu(o de #untos6 m/todo Pset .,
..,.* Dibu(o de !Fneas " rectnu!os6 m/todo !ine .-
..,., Dibu(o de circun0erencias, arcos " e!i#ses6 m/todo circ!e ..
..,.- +tros m/todos r0icos ..
..- Sistemas de coordenadas .7
..-.1 &/todo Sca!e .H
... Eventos " #ro#iedades re!acionadas con r0icos .H
....1 E! evento Paint .H
....2 =a #ro#iedad Dra%&ode .H
....* P!anos de dibu(o ?=a"ersA .9
...., =a #ro#iedad Duto8edra% .9
....- =a #ro#iedad C!i#Contro! 74
..7 E(em#!os 74
..7.1 E(em#!o ..26 9r0icos " barras de des#!aBamiento 74
..7.2 E(em#!o ..*6 8e#resentacin r0ica de !a so!ucin de !a ecuacin de seundo rado 72
7. Drc1ivos " EntradaMSa!ida de Datos 7-
7.1 Ca(as de di!oo In#ut3o@ " &s3o@ 7-
7.2 &/todo Print 7.
7.2.1 CaracterFsticas enera!es 7.
7.2.2 )uncin )ormat 77
7.* Cti!iBacin de im#resoras 7H
7.*.1 &/todo Print)orm 7H
7.*.2 +b(eto Printer 7H
7., Contro!es )i!e=ist, Dir=ist " Drive=ist 79
7.- 7i#os de 0ic1eros H4
7.. =ectura " escritura en 0ic1eros secuencia!es H1
7...1 D#ertura " cierre de 0ic1eros H1
7...2 =ectura " escritura de datos H1
7...2.1 Sentencia In#ut H1
7...2.2 )uncin =ine In#ut " 0uncin In#ut H2
7...2.* )uncin #rint O H2
7...2., )uncin %rite O H2
7.7 )ic1eros de acceso a!eatorio H*
7.7.1 Dbrir " cerrar arc1ivos de acceso a!eatorio H*
7.7.2 =eer " escribir en una arc1ivo de acceso a!eatorio. )unciones 9et " Put H*
7.H )ic1eros de acceso binario H*
H. DNEG+ D6 Consideraciones adiciona!es sobre datos " variab!es H-
H.1 Caracteres " cdio DSCII H-
H.2 N>meros enteros H.
H.* N>meros rea!es H.
H.*.1 2ariab!es ti#o Sin!e H.
H.*.2 2ariab!es ti#o Doub!e H7
H., Sistema binario, octa!, decima! " 1e@adecima! H7
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )
1. INTRODUCCIN
Visual Basic 4.0 es uno de !os !enua(es de #roramacin Lue ms entusiasmo des#iertan
entre !os
#roramadores de PCs, tanto e@#ertos como novatos. En e! caso de !os #roramadores
e@#ertos #or
!a 0aci!idad con !a Lue desarro!!an a#!icaciones com#!e(as en #oLuFsimo tiem#o ?com#arado
con !o
Lue cuesta #roramar en Visual C++, #or e(em#!oA. En e! caso de !os #roramadores
novatos #or e!
1ec1o de ver de !o Lue son ca#aces a !os #ocos minutos de em#eBar su a#rendiBa(e. E!
#recio Lue
1a" Lue #aar #or uti!iBar Visual Basic es una menor ve!ocidad o e0iciencia en !as
a#!icaciones.
Visual Basic es un !enua(e de #roramacin visua!, tambi/n !!amado !enua(e de ,P
eneracin. Esto Luiere decir Lue un ran n>mero de tareas se rea!iBan sin escribir cdio,
sim#!emente con o#eraciones r0icas rea!iBadas con e! ratn sobre !a #anta!!a.
Visual Basic es tambi/n un #rorama *asado en o*#etos, aunLue no orientado a o*#etos
como
Visual C++. =a di0erencia est en Lue Visual Basic uti!iBa objetos con propiedades "
mtodos, #ero
carece de !os mecanismos de herencia " polimorfismo #ro#ios de !os verdaderos !enua(es
orientados a ob(etos como Java " +,,'
En este #rimer ca#Ftu!o se #resentarn !as caracterFsticas enera!es de Visual Basic 4.0,
(unto
con a!unos e(em#!os senci!!os Lue den idea de !a #otencia de! !enua(e " de! modo en Lue
se
uti!iBa.
1.1 PROGRAMAS SECUENCIALES INTERACTI!OS " ORIENTADOS A E!ENTOS
E@isten distintos ti#os de #roramas. En !os #rimeros tiem#os de !os ordenadores !os
#roramas
eran de ti#o secuencial ?tambi/n !!amados ti#o batchA Cn #rorama secuencia! es un
#rorama Lue
se arranca, !ee !os datos Lue necesita, rea!iBa !os c!cu!os e im#rime o uarda en e! disco !os
resu!tados. De ordinario, mientras un #rorama secuencia! est e(ecutndose no necesita
ninuna
intervencin de! usuario. D este ti#o de #roramas se !es !!ama tambi/n "rogra!as *asados
u
orientados a "rocedi!ientos o a algorit!os ?"rocedural languagesA. Este ti#o de
#roramas siuen
uti!iBndose am#!iamente en !a actua!idad, #ero !a di0usin de !os PCs 1a #uesto de
actua!idad otros
ti#os de #roramacin.
=os #roramas interactivos e@ien !a intervencin de! usuario en tiem#o de e(ecucin, bien
#ara suministrar datos, bien #ara indicar a! #rorama !o Lue debe 1acer #or medio de
men>s. =os
#roramas interactivos !imitan " orientan !a accin de! usuario. Cn e(em#!o de #rorama
interactivo
#odrFa ser atlab.
Por su #arte !os #roramas orientados a eventos son !os #roramas tF#icos de !indo"s,
ta!es
como #etscape, !ord, $%cel " Po"erPoint. Cuando uno de estos #roramas 1a arrancado,
!o >nico
Lue 1ace es Luedarse a !a es#era de !as acciones de! usuario, Lue en este caso son !!amadas
eventos.
E! usuario dice si Luiere abrir " modi0icar un 0ic1ero e@istente, o bien comenBar a crear un
0ic1ero
desde e! #rinci#io. Estos #roramas #asan !a ma"or #arte de su tiem#o es#erando !as
acciones de!
usuario ?eventosA " res#ondiendo a e!!as. =as acciones Lue e! usuario #uede rea!iBar en un
momento
determinado son variadFsimas, " e@ien un ti#o es#ecia! de #roramacin6 la
pro&ramaci'n
orientada a eventos. Este ti#o de #roramacin es sensib!emente ms com#!icada Lue !a
secuencia!
" !a interactiva, #ero Visual Basic !a 1ace es#ecia!mente senci!!a " aradab!e.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -
1.# PROGRAMAS PARA EL ENTORNO $INDO$S
Visual Basic est orientado a !a rea!iBacin de #roramas #ara !indo"s, #udiendo
incor#orar todos
!os e!ementos de este entorno in0ormtico6 ventanas, botones, ca(as de di!oo " de te@to,
botones
de o#cin " de se!eccin, barras de des#!aBamiento, r0icos, men>s, etc.
Prcticamente todos !os e!ementos de interaccin con e! usuario de !os Lue dis#one
!indo"s
() #ueden ser #roramados en Visual Basic 4.0 de un modo e@traordinariamente senci!!o.
En
ocasiones bastan unas #ocas o#eraciones con e! ratn " !a introduccin a trav/s de! tec!ado
de
a!unas sentencias #ara dis#oner de a#!icaciones con todas !as caracterFsticas de !indo"s
(). En
!os siuientes a#artados se introducirn a!unos conce#tos de este ti#o de #roramacin.
1.#.1 Modo de Di%e&o ' Modo de E(ec)cin
=a a#!icacin Visual Basic de icrosoft #uede traba(ar de dos modos distintos6 en modo de
dise'o
" en modo de e(ecucin. En modo de dise*o e! usuario constru"e interactivamente !a
a#!icacin,
co!ocando controles en e! formulario, de0iniendo sus propiedades, desarro!!ando
funciones #ara
estionar !os eventos.
=a a#!icacin se #rueba en modo de ejecuci'n. En ese caso e! usuario act>a sobre e!
#rorama
?introduce eventosA " #rueba cmo res#onde e! #rorama. 5a" a!unas propiedades de !os
controles
Lue deben estab!ecerse en modo de dise'o, #ero muc1as otras #ueden cambiarse en tiem#o
de
e(ecucin desde e! #rorama escrito en Visual Basic, en !a 0orma en Lue ms ade!ante se
ver.
7ambi/n 1a" propiedades Lue s!o #ueden estab!ecerse en modo de e(ecucin " Lue no son
visib!es
en modo de dise'o.
7odos estos conce#tos Qcontroles, propiedades, eventos, etc.N se e@#!ican en !os a#artados
siuientes.
1.#.# *or+)lario% ' Con,role%
Cada uno de !os e!ementos r0icos Lue #ueden 0ormar #arte de una a#!icacin tF#ica de
!indo"s
() es un ti#o de control6 !os botones, !as ca(as de di!oo " de te@to, !as ca(as de se!eccin
des#!eab!es, !os botones de o#cin " de se!eccin, !as barras de des#!aBamiento
1oriBonta!es "
vertica!es, !os r0icos, !os men>s, " muc1os otros ti#os de e!ementos son contro!es #ara
Visual
Basic. Cada contro! debe tener un nombre a trav/s de! cua! se #uede 1acer re0erencia a /!
en e!
#rorama. Visual Basic #ro#orciona nombres "or defecto Lue e! usuario #uede modi0icar.
En e!
D#artado 1.2., se e@#onen a!unas re!as #ara dar nombres a !os distintos contro!es.
En !a termino!oFa de Visual Basic se !!ama formulario ?for!A a una ventana. Cn
0ormu!ario
#uede ser considerado como una es#ecie de contenedor #ara !os contro!es. Cna a#!icacin
#uede
tener varios 0ormu!arios, #ero un >nico 0ormu!ario #uede ser su0iciente #ara !as
a#!icaciones ms
senci!!as. =os 0ormu!arios deben tambi/n tener un nombre, Lue #uede crearse siuiendo !as
mismas
re!as Lue #ara !os contro!es.
1.#.- O.(e,o% ' Propiedade%
=os 0ormu!arios " !os distintos ti#os de contro!es son entidades en/ricas de !as Lue #uede
1aber
varios e(em#!ares concretos en cada #rorama. En "rogra!acin orientada a o*#etos ?ms
bien
*asada en o*#etos, 1abrFa Lue decirA se !!ama clase a estas entidades en/ricas, mientras
Lue se
!!ama objeto a cada e(em#!ar de una c!ase determinada. Por e(em#!o, en un #rorama #uede
1aber
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .
varios botones, cada uno de !os cua!es es un objeto de! ti#o de contro! command button,
Lue serFa !a
clase.
Cada 0ormu!ario " cada ti#o de contro! tienen un con(unto de propiedades Lue de0inen su
as#ecto r0ico ?tama'o, co!or, #osicin en !a ventana, ti#o " tama'o de !etra, etc.A " su
0orma de
res#onder a !as acciones de! usuario ?si est activo o no, #or e(em#!oA. Cada #ro#iedad tiene
un
nombre Lue viene "a de0inido #or e! !enua(e.
Por !o enera!, !as #ro#iedades de un objeto son datos Lue tienen va!ores !icos ?true,
falseA o
num/ricos concretos, #ro#ios de ese ob(eto " distintos de !as de otros ob(etos de su c!ase.
DsF #ues,
cada c!ase, ti#o de ob(eto o contro! tiene su con(unto de #ro#iedades, " cada ob(eto o
contro!
concreto tiene unos va!ores determinados #ara !as #ro#iedades de su c!ase.
Casi todas !as #ro#iedades de !os ob(etos #ueden estab!ecerse en tiem#o de dise'o "
tambi/n
Ncasi siem#reN en tiem#o de e(ecucin. En este seundo caso se accede a sus va!ores #or
medio de
!as sentencias de! #rorama, en 0orma an!oa a como se accede a cua!Luier variab!e en un
!enua(e
de #roramacin. Para ciertas #ro#iedades /sta es !a >nica 0orma de acceder a e!!as. Por
su#uesto
Visual Basic #ermite crear distintos ti#os de variab!es, como ms ade!ante se ver.
Se #uede acceder a una #ro#iedad de un ob(eto #or medio de! nombre del objeto a Lue
#ertenece, seuido de un #unto " e! nombre de la propiedad, como #or e(em#!o
optColor.obj#ame.
En e! siuiente a#artado se estudiarn !as re!as #ara dar nombres a !os ob(etos.
1.#./ No+.re% de o.(e,o%
En #rinci#io cada ob(eto de Visual Basic debe tener un nombre, #or medio de! cua! se 1ace
re0erencia a dic1o ob(eto. E! nombre #uede ser e! Lue e! usuario desee, e inc!uso Visual
Basic
#ro#orciona nombres por defecto #ara !os diversos contro!es. Estos nombres #or de0ecto
1acen
re0erencia a! ti#o de contro! " van seuidos de un n>mero Lue se incrementa a medida Lue
se van
introduciendo ms contro!es de ese ti#o en e! 0ormu!ario ?#or e(em#!o V+croll,, #ara una
barra de
des#!aBamiento Nscroll *arN vertica!, -+croll,, #ara una barra 1oriBonta!, etc.A.
=os nombres por defecto no son adecuados #orLue 1acen re0erencia a! ti#o de contro!,
#ero
no a! uso Lue de dic1o contro! est 1aciendo e! #roramador. Por e(em#!o, si se uti!iBa una
barra de
des#!aBamiento #ara introducir una tem#eratura, conviene Lue su nombre 1aa re0erencia a
!a
#a!abra temperatura, " asF cuando 1a"a Lue uti!iBar ese nombre se sabr e@actamente a Lu/
contro!
corres#onde. Cn nombre adecuado serFa #or e(em#!o hsb.emp, donde !as tres #rimeras
!etras
indican Lue se trata de una horizontal scroll *ar, " !as restantes ?em#eBando #or una
ma">scu!aA Lue
servir #ara de0inir una te!"eratura.
E@iste una convencin am#!iamente ace#tada Lue es !a siuiente6 se utilizan sie!"re tres
letras !in/sculas 0ue indican el ti"o de control1 seguidas "or otras letras 2la "ri!era
!a3/scula1 a
!odo de se"aracin4 li*re!ente escogidas "or el usuario1 0ue tienen 0ue hacer referencia
al uso
0ue se va a dar a ese control. =a 7ab!a 1.1 muestra !as abreviaturas de !os contro!es ms
usua!es,
(unto con !a nomenc!atura in!esa de !a Lue derivan. En este mismo ca#Ftu!o se vern unos
cuantos
e(em#!os de a#!icacin de estas re!as #ara construir nombres.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &
A.re0ia,)ra Con,rol A.re0ia,)ra Con,rol
c1K c1ecK bo@ cbo combo " dro#N!ist bo@
cmd command button dir dir !ist bo@
drv drive !ist bo@ 0i! 0i!e !ist bo@
0rm 0orm 0ra 0rame
1sb 1oriBonta! scro!! bar im imae
!b! !abe! !in !ine
!st !ist mnu menu
o#t o#tion button #ic #icture
s1# s1a#e t@t te@t edit bo@
tmr timer vsb vertica! scro!! bar
7ab!a 1.1. Dbreviaturas #ara !os contro!es ms usua!es.
1.#.1 E0en,o%
Ra se 1a dic1o Lue !as acciones de! usuario sobre e! #rorama se !!aman eventos. Son
eventos
tF#icos e! c!icar sobre un botn, e! 1acer dob!e c!icK sobre e! nombre de un 0ic1ero #ara
abrir!o, e!
arrastrar un icono, e! #u!sar una tec!a o combinacin de tec!as, e! e!eir una o#cin de un
men>, e!
escribir en una ca(a de te@to, o sim#!emente mover e! ratn. &s ade!ante se vern !os
distintos
ti#os de eventos reconocidos #or !indo"s () " #or Visual Basic 4.0.
Cada veB Lue se #roduce un evento sobre un determinado ti#o de contro!, Visual Basic
arranca una determinada funci'n o procedimiento Lue rea!iBa !a accin #roramada #or e!
usuario
#ara ese evento concreto. Estos #rocedimientos se !!aman con un nombre Lue se 0orma a
#artir de!
nombre de! ob(eto " e! nombre de! evento, se#arados #or e! carcter ?SA, como #or e(em#!o
t%tBo%/clic0, Lue es e! nombre de! #rocedimiento Lue se ocu#ar de res#onder a! evento
clic0 en e!
ob(eto t%tBo%..
1.#.2 M3,odo%
=os mtodos son 0unciones Lue tambi/n se activan con eventos, #ero a di0erencia de !os
#rocedimientos no son #roramadas #or e! usuario, sino Lue vienen "a #reN#roramadas
con e!
!enua(e. =os m/todos rea!iBan tareas tF#icas, #revisib!es " comunes #ara todas !as
a#!icaciones. De
a1F Lue venan con e! !enua(e " Lue se !ibere a! usuario de !a tarea de #roramar!os. Cada
ti#o de
ob(eto o de contro! tiene sus #ro#ios m/todos.
Por e(em#!o, !os contro!es r0icos tienen un m/todo !!amado line Lue se encara de dibu(ar
!Fneas rectas. De !a misma 0orma e@iste un m/todo !!amado circle Lue dibu(a
circun0erencias " arcos
de circun0erencia Es obvio Lue e! dibu(ar !Fneas rectas o circun0erencias es una tarea com>n
#ara
todos !os #roramadores " Lue Visual Basic da "a resue!ta..
1.#.4 Pro'ec,o% ' 5ic6ero%
Cada a#!icacin Lue se em#ieBa a desarro!!ar en Visual Basic es un nuevo pro1ecto. Cn
#ro"ecto
com#rende otras com#onentes ms senci!!as, como #or e(em#!o !os formularios ?Lue son
!as
ventanas de !a inter0ace de usuario de !a nueva a#!icacinA " !os m'dulos ?Lue son
con(untos de
0unciones " #rocedimientosA.
2C'mo se &uarda un pro1ecto en el disco3 Cn #ro"ecto se com#one siem#re de varios
ficheros ?a! menos de dosA " 1a" Lue #reocu#arse de uardar cada uno de e!!os en e!
directorio
adecuado " con e! nombre adecuado. E@iste siem#re un 0ic1ero con e@tensin 4.vbp ?%isual
Basic
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5
$ro#ectA Lue se crea con e! comando 5ile6+ave Project As. E! 0ic1ero de! #ro"ecto contiene
toda !a
infor!acin de con#unto. Ddems 1a" Lue crear un fichero por cada formulario 1 por
cada m'dulo
Lue tena e! #ro"ecto. =os 0ic1eros de !os 0ormu!arios se crean con 5ile6+ave 5ile As "
tienen como
e@tensin 4.frm. =os 0ic1eros de cdio o m'dulos se uardan tambi/n con e! comando
5ile6+ave
5ile As " tienen como e@tensin 4.bas.
C!icando en e! botn +ave en !a barra de 1erramientas se actua!iBan todos !os 0ic1eros de!
#ro"ecto. Si no se 1abFan uardado todavFa en e! disco, Visual Basic abre ca(as de di!oo
+ave As
#or cada uno de !os 0ic1eros Lue 1a" Lue uardar.
1.- EL ENTORNO DE PROGRAMACIN !ISUAL 7ASIC /.8
Cuando se arranca Visual Basic 4.0
a#arece en !a #anta!!a una con0iuracin
simi!ar a !a mostrada en !a 0iura 1.1. En
e!!a se #ueden distinuir !os siuientes
e!ementos6
1. =a *arra de ttulos, !a *arra de !en/s "
!a *arra de herra!ientas de Visual
Basic en modo 7ise*o ?#arte su#erior
de !a #anta!!aA.
2. +a#a de herra!ientas ?toolbo%A con !os
contro!es dis#onib!es ?a !a iBLuierda de
!a ventanaA.
*. For!ulario ?formA en ris, en Lue se
#ueden ir situando !os contro!es ?en e!
centroA. Est dotado de una re(i!!a ?&ridA #ara 0aci!itar !a a!ineacin de !os contro!es.
,. 2entana de "ro3ecto, Lue muestra !os 0ormu!arios " otros mdu!os de #roramas Lue
0orman
#arte de !a a#!icacin ?arriba a !a derec1aA.
-. 2entana de $ro"iedades, en !a Lue se #ueden ver !as #ro#iedades de! ob(eto se!eccionado
o de!
#ro#io 0ormu!ario ?aba(o a !a derec1aA. Si esta ventana no a#arece, se #uede 1acer visib!e
con !a
tec!a ),.
Construir a#!icaciones con Visual Basic 4.0 es mu" senci!!o6 basta crear !os contro!es en e!
0ormu!ario con a"uda de !a toolbo% " de! ratn, estab!ecer sus propiedades con a"uda de !a
ventana
de #ro#iedades " #roramar e! c'di&o Lue rea!ice !as acciones adecuadas en res#uesta a !os
eventos
o acciones Lue rea!ice e! usuario. D continuacin, tras e@#!icar brevemente cmo se uti!iBa
e! -elp
de Visual Basic, se #resentan a!unos e(em#!os i!ustrativos.
1./ EL 9ELP DE !ISUAL 7ASIC /.8
E! -elp de Visual Basic 4.0 es de !os me(ores Lue e@isten. Ddems de Lue se #uede buscar
cua!Luier ti#o de in0ormacin con !a 0uncin +earch, basta se!eccionar una #ro#iedad
cua!Luiera en
!a ventana de #ro#iedades o un contro! cua!Luiera en e! 0ormu!ario ?o e! #ro#io 0ormu!arioA,
#ara Lue
#u!sando !a tec!a T)1U a#areBca una ventana de a"uda mu" com#!eta. De cada contro! de
muestran
!as #ro#iedades, m/todos " eventos Lue so#orta, asF como e(em#!os de a#!icacin.
)iura 1.1. Entorno de #roramacin de Visual Basic 4.0.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6
E@iste adems un breve #ero interesante curso introductorio sobre Visual Basic 4.0 Lue se
activa con !a o#cin 8earnin& icrosoft Visual Basic 4.0 en e! men> -elp.
1.1 E:EMPLOS
E! entorno de #roramacin de Visual Basic o0rece muc1as #osibi!idades de ada#tacin a
!os
ustos, deseos " #re0erencias de! usuario. =os usuarios e@#ertos tienen siem#re una 0orma
#ro#ia de
1acer !as cosas, #ero #ara !os usuarios nove!es conviene o0recer unas ciertas orientaciones
a!
res#ecto. Por eso, antes de rea!iBar !os e(em#!os Lue siuen se recomienda modi0icar !a
con0iuracin de Visual Basic de !a siuiente 0orma6
1. En e! men> .ools e!eir e! comando 9ptionsV se abre un cuadro de di!oo con , so!a#as.
2. En !a so!a#a $nvironment e!eir W+ave Before :un; PromptX #ara Lue #reunte antes de
cada
e(ecucin si se desean uardar !os cambios rea!iBados. E!eir tambi/n W:e<uire Variable
7eclarationX #ara evitar errores a! tec!ear !os nombres de !as variab!es.
*. En !a so!a#a $ditor dar a W.ab !idthX un va!or de ,V e!eir !as o#ciones WAuto =ndentX
?#ara
Lue a"ude a mantener e! cdio !eib!e " ordenadoA, W5ull odule Vie"X ?#ara ver todo e!
cdio de un 0ormu!ario en una misma ventanaA " WProcedure +eparatorX ?#ara Lue se#are
cada
0uncin de !as dems mediante una !Fnea 1oriBonta!A.
1.1.1 E(e+plo 1.1: Sencillo pro;ra+a de colore%
' po%icione%
En !a 0iura 1.2 se muestra e! 0ormu!ario " !os
contro!es de un e(em#!o mu" senci!!o Lue #ermite
mover una ca(a de te@to #or !a #anta!!a, #ermitiendo
a su veB re#resentar!a con cuatro co!ores di0erentes.
En !a 7ab!a 1.2 se describen !os contro!es
uti!iBados, asF como a!unas de sus #ro#iedades ms
im#ortantes ?sobre todo !as Lue se se#aran de !os
va!ores #or de0ectoA.
Con,rol Propiedad !alor Con,rol Propiedad !alor
0rmCo!ores4 Name 0rmCo!ores4 o#t2erde Name o#t2erde
Ca#tion Co!ores Ca#tion 2erde
0raCo!ores Name 0raCo!or 0raPosicion Name 0raPosicion
Ca#tion Co!ores Ca#tion Posicin
o#tDBu! Name o#tDBu! o#tDrriba Name o#tDrriba
Ca#tion DBu! Ca#tion Drriba
o#t8o(o Name o#t8o(o o#tDba(o Name o#tDba(o
Ca#tion 8o(o Ca#tion Dba(o
o#tDmari!!o Name o#tDmari!!o t@tCa(a Name t@tCa(a
Ca#tion Dmari!!o 7e@t WX
7ab!a 1.2. +b(etos " #ro#iedades de! e(em#!o Colores0.
D continuacin se muestra e! cdio corres#ondiente a !os #rocedimientos de este e(em#!o.
Option Explicit
Private Sub optArriba_Click()
txtCaja.Top = 0
End Sub
)iura 1.2. )ormu!ario " contro!es de! E(em#!o 1.1.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7
Private Sub optAbajo_Click()
txtCaja.Top = 2160
End Sub
Private Sub optRojo_Click()
txtCaja.BackColor = &HFF&
End Sub
Private Sub optVerde_Click()
txtCaja.BackColor = &HFF00&
End Sub
Private Sub optAzul_Click()
txtCaja.BackColor = &HFF0000
End Sub
Private Sub optAmarillo_Click()
txtCaja.BackColor = &HFFFF&
End Sub
Sobre este #rimer #rorama en Visual Basic se #ueden 1acer a!unos comentarios6
1. E! comando 9ption $%plicit sirve #ara ob!iar a declarar todas !as variab!es Lue se
uti!icen.
Esto im#ide e! cometer errores en !os nombres de !as variab!es ?con0undir !asa con !esa,
#or
e(em#!oA. En este e(em#!o esto no tiene ninuna im#ortancia, #ero es conveniente
acostumbrarse a inc!uir esta o#cin. 7eclarar una variable es crear!a con un nombre " de
un
ti#o determinado antes de uti!iBar!a.
2. Cada una de !as #artes de cdio Lue em#ieBa con un Private +ub " termina con un $nd
+ub
es un procedimiento, esto es, una #arte de cdio inde#endiente " reuti!iBab!e. E! nombre
de
uno de estos #rocedimientos, #or e(em#!o optA>ul/Clic0?@, es tF#ico de Visual Basic. =a
#rimera #arte es e! nombre de un ob(eto ?contro!AV des#u/s va un se#arador Lue es e!
carcter
de subra"ado ?SAV a continuacin e! nombre de un evento Nclic8, en este casoN, " 0ina!mente
unos #ar/ntesis entre !os Lue irFan !os arumentos, en caso de Lue !os 1ubiera.
*. Es tambi/n interesante ver cmo se accede desde #rorama a !a #ro#iedad bac0Color de
!a
ca(a de te@to Lue se !!ama t%tCaja6 se 1ace uti!iBando e! #unto en !a 0orma
t%tCaja.Bac0Color.
,. Si se desea Lue e! cdio de todos !os eventos a#areBca en una misma ventana 1a" Lue
activar
!a o#cin 5ull odule Vie" en !a car#eta $ditor de! comando .ools69ptions.
-. $s mu1 importante crear #rimero e! contro! frame " des#u/s co!ocar !os botones de
opci'n
en su interior. No sirve 1acer!o a !a inversa. Visual Basic su#one Lue todos !os botones de
o#cin Lue estn dentro de! mismo frame 0orman #arte de! mismo ru#o " s!o #ermite Lue
uno est/ se!eccionado.
1.1.# E(e+plo 1.#: Minicalc)ladora ele+en,al
En este e(em#!o se muestra una ca!cu!adora e!ementa!
Lue #ermite 1acer !as cuatro o#eraciones aritm/ticas.
E! usuario introduce !os datos " c!ica sobre e!
botn corres#ondiente a !a o#eracin Lue desea
rea!iBar, a#areciendo inmediatamente e! resu!tado en !a
ca(a de te@to de !a derec1a.
=a 7ab!a 1.* muestra !os ob(etos " !as
#ro#iedades ms im#ortantes de este e(em#!o.
)iura 1.*. &inica!cu!adora e!ementa!.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9
Con,rol Propiedad !alor Con,rol Propiedad !alor
0rm&inica!c Name 0rm&inica!c !b!ELua! Name !b!ELua!
Ca#tion &inica!cu!adora Ca#tion Y
t@t+#er1 Name t@t+#er1 cmdSuma Name cmdSuma
7e@t Ca#tion Z
t@t+#er2 Name t@t+#er2 cmd8esta Name cmd8esta
7e@t Ca#tion N
t@t8esu!t Name t@t8esu!t cmd&u!ti Name cmdProd
7e@t Ca#tion [
!b!+# Name !b!+# cmdDivi Name cmdDiv
Ca#tion Ca#tion M
7ab!a 1.*. +b(etos " #ro#iedades de! e(em#!o &inica!cu!adora.
D continuacin se muestra e! cdio corres#ondiente a !os #rocedimientos Lue estionan
!os
eventos de este e(em#!o.
Option Explicit
Private Sub cmdSuma_Click()
lblOp.Caption = "+"
txtResult.Text = Val(txtOper1.Text) + Val(txtOper2.Text)
End Sub
Private Sub cmdResta_Click()
lblOp.Caption = "-"
TxtResult.Text = Val(txtOper1.Text) - Val(txtOper2.Text)
End Sub
Private Sub cmdProd_Click()
lblOp.Caption = "*"
TxtResult.Text = Val(txtOper1.Text) * Val(txtOper2.Text)
End Sub
Private Sub cmdDiv_Click()
lblOp.Caption = "/"
TxtResult.Text = Val(txtOper1.Text) / Val(txtOper2.Text)
End Sub
En este e(em#!o se 1a uti!iBado re#etidamente !a 0uncin Val?@ de Visual Basic. Esta
0uncin
convierte una serie de caracteres num/ricos ?un te@to 0ormado #or ci0rasA en e! n>mero
entero o de
#unto 0!otante corres#ondiente. No es !o mismo !os caracteres W1X " W2X 0ormando !a
cadena o
string W12X Lue e! n>mero 12V !a 0uncin val?@ convierte cadenas de caracteres num/ricos Q
con !os
Lue no se #ueden rea!iBar o#eraciones aritm/ticasN en !os n>meros corres#ondientes Qcon
!os Lue sF
se #uede o#erar matemticamenteN.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina :
1.1.- E(e+plo 1.-: Tran%5or+acin de )nidade% de ,e+pera,)ra
=a 0iura 1., muestra un #rorama senci!!o Lue
#ermite ver !a eLuiva!encia entre !as esca!as de
tem#eraturas en rados centFrados " rados
)a1ren1eit. En e! centro de! 0ormu!ario a#arece una
barra de des#!aBamiento vertica! Lue #ermite
des#!aBarse con incrementos #eLue'os de 1\ C "
randes de 14\ C. Como es 1abitua!, tambi/n #uede
cambiarse e! va!or arrastrando con e! ratn e! cursor
de !a barra. =os va!ores m@imos " mFnimo de !a
barra son 144\ C " N144\ C.
D ambos !ados de !a barra a#arecen dos
cuadros de te@to ?co!or de 0ondo b!ancoA donde
a#arecen !os rados corres#ondientes a !a barra en
ambas esca!as. Encima a#arecen dos rtu!os ?la*elsA
Lue indican !a esca!a de tem#eraturas corres#ondiente. Com#!etan !a a#!icacin un botn
+alir Lue
termina !a e(ecucin " un men> 5ile con !a >nica o#cin $%it, Lue termina asimismo !a
e(ecucin
de! #rorama.
=a 7ab!a 1., indica !os contro!es uti!iBados en este e(em#!o (unto con !as #ro#iedades " !os
va!ores corres#ondientes.
Con,rol Propiedad !alor Con,rol Propiedad !alor
0rm7em# Name 0rm7em# vsb7em# Name vsb7em#
Ca#tion Conversor de
tem#eraturas
&in 144
mnu)i!e Name mnu)i!e &a@ N144
Ca#tion ])i!e Sma!!C1ane 1
mnu)i!eE@it Name mnu)i!eE@it =areC1ane 14
Ca#tion E]@it 2a!ue 4
cmdSa!ir Name cmdSa!ir !b!Cent Name !b!Cent
Ca#tion Sa!ir Ca#tion 9rados CentFrados
)ont &S Sans Seri0, 3o!d, 1, )ont &S Sans Seri0, 14
t@tCent Name t@tCent !b!)a1r Name !b!)a1r
te@t 4 Ca#tion 9rados )a1ren1eit
t@t)a1r Name t@t)a1r )ont &S Sans Seri0, 14
te@t *2
7ab!a 1.,. Contro!es " #ro#iedades de! E(em#!o 1.*.
Por otra #arte, e! cdio con e! Lue este #rorama res#onde a !os eventos es e! contenido en
!os siuientes #rocedimientos6
Private Sub cmdSalir_Click()
Beep
End
End Sub
Private Sub mnuFileExit_Click()
End
End Sub
Private Sub vsbTemp_Change()
txtCent.Text = vsbTemp.Value
txtFahr.Text = 32 + 1.8 * vsbTemp.Value
End Sub
)iura 1.,. ELuiva!encia de tem#eraturas.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )(
Sobre este tercer e(em#!o se #uede comentar !o siuiente6
1. Se 1a uti!iBado !a #ro#iedad Value de !a barra de des#!aBamiento, !a cua! da e! va!or
actua! de
!a misma con res#ecto a !os !Fmites in0erior " su#erior, #reviamente estab!ecidos ?N144 "
144A.
2. &ediante e! #rocedimiento cmd+alir/Clic0, se cierra e! #rorama, racias a !a
instruccin
$nd. E! cometido de Beep no es otro Lue e! de emitir un #itido a trav/s de! a!tavoB de!
ordenador, Lue nos indicar Lue en e0ecto se 1a sa!ido de! #rorama.
*. =a 0uncin mnu5ile$%it/Clic0?@ " activa desde e! men> " termina !a e(ecucin sin emitir
nin>n sonido.
,. )ina!mente, !a 0uncin vsb.emp/Chan&e?@ se activa a! cambiar e! va!or de !a barra de
des#!aBamientoV su e0ecto es modi0icar e! va!or de !a #ro#iedad te%t en !as ca(as de te@to
Lue
muestran !a tem#eratura en cada una de !as dos esca!as.
1.1./ E(e+plo 1./: Colore% RG7
=a 0iura 1.- muestra e! 0ormu!ario " !os contro!es
de! #ro"ecto Colores. Se dis#one de tres barras de
des#!aBamiento con !as Lue #ueden contro!arse
!as com#onentes 893 de! co!or de! 0ondo " de!
co!or de! te@to de un contro! label. Dos botones
de o#cin #ermiten determinar si !os va!ores de
!as barras se a#!ican a! 0ondo o a! te@to. Cuando
se cambia de! te@to a! 0ondo o viceversa !os
va!ores de !as barras de des#!aBamiento ?" !a
#osicin de !os cursoresA cambian de modo
acorde.
D !a dc1a. de !as barras de des#!aBamiento
tres ca(as de te@to contienen !os va!ores
num/ricos de !os tres co!ores ?entre 4 " 2--A. D !a
iBda. tres labels indican !os co!ores de !as tres barras. =a 7ab!a 1.- muestra !os contro!es "
!as
#ro#iedades uti!iBadas en e! este e(em#!o.
Con,rol Propiedad !alor Con,rol Propiedad !alor
0rmCo!ores Name 0rmCo!ores 1sbCo!or Name 1sbCo!or
Ca#tion Co!ores &in 4
!b!Cuadro Name !b!Cuadro &a@ 2--
Ca#tion 7EG7+ Sma!!C1ane 1
)ont &S Sans Seri0, 3o!d, 2, =areC1ane 1.
cmdSa!ir Name cmdSa!ir Inde@ 4,1,2
Ca#tion Sa!ir 2a!ue 4
)ont &S Sans Seri0, 3o!d, 14 t@tCo!or Name t@tCo!or
o#t+#cion Name o#t+#cion 7e@t 4
Inde@ 4,1 =ocKed true
Ca#tion )ondo,7e@to Inde@ 4,1,2
)ont &S Sans Seri0, 3o!d, 14 !b!Co!or Name !b!Co!or
Ca#tion 8o(o,2erde,DBu!
Inde@ 4,1,2
)ont &S Sans Seri0, 14
7ab!a 1.- +b(etos " #ro#iedades de! e(em#!o Co!ores.
)iura 1.-. Co!ores de 0ondo " de te@to.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina ))
Cna caracterFstica im#ortante de este e(em#!o es Lue se 1an uti!iBado vectores ?arra1s@ de
controles. =as tres barras se !!aman hsbColor " se di0erencian #or !a #ro#iedad =nde%, Lue
varFa
entre 4 " 2. 7ambi/n !as tres ca(as de te@to, !as tres labels " !os dos botones de o#cin son
arra1s de
controles. =a venta(a de !os arra3s de contro!es es Lue #ueden com#artir e! cdio de !os
eventos "
#ermitir un tratamiento con(unto #or medio de buc!es for. D continuacin se muestra e!
cdio
corres#ondiente a !os #rocedimientos Lue tratan !os eventos de! este e(em#!o.
Option Explicit
Public Brojo, Bverde, Bazul As Integer
Public Frojo, Fverde, Fazul As Integer
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
Brojo = 0
Bverde = 0
Bazul = 0
Frojo = 255
Fverde = 255
Fazul = 255
lblCuadro.BackColor = RGB(Brojo, Bverde, Bazul)
lblCuadro.ForeColor = RGB(Frojo, Fverde, Fazul)
End Sub
Private Sub hsbColor_Change(Index As Integer)
Dim I As Integer
If optOpcion(0).Value = True Then
lblCuadro.BackColor=RGB(hsbColor(0).Value, _
hsbColor(1).Value, hsbColor(2).Value)
For I = 0 To 2
txtColor(I).Text = hsbColor(I).Value
Next I
Else lblCuadro.ForeColor = RGB(hsbColor(0).Value, _
hsbColor(1).Value, hsbColor(2).Value)
For I = 0 To 2
txtColor(I).Text = hsbColor(I).Value
Next I
End If
End Sub
Private Sub optOpcion_Click(Index As Integer)
If Index = 0 Then
Frojo = hsbColor(0).Value
Fverde = hsbColor(1).Value
Fazul = hsbColor(2).Value
hsbColor(0).Value = Brojo
hsbColor(1).Value = Bverde
hsbColor(2).Value = Bazul
Else
Brojo = hsbColor(0).Value
Bverde = hsbColor(1).Value
Bazul = hsbColor(2).Value
hsbColor(0).Value = Frojo
hsbColor(1).Value = Fverde
hsbColor(2).Value = Fazul
End If
End Sub
E! cdio de este e(em#!o es un #oco ms com#!icado Lue e! de !os e(em#!os anteriores "
reLuiere unas ciertas e@#!icaciones adiciona!es ade!antando cuestiones Lue se vern
#osteriormente6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )-
1. =a 0uncin :AB?@ crea un c'di&o de color a #artir de sus arumentos6 !as com#onentes
893
?Red, Green and BlueA. Estas com#onentes, cu"o va!or se a!macena en un b"te " #uede
osci!ar
entre 4 " 2--, se determinan #or medio de !as tres barras de des#!aBamiento.
2. E! co!or blanco se obtiene con !os tres co!ores 0undamenta!es a su m@ima intensidad. E!
co!or ne&ro se obtiene con !os tres co!ores 893 a cero.
*. Es im#ortante dis#oner de unas variables &lobales Lue a!macenen !os co!ores de! 0ondo "
de!
te@to, " Lue #ermitan tanto uardar !os va!ores anteriores de !as barras como cambiar /stas
a
sus nuevos va!ores cuando se c!ica en !os botones de o#cin. =as variab!es !oba!es,
de0inidas
en !a #arte de de0iniciones enera!es de! cdio, 0uera de cua!Luier #rocedimiento, son
visib!es desde cua!Luier #arte de! #rorama. =as variab!es de0inidas dentro de una 0uncin o
#rocedimiento s!o son visib!es desde dentro de dic1a 0uncin o #rocedimiento ?varia*les
localesA.
,. =a 0uncin hsbColor/Chan&e?=nde% As =nte&er@ se activa cada veB Lue se cambia e!
va!or en
una cua!Luiera de !as barras de des#!aBamiento. E! arumento =nde%, Lue Visual Basic
de0ine
automticamente, indica cu! de !as barras de! arra" es !a Lue 1a cambiado de va!or ?!a 4, !a
1
!a 2A. En este e(em#!o dic1o arumento no se 1a uti!iBado, #ero est dis#onib!e #or si se
1ubiera Luerido uti!iBar en e! cdio.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina ).
#. ENTORNO DE PROGRAMACIN !ISUAL 7ASIC /.8
#.1 INTRODUCCIN : <=U> ES !ISUAL 7ASIC?
Visual Basic 4.0 es una e@ce!ente 1erramienta de #roramacin Lue #ermite crear
a#!icaciones
#ro#ias ?#roramasA #ara !indo"s B.,, !indo"s () o !indo"s #.. Con e!!a se #uede
crear desde
una sim#!e ca!cu!adora 1asta una 1o(a de c!cu!o de !a ta!!a de $%cel ?en sus #rimeras
versiones...A,
#asando #or un #rocesador de te@tos o cua!Luier otra a#!icacin Lue se !e ocurra a!
#roramador.
Sus a#!icaciones en InenierFa son casi i!imitadas6 re#resentacin de movimientos
mecnicos o de
0unciones matemticas, r0icas termodinmicas, simu!acin de circuitos, etc.
Este #rorama #ermite crear ventanas, botones, men>s " cua!Luier otro e!emento de
!indo"s
de una 0orma 0ci! e intuitiva. E! !enua(e de #roramacin Lue se uti!iBar ser e! Basic,
Lue se
describir en e! siuiente ca#Ftu!o.
D continuacin se #resentarn a!unos as#ectos de! entorno de traba(o de Visual Basic6
men>s, o#ciones, 1erramientas, #ro#iedades, etc.
#.# EL ENTORNO DE !ISUAL 7ASIC /.8
Visual Basic tiene todos !os e!ementos Lue caracteriBan a !os #roramas de !indo"s e
inc!uso
a!uno menos 1abitua!. En cua!Luier caso, e! entorno de Visual Basic es mu" !ico "
natura!, "
adems se #uede obtener una descri#cin de !a ma"orFa de !os e!ementos c!icando en e!!os
#ara
se!eccionar!os " #u!sando !ueo !a tec!a T)1U.
#.#.1 La .arra de +en@%
=a barra de men>s de! Visual Basic resu!ta simi!ar a !a de cua!Luier otra a#!icacin de
!indo"s, ta!
" como a#arece en !a 0iura 2.1. 3a(o dic1a barra a#arece !a barra de 1erramientas, con una
serie de
botones Lue #ermiten acceder 0ci!mente a !as o#ciones ms im#ortantes de !os men>s.
En !a misma barra donde a#arecen !os botones tambi/n se #ueden ver a !a derec1a dos
recuadros con n>meros, Lue re#resentan cuatro #ro#iedades de! 0ormu!ario Lue se vern
ms
ade!ante6 .op " 8eft, Lue indican !a #osicin de !a esLuina su#erior iBLuierda de!
0ormu!ario, "
tambi/n -ei&ht " !idth, Lue describen e! tama'o de! mismo en unas unidades !!amadas
t"ips, Lue
se corres#onden con !a vi/sima #arte de un punto ?una #u!ada tiene 72 #untos " 1,,4
t%i#sA.
)iura 2.1. 3arra de men>s de 2isua! 3asic ,.4.
E! men> 5ile tiene #ocas novedades. =o ms im#ortante es !a distincin entre pro1ectos "
todos !os dems 0ic1eros. Como "a se 1a dic1o, un #ro"ecto re>ne " oraniBa todos !os
0ic1eros Lue
com#onen e! #rorama o a#!icacin ?1ace !a 0uncin de una car"eta Lue contuviera
a"untesA. Estos
0ic1eros #ueden ser for!ularios, !dulos " herra!ientas ?Lue serFan !os a"untes
contenidos en !a
car"etaA. Cuatro botones ba(o !a barra de men>s corres#onden a o#ciones de! men> 5ile.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )&
7am#oco e! men> $dit a#orta cambios im#ortantes sobre !o Lue es 1abitua!. Por e!
contrario
e! men> Vie", enera!mente de #oca uti!idad, es bastante #ro#io de Visual Basic. Este
men>
#ermite acceder a un 0ormu!ario o a! cdio re!acionado con un contro! ?Lue tambi/n
a#arece si se
c!ica dos veces en dic1o contro!A, " mane(ar 0unciones " #rocedimientos.
7odavFa ms caracterFsticos son !os men>s =nsert " :un. E! #rimero de e!!os a"uda a
insertar
un nuevo e!emento ?0ormu!ario, mdu!oV etc.A en e! #ro"ecto " e! seundo es de uti!idad
cuando "a
se 1a"a creado !a a#!icacin " se Luiera ver cmo 0unciona, o bien 1a"a Lue encontrar
a!unos
errores e(ecutando #aso a #aso, o viendo resu!tados intermedios.
En e! men> .ools69ptions se encuentran dos o#ciones re!ativas a! #ro"ecto en e! Lue se
traba(a. $nvironment determina !as #ro#iedades de! entorno de! #ro"ecto, como #or
e(em#!o !o
re0erente a !a retFcu!a o &rid Lue a#arece en e! 0ormu!ario, a !as o#ciones #ara actuali>ar o
no !os
0ic1eros antes de cada e(ecucin, o a !a necesidad de declarar todas !as variab!esV $ditor
#ermite
se!eccionar e! ti#o de !etra, si se Luieren ver todos !os #rocedimientos (untos en !a misma
ventana o
no " !os cdios de co!or con !os Lue a#arecen !os distintos e!ementos de! cdio. =a
o#cin Project
s!o 1ace re0erencia a! 0ormu!ario con e! Lue comienBa !a a#!icacin.
Por >!timo, !a a"uda ?siem#re im#rescindib!e " en e! caso de Visual Basic #articu!armente
bien 1ec1aA Lue se encuentra en e! men> -elp, se basa 0undamenta!mente en un .utorial, e!
una
c!asi0icacin ordenada de !a in0ormacin dis#onib!e ?ContentsA " en !a b>sLueda de
in0ormacin
sobre a!>n tema #or e! nombre ?+earch for -elp on...A. Como "a se 1a mencionado, !a
tec!a T)1U
#ermite una a"uda directa sensib!e a! conte@to, esto es de#endiente de donde se 1a"a
c!icado con e!
ratn ?o de !o Lue est/ se!eccionadoA.
#.#.# La% 6erra+ien,a% A,ool.oBC
Es !a Bona reservada a !os controles con !os Lue se #uede dise'ar !a #anta!!a
de !a a#!icacin. Estos contro!es son #or e(em#!o botones, etiLuetas, ca(as
de te@to, Bonas r0icas, etc. Para introducir un contro! en e! 0ormu!ario
sim#!emente 1a" Lue c!icar en e! icono adecuado de !a tool*o; " co!ocar!o
en e! 0ormu!ario con !a #osicin " e! tama'o deseado, c!icando "
arrastrando con e! ratn.
#.- *ORMULARIOS A59:+C " MDULOS
=os formularios son !as Bonas de !a #anta!!a sobre !as Lue se dise'a e!
#rorama " sobre !as Lue se sit>an !os contro!es o 1erramientas de !a
toolbo%. D! e(ecutar e! #rorama, e! form se convertir en !a ventana de !a
a#!icacin, donde a#arecern !os botones, e! te@to, !os r0icos, etc.
Para !orar una me(or #resentacin e@iste una ma!!a o retFcu!a ?&ridA
Lue #ermite a!inear !os contro!es manua!mente de una 0orma #recisa
?evitando tener Lue introducir coordenadas continuamenteA. Esta ma!!a s!o
ser visib!e en e! #roceso de dise'o de! #roramaV a! e(ecutar!o no se ver.
De cua!Luier 0orma, se #uede desactivar !a ma!!a o cambiar sus
caracterFsticas en e! men> .ools69ptions6$nvironment, cambiando !a
o#cin Ali&n to Arid.
E@teriormente, !os 0ormu!arios tienen una estructura simi!ar a !a de cua!Luier ventana. Sin
embaro, tambi/n #oseen un cdio de #roramacin Lue estar escrito en Basic, " Lue
contro!ar
)iura 2.2. Ca(a de
1erramientas ?.oolbo%A.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )5
a!unos as#ectos de! 0ormu!ario, sobre todo en !a 0orma de reaccionar ante !as acciones de!
usuario
?eventosA. E! 0ormu!ario " !os contro!es en /! situados sern e! esLue!eto o !a base de!
#rorama.
Por tanto, cuando se va"a a crear un #rorama en Visual Basic 1abr Lue seuir dos #asos6
1. Dise'ar " #re#arar !a #arte r0ica ?0ormu!ario, botones, men>s, etc.A
2. 8ea!iBar !a #roramacin Lue estione !a res#uesta de! #rorama ante !os distintos
eventos.
#./ LA !ENTANA DE PRO"ECTO AP:9J$C.C
Esta ventana #ermite acceder a !os distintos 0ormu!arios "
mdu!os Lue com#onen e! #ro"ecto. Desde e!!a se #uede
ver e! dise'o r0ico de dic1os 0ormu!arios ?botn Vie"
5ormA, " tambi/n #ermite editar e! cdio Lue contienen
?botn Vie" CodeA.
=os m'dulos son s!o cdio Lue en enera! a0ecta
a todo e! #ro"ecto e inc!uso a varios #ro"ectos. Por
e(em#!o #uede #re#ararse un mdu!o de 0unciones
matemticas Lue sea de uti!idad enera!. Norma!mente
contienen siem#re a!unas dec!araciones de variab!es
!oba!es, Lue sern accesib!es desde todos !os 0ormu!arios.
#.1 LA !ENTANA DE PROPIEDADES AP:9P$:.=$+C
7odos !os ob(etos Visual Basic tienen unas #ro#iedades
Lue !os de0inen6 su nombre ?nameA, su etiLueta o tFtu!o
?caption4, e! te@to Lue contiene ?te%t4, su tama'o "
#osicin, su co!or, si est activo o no ?enabledA, etc.
7odas estas #ro#iedades se a!macenan dentro de cada
contro! o 0ormu!ario en 0orma de estructura ?simi!ar a !as
de! !enua(e CA. Por tanto, si #or e(em#!o en a!>n
momento se Luiere modi0icar e! nombre de un botn basta
con 1acer!o en !a ventana de #ro#iedades ?a! dise'ar e!
#roramaA o en e! cdio en Basic ?durante !a e(ecucinA,
mediante e! o#erador #unto ?.A, en !a 0orma6
Boton1.Name = "NuevoNombre"
Para rea!iBar una modi0icacin de !as #ro#iedades de
un ob(eto durante e! dise'o de! #rorama, se activar !a
ventana de #ro#iedades ?con e! men>, con e! botn de !a
barra de 1erramientas o #u!sando T),UA " se !oca!iBar con a"uda de !a barra de
des#!aBamiento !a
#ro#iedad Lue se Luiera modi0icar. D! c!icar sobre e!!a #uede activarse un men> des#!eab!e
con !as
distintas o#ciones, o bien #uede modi0icarse directamente e! va!or de !a #ro#iedad. Si esta
#ro#iedad
tiene s!o unos va!ores 0i(os ?#or e(em#!o, !os co!oresA, #uede abrirse un cuadro de di!oo
#ara
e!eir un co!or, o e! tama'o " ti#o de !etra Lue se desee si se trata de una #ro#iedad 5ont.
)iura 2.*. 2entana de #ro"ecto.
)iura 2.,. 2entana de #ro#iedades.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )6
#.2 CREACIN DE PROGRAMAS E:ECUTA7LES
Cna veB 0ina!iBada !a #roramacin de !a nueva a#!icacin, !a siuiente tarea sue!e consistir
en !a
creacin de un #rorama e(ecutab!e #ara su distribucin e insta!acin en cuantos
ordenadores se
desee, inc!uso aunLue en e!!os no est/ insta!ado Visual Basic.
Para crear un #rorama e(ecutab!e se uti!iBa e! comando a0e $C$ 5ile D en e! men>
5ile .
De esta manera se enerar un 0ic1ero cu"a e@tensin ser 4.e%e. Para Lue este #rorama
0uncione
en un ordenador so!amente se necesita Lue e! 0ic1ero VB400,E.788 ?#ara sistemas
o#erativos de 1.
bitsA o VB400BF.788 ?#ara sistemas o#erativos de *2 bitsA est/ insta!ado en e! directorio
cGH!indo"sH+1stem. En e! caso de #ro"ectos ms com#!e(os en !os Lue se uti!icen muc1os
contro!es
#ueden ser necesarios ms 0ic1eros, !a ma"orFa de e!!os con e@tensiones 4.oc%, [.vb% o
4.dll. Para
saber en cada caso cu!es son !os 0ic1eros necesarios se #uede consu!tar e! 0ic1ero 4.vbp
Lue
contiene !a descri#cin com#!eta de! #ro"ecto. Casi todos esos 0ic1eros necesarios se
insta!an
automticamente a! insta!ar e! com#i!ador de Visual Basic en e! ordenador.
En e! caso de e! #rorama se va"a a uti!iBar en un ordenador en e! Lue no est/ insta!ado
Visual
Basic o de Lue en e! #ro"ecto se 1a"an uti!iBado contro!es comercia!es ?como !os Cr1stal
:eports
#ara !a creacin de in0ormes, !os +heridan 7ata !id&ets o !os .rue 7BArid de Ape% #ara
!a
estin de bases de datos, etc.A, #uede resu!tar interesante construir unos dis<uetes de
instalaci'n
Lue sim#!i0iLuen !a tarea de insta!ar e! #rorama en cua!Luier ordenador sin tener Lue ver
en cada
caso cu!es son !os 0ic1eros Lue 0a!tan. Visual Basic dis#one de un Asistente ?!i>ardA Lue,
interactivamente, sim#!i0ica enormemente !a tarea de creacin de disLuetes de insta!acin.
Este
Asistente est en e! mismo ru#o de #roramas Lue Visual Basic " se !!ama Application
+etup
!i>ard.
#.4 CMO UTILIDAR EL 9ELP
Visual Basic 4.0 dis#one de un -elp e@ce!ente,
como !a ma"orFa de !as a#!icaciones de
icrosoft. Estando se!eccionado un contro!,
una #ro#iedad o un 0ormu!ario, o estando
se!eccionada una #a!abra c!ave en una ventana
de cdio, esta a"uda se #uede uti!iBar de !odo
sensi*le al conte;to #u!sando !a tec!a T)1U.
7ambi/n se #uede ver de modo enera! "
ordenado toda !a in0ormacin dis#onib!e con e!
comando Contents.
+tra 0orma de acceder a !a a"uda es
mediante !as o#ciones de! men> -elp. DsF
mediante !a o#cin +earch 5or -elp 9n se
#uede obtener in0ormacin sobre muc1os
t/rminos re!acionados con Visual Basic.
Cna veB obtenida !a a"uda sobre e!
t/rmino so!icitado se #ueden encontrar temas
re!acionados con ese t/rmino en !a o#cin +ee
Also. En e! caso de Lue se 1a"a so!icitado
a"uda sobre un determinado ti#o de contro! ?en
!a 0iura 2.- se 1a 1ec1o con !os botonesA, se
)iura 2.-. D"uda de 2isua! 3asic.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )7
#odrFa acceder tambi/n a !a a"uda sobre todos " cada uno de sus #ro#iedades, eventos "
m/todos
con !as o#ciones Properties, ethods " $vents res#ectivamente.
E! botn Contents de !a ventana de a"uda sirve #ara acceder a una #anta!!a en !a Lue !a
a"uda
est ordenada #or temas, e! de +earch sirve #ara acceder a una #anta!!a en !a Lue se #odr
rea!iBar
una nueva b>sLueda a #artir de un t/rmino introducido #or e! usuario. E! botn Bac0 sirve
#ara
reresar a !a #anta!!a desde !a Lue se 1a !!eado a !a actua! " con e! botn Print se #uede
im#rimir e!
contenido de !a a"uda.
E! mane(o de !os men>s de! -elp es mu" senci!!o e intuitivo " ta! veB s!o mereBca ser
e@#!icado e! 1ec1o de Lue se #ueden #oner marcas ?boo0mar0sA en aLue!!os contenidos de
!a a"uda
Lue se su#ona va"an a ser uti!iBados 0recuentemente. De esta manera e! acceso a!
contenido de esas
etiLuetas o boo0mar0s ser inmediato. Esto se 1ace con !a o#cin 7efineD de! men>
Boo0mar0.
#.4.1 U,iliEacin del De.);;er
Cua!Luier #roramador con un mFnimo de e@#eriencia sabe Lue una #arte mu" im#ortante
?muc1as
veces !a ma"or #arteA de! tiem#o destinado a !a e!aboracin de un #rorama se destina a !a
detecci'n
1 correcci'n de errores. Casi todos !os entornos de desarro!!o dis#onen 1o" en dFa de
#otentes
1erramientas Lue 0aci!itan !a de#uracin de !os #roramas rea!iBados. =a 1erramienta ms
uti!iBada
#ara e!!o es e! <e"urador o 7ebu&&er. =a caracterFstica #rinci#a! de! 7ebu&&er es Lue
#ermite
e(ecutar #arcia!mente e! #rorama, deteniendo !a e(ecucin en e! #unto deseado "
estudiando en
cada momento e! va!or de cada una de !as variab!es. De esta manera se 0aci!ita
enormemente e!
descubrimiento de !as 0uentes de errores.
Para e(ecutar parcialmente un
#rorama se #ueden uti!iBar varias
0ormas. Cna de e!!as consiste en
inc!uir brea0points ?#untos de #arada
de !a e(ecucinA en determinadas
!Fneas de! cdio. E! co!ocar un
brea0point en una !Fnea de cdio
im#!ica Lue !a e(ecucin de!
#rorama se detendr a! !!ear a esa
!Fnea. Para insertar un brea0point en
una !Fnea de! cdio se uti!iBa !a
o#cin .o&&le Brea0point de! men>
:un o se #u!sa !a tec!a T)9U a! estar
#osicionado sobre !a !Fnea en
cuestin. Para borrar!o se re#ite esa
o#eracin. Se sabe Lue en una !Fnea
est activado un brea0point #orLue e!
co!or de 0ondo de esa !Fnea #asa a ser
di0erente ?#or de0ecto #asa a ser de
un ro(o mu" oscuro aunLue esto es
#ersonaN!iBab!eA. En ese momento se
#uede consu!tar e! va!or de cua!Luier
variab!e Lue sea accesib!e desde ese #unto en !a ventana de de#uracin ?7ebu& !indo"A.
Para e!!o
se #recede e! nombre de !a variab!e de! carcter interroacin ?<A " se #u!sa !a tec!a return.
En !a 0iura 2.. se #uede observar como !a e(ecucin de! #rorama est detenida en !a !Fnea
recuadrada. Se #uede observar tambi/n !a variacin de! co!or de 0ondo de !a !Fnea anterior
debido a
)iura 2... Cti!iBacin de! Debuer #ara ver e! va!or de #ro#iedades.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina )9
Lue en e!!a 1a" un brea0point. =a ventana de de#uracin ?7ebu& !indo"A 1a sido uti!iBada
#ara
consu!tar e! va!or de !a #ro#iedad .e%t de! contro! t%tCaja.
De todos modos no es estrictamente necesaria !a uti!iBacin de brea0points #ara !a
e(ecucin
#arcia! de un #rorama. Esto se #uede 1acer tambi/n e(ecutando e! #rorama paso a paso
?o lnea a
lneaA. Para 1acer esto 1a" varias o#ciones6 #u!sando !a tec!a T)HU, se!eccionando !a o#cin
+tep =nto de! men> :un o c!icando en e! botn corres#ondiente. Esta instruccin 1ace Lue
se
e(ecute una !Fnea de! cdio. En e! caso de Lue /sta se trate de !a !!amada a un
#rocedimiento
o 0uncin !a e(ecucin se tras!adar a !a #rimera !Fnea de ese #rocedimiento o 0uncin. En e!
caso de
Lue se desee e(ecutar toda !a 0uncin en un >nico #aso ?#orLue se tiene constancia de Lue
esa
0uncin 0unciona correctamente #or e(em#!oA se #uede 1acer mediante !a o#cin +tep 9ver,
#u!sando !as tec!as Tma">scu!asU " T)HU simu!tneamente, o c!icando en e! botn
corres#ondiente. En este caso !a e(ecucin se tras!ada a !a !Fnea inmediatamente #osterior a
!a
!!amada a !a 0uncin. En e! caso de Lue !a !Fnea a e(ecutar no sea !a !!amada a una 0uncin
ambas
o#ciones ?+tep =nto " +tep 9verA o#eran id/nticamente.
=a uti!iBacin de! 7ebu&&er #ermite tambi/n otras o#ciones mu" interesantes como !a de
e(ecutar e! #rorama 1asta !a !Fnea en !a Lue se encuentre #osicionado e! cursor ?con +tep
.o Cursor
o Ctrl+I5JKAV !a de continuar con !a e(ecucin de! #rorama 1asta e! siuiente brea0point
en e!
caso de Lue !o 1a"a o 1asta e! 0ina! de! mismo si no 1a" ninuno ?con +tart o T)-UAV " !a
#osibi!idad
de vo!ver a comenBar !a e(ecucin ?con :estart o a1Lsculas+ I5)KA.
Ddems de !as "a mencionadas, tambi/n e@iste !a #osibi!idad de detener
momentneamente !a e(ecucin de! #rorama mediante e! botn de #ausa ?Pause@ o !a
combinacin de tec!as Ctrl+Pausa. +tra o#cin Lue #uede resu!tar >ti! es !a de conocer
#ermanentemente e! va!or de una variab!e sin tener Lue consu!tar!o cada veB. Para conocer
inmediatamente e! va!or de una
variab!e 1a" Lue a'adir /sta a !a
ventana !atch. Esto se 1ace con
!a o#cin Add !atchD de! men>
.ools. =as variab!es a1F indicadas
se actua!iBarn automticamente
en !a ventana de de#uracin,
indicndose tambi/n cuando no
son accesib!es desde e!
#rocedimiento Lue se est/
e(ecutando ?9ut of Conte%tA.
En de0initiva, un mane(o hMbil de! 7ebu&&er es necesario #ara reso!ver con 0aci!idad !os
#rob!emas Lue se #resenten en !a #roramacin. Cn conocimiento am#!io de !a 0aci!idades
de !as
Lue dis#one esta 1erramienta 1ace Lue des#u/s se combinen de !a 0orma ms adecuada #ara
reso!ver
cada uno de !os #rob!emas Lue se va"an #resentando. Es im#ortante indicar aLuF Lue !a
uti!iBacin
ms 1abitua! de! 7ebu&&er consiste en !a combinacin de todas sus #osibi!idades, es decir,
activacin de brea0points en !Fneas c!ave de! #rorama, e(ecucin #aso a #aso entre
brea0points,
estudio deta!!ado de unas 0unciones #asando otras #or a!to, uti!iBacin de !a ventana !atch
#ara e!
conocimiento #ermanente de unas #ocas variab!es o #ro#iedades, consu!tas re#etidas en !a
ventana
de de#uracin sobre e! va!or de otras muc1as variab!es " #ro#iedades, etc.
)iura 2.7. 2entana de! Debu de 2isua! 3asic.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina ):
-. LENGUA:E 7ASIC
-.1 INTRODUCCIN
En este ca#Ftu!o se e@#!ican !os 0undamentos de! !enua(e de #roramacin Basic uti!iBado
en e!
sistema de desarro!!o #ara Visual Basic 4.0 de icrosoft. En este manua! se su#one Lue e!
!ector no
tiene conocimientos #revios de #roramacin.
Cn pro&rama Qen sentido in0ormticoQ est constituido en un sentido enera! #or variables
Lue contienen !os datos con !os Lue se traba(a " #or al&oritmos Lue son !as sentencias Lue
o#eran
sobre estos datos. Estos datos " a!oritmos sue!en estar inc!uidos dentro de funciones o
procedimientos.
Cn #rocesador diita! >nicamente es ca#aB de entender aLue!!o Lue est constituido #or
con(untos de unos " ceros. D esto se !e !!ama lengua#e de !0uina o *inario, " es mu"
di0Fci! de
mane(ar. Por e!!o, desde casi !os #rimeros a'os de !os ordenadores, se comenBaron a
desarro!!ar !os
!!amados lengua#es de alto nivel ?ta!es como e! 5ortran, e! Cobol, etc.A, Lue estn muc1o
ms cerca
de! !enua(e natura!. Estos !enua(es estn basados en e! uso de identificadores, tanto #ara
!os datos
como #ara !as com#onentes e!ementa!es de! #rorama, Lue en a!unos !enua(es se !!aman
rutinas,
"rocedi!ientos, o funciones. Ddems, cada !enua(e dis#one de una sinta;is o con(unto de
re!as
con !as Lue se indica de modo ineLuFvoco !as o#eraciones Lue se Luiere rea!iBar.
=os lengua#es de alto nivel son ms o menos com#rensib!es #ara e! usuario, #ero no #ara e!
#rocesador. Para Lue /ste #ueda e(ecutar!os es necesario traducir!os a su "ro"io lengua#e de
!0uina. D! #aso de! !enua(e de a!to nive! a! !enua(e de mLuina se !e denomina
compilaci'n. En
Visual Basic esta eta#a no se a#recia tanto como en otros !enua(es donde e! #roramador
tiene Lue
indicar a! ordenador e@#!Fcitamente Lue rea!ice dic1a com#i!acin. =os #roramas de
Visual Basic
se dice Lue son interpretados " no com#i!ados "a Lue e! cdio no se convierte a cdio
mLuina
sino Lue 1a" otro #rorama Lue durante !a e(ecucin Winter#retaX !as !Fneas de cdio Lue
1a escrito
e! #roramador. En enera! durante !a e(ecucin de cua!Luier #rorama, e! cdio es
carado #or e!
sistema o#erativo en !a memoria 8D&.
-.# COMENTARIOS " OTRAS UTILIDADES EN LA PROGRAMACIN CON !ISUAL 7ASIC
Visual Basic inter#reta Lue todo !o Lue est a !a derec1a de! carcter ?^A en una !Fnea
cua!Luiera de!
#rorama es un comentario " no !o tiene en cuenta #ara nada. E! comentario #uede
em#eBar a!
comienBo de !a !Fnea o a continuacin de una instruccin Lue debe ser e(ecutada, #or
e(em#!o6
Esto es un comentario
A = B*x+3.4 ' tambin esto es un comentario
=os comentarios son tremendamente >ti!es #ara #oder entender e! cdio uti!iBado,
0aci!itando
de ese modo 0uturas revisiones " correcciones. En #roramas Lue no contenan muc1as
!Fneas de
cdio #uede no #arecer demasiado im#ortante, #ero cuando se trata de #ro"ectos
rea!mente
com#!e(os, o desarro!!ados #or varias #ersonas su im#ortancia es tremenda. En e! caso de
Lue e!
cdio no est/ comentado este traba(o de actua!iBacin " revisin #uede resu!tar
com#!icadFsimo.
+tro as#ecto #rctico en !a #roramacin es !a #osibi!idad de escribir una sentencia en
mMs
de una lNnea. En e! caso de sentencias bastante !aras es conveniente cortar !a !Fnea #ara
Lue entre
en !a #anta!!a. En otro caso !a !ectura de! cdio se 1ace muc1o ms #esada. Para e!!o es
necesario
de(ar un es#acio en b!anco a! 0ina! de !a !Fnea " escribir e! carcter _F_ ta! " como se
muestra en e!
siuiente e(em#!o6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -(
str1 = "Londres" : str2 = "Pars" 'Se inicializan las variables
Frase = "Me gustara mucho viajar a " & _
str1 & " y a " & str2
'El contenido de Frase sera: "Me gustara mucho viajar a Londres y a
Pars
=a sinta@is de! 2isua! 3asic #ermite tambi/n inc!uir varias sentencias en una misma lNnea.
Para e!!o !as sentencias deben ir se#aradas #or e! carcter W6X. Por e(em#!o6
m = a : n = b : resto = m Mod n ' Tres sentencias en una lnea
-.- PRO"ECTOS " MDULOS
Cn pro1ecto rea!iBado en Visual Basic es e! con(unto de todos !os 0ic1eros o m'dulos
necesarios
#ara Lue un #rorama 0uncione. =a in0ormacin re0erente a esos 0ic1eros se a!macena en un
0ic1ero
de! ti#o Project#ame.vbp. =a e@tensin 4.vbp de! 0ic1ero 1ace re0erencia a Visual Basic
Project.
Si se edita este 0ic1ero con cua!Luier editor de te@to se com#rueba Lue !a in0ormacin Lue
a!macena es !a !oca!iBacin en !os discos de !os mdu!os Lue con0orman ese #ro"ecto, !os
contro!es
uti!iBados ?0ic1eros con e@tensin .oc%A, etc. En e! caso ms sim#!e un #ro"ecto est
0ormado #or un
>nico 0ormu!ario " constar de dos 0ic1eros6 e! Lue de0ine e! #ro"ecto ?[.vb#A " e! Lue
de0ine e!
0ormu!ario ?[.0rmA.
=os mdu!os Lue 0orman #arte de un #ro"ecto #ueden ser de dos ti#os6 aLue!!os Lue estn
asociados a un 0ormu!ario ?4.frmA " !os Lue contienen >nicamente !Fneas de cdio Basic
?4.basA.
Cn mdu!o 4.frm est constituido #or un formulario " toda !a in0ormacin re0erente a !os
controles ?" a sus #ro#iedadesA en /! contenidos, adems de todo e! cdio #roramado en
!os
eventos de esos contro!es ", en e! caso de Lue e@istan, !as funciones " procedimientos
#ro#ios de
ese 0ormu!ario. En enera! se !!ama funci'n a una #orcin de cdio inde#endiente Lue
rea!iBa una
determinada actividad. En Visual Basic e@isten dos ti#os de 0unciones6 !as !!amadas
function, Lue
se caracteriBan #or tener va!or de retorno, " !os procedimientos o "rocedures, Lue no !o
tienen. En
otros !enua(es, como C " CZZ, !as function rea!iBan !os dos #a#e!es.
Cn mdu!o de cdio 4.bas contendr una o varias 0unciones "Mo #rocedimientos, adems
de
!as variab!es Lue se desee, a !os Lue se #odr acceder desde cua!Luiera de !os mdu!os Lue
0orman e!
#ro"ecto.
-.-.1 G+.i,o de la% 0aria.le% ' lo% procedi+ien,o%
Se entiende #or Mmbito de una variab!e1 !a #arte de !a a#!icacin donde !a variab!e es
visi*le
?accesib!eA " #or !o tanto #uede ser uti!iBada en cua!Luier e@#resin.
B.B.,., Variables 1 funciones de Mmbito local
Cn mdu!o #uede contener variab!es " #rocedimientos o 0unciones pLblicos " privados.
=os
pLblicos son aLue!!os a !os Lue se #uede acceder !ibremente desde cua!Luier #unto de!
#ro"ecto.
Para de0inir una variab!e, un #rocedimiento o una 0uncin como pLblico es necesario
#receder a !a
de0inicin de !a #a!abra Public, como #or e(em#!o6
Public Variable1 As Integer
Public Sub Procedimiento1 (Parametro1 As Integer, )
Public Function Funcion1 (Parametro1 As Integer, ) As Integer
1 2er a#artado *.,
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -)
Para uti!iBar una variab!e #>b!ica o !!amar a una 0uncin desde otro mdu!o se debe
#receder
a! nombre de !a variab!e o #rocedimiento de! nombre de! mdu!o a! Lue #ertenece6
Modulo1.Variable1
Call Modulo1.Procedimiento1(Parametro1, )
Retorno = Modulo1.Funcion1(Parametro1, )
Cna variab!e !oca! #rivada, #or e! contrario, no es accesib!e desde nin>n otro mdu!o
distinto
de aLu/! en e! Lue se 1a"a dec!arado. Se #uede de0inir dentro o 0uera de un #rocedimiento o
0uncin
Cna variab!e local es reinicia!iBada ?a cero, #or de0ectoA cada veB Lue se entra en e!
"rocedi!iento. Es decir, una variab!e local no conserva su va!or entre una !!amada a!
"rocedi!iento
" !a siuiente. Para 1acer Lue esto suceda, 1a" Lue dec!arar !a variab!e como static. Visual
Basic
inicia!iBa una variab!e esttica so!amente !a #rimera veB Lue se !!ama a! "rocedi!iento.
Para
dec!arar una variab!e esttica, se uti!iBa !a #a!abra +tatic en !uar de 7im. Cn #oco ms
ade!ante se
ver Lue 7im es una #a!abra uti!iBada #ara crear variab!es.
B.B.,.F Variables 1 funciones de Mmbito &lobal
Se #uede acceder a una variab!e o 0uncin &lobal desde cua!Luier #arte de !a a#!icacin.
Para 1acer
Lue una variab!e sea &lobal, 1a" Lue dec!arar!a en un mdu!o 4.bas de !a a#!icacin. Para
dec!arar
una variab!e &lobal se uti!iBa !a #a!abra Alobal en !uar de 7im. Por e(em#!o6
Global var1_global As Double, var2_global As String
De esta 0orma se #odr acceder a !as variab!es var,/&lobal, varF/&lobal desde todos !os
0ormu!arios. =a tab!a *.1 muestra !a accesibi!idad de !as variab!e en 0uncin de dnde "
cmo se
1a"an dec!arado.
Tipo de 0aria.le L);ar de declaracin Acce%i.ilidad
9!oba! o Pub!ic Dec!araciones de [.bas Desde todos !os 0ormu!arios
Dim o Private Dec!araciones de [.bas Desde todas !as 0unciones de ese
mdu!o
Pub!ic Dec!araciones de [.0rm Desde cua!Luier #rocedimiento
de! #ro#io 0ormu!ario " desde
otros #recedida de! nombre de!
modu!o en e! Lue se 1a dec!arado
Dim o Private Dec!araciones de [.0rm Desde cua!Luier #rocedimiento
de! #ro#io 0ormu!ario
Dim Cua!Luier #rocedimiento de
un mdu!o
Desde e! #ro#io #rocedimiento
7ab!a *.1. Dccesibi!idad de !as variab!es.
-./ !ARIA7LES
-./.1 Iden,i5icadore%
=a memoria de un com#utador consta de un con(unto enorme de bits ?1 " 4A, en !a Lue se
a!macenan
datos " "rogra!as. =as necesidades de memoria de cada ti#o de dato no son 1omo/neas
?#or
e(em#!o, un carcter a!0anum/rico ocu#a un b1te ?9 *itsA, mientras Lue un n>mero rea! con
1. ci0ras
ocu#a H *3tesA, " tam#oco !o son !as de !os #roramas. Ddems, e! uso de !a memoria
cambia a !o
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina --
!aro de! tiem#o dentro inc!uso de una misma sesin de traba(o, "a Lue e! sistema reserva o
li*era
memoria a medida Lue !a va necesitando.
Cada #osicin de memoria en !a Lue un dato est a!macenado ?ocu#ando un con(unto de
bitsA
#uede identi0icarse mediante un n>mero o una direcci'n, " /ste es e! modo ms bsico de
re0erirse a
una determinada in0ormacin. No es, sin embaro, un sistema cmodo o #rctico, #or !a
nu!a
re!acin nemot/cnica Lue una direccin de memoria sue!e tener con e! dato contenido, "
#orLue Q
como se 1a dic1o antesQ !a direccin 0Fsica de un dato cambia de e(ecucin a e(ecucin, o
inc!uso en
e! transcurso de una misma e(ecucin de! #rorama. =o mismo ocurre con #artes concretas
de un
#rorama determinado.
Dadas !as citadas di0icu!tades #ara re0erirse a un dato #or medio de su direccin en
memoria,
se 1a 1ec1o 1abitua! e! uso de identificadores. =n identificador es un no!*re si!*lico
0ue se
refiere a un dato o "rogra!a deter!inado. Es mu" 0ci! e!eir identi0icadores cu"o nombre
uarde
estrec1a re!acin con e! sentido 0Fsico, matemtico o rea! de! dato Lue re#resentan. DsF #or
e(em#!o,
es !ico uti!iBar un identi0icador !!amado %alarioF.r),o o %alario7r),o #ara re#resentar e!
coste
anua! de un em#!eado. E! usuario no tiene nunca Lue #reocu#arse de direcciones 0Fsicas de
memoria6 e! sistema se #reocu#a #or /! #or medio de una ta*la, en !a Lue se re!aciona cada
identificador con e! ti"o de dato Lue re#resenta " !a "osicin de !e!oria en !a Lue est
a!macenado.
Visual Basic, como todos !os dems !enua(es de #roramacin, tiene sus #ro#ias re!as
#ara
e!eir !os identificadores. =os usuarios #ueden e!eir con ran !ibertad !os nombres de sus
variab!es
" 0unciones, teniendo siem#re cuidado de res#etar !as re!as de! !enua(e " de no uti!iBar un
con(unto de palabras reservadas ?0e1"ordsA, Lue son uti!iBadas #or e! #ro#io !enua(e. En
e!
a#artado *.,.* se e@#!icarn !as re!as #ara e!eir nombres " cu!es son !as #a!abras
reservadas de!
!enua(e Visual Basic.
-./.# !aria.le% ' con%,an,e%
Cna variable es un nombre Lue desina a una Bona de memoria ?se trata #or tanto de un
identificadorA, Lue contiene un va!or de un ti#o de in0ormacin.
7a! " como su nombre indica, !as variab!es #ueden cambiar su va!or a !o !aro de !a
e(ecucin
de un #rorama. Com#!etando a !as variab!es e@iste !o Lue se denomina constantes !as
cua!es son
identi0icadores #ero con !a #articu!aridad de Lue e! va!or Lue se encuentra en ese !uar de !a
memoria s!o #uede ser asinado una >nica veB. E! tratamiento " ti#os de datos es iua! a!
de !as
variab!es.
Para dec!arar un dato como constante >nicamente es necesario uti!iBar !a #a!abra Const en
!a
dec!aracin de !a variab!e. Si durante !a e(ecucin se intenta variar su va!or se #roducir un
error.
E(em#!os6
Const MyVar = 459 Las constantes son privadas por defecto.
Public Const MyString = "HELP" ' Declaracin de una constante pblica.
Private Const MyInt As Integer = 5 ' Declaracin de un entero constante.
Const Str = "Hi", PI As Double = 3.14 ' Mltiples constantes en una
lnea.
-./.- No+.re% de 0aria.le%
E! nombre de una variab!e tiene Lue comenBar siem#re #or una !etra " #uede tener 1asta
2-.
caracteres de !onitud. No se admiten es#acios o caracteres en b!anco.
=os caracteres #ueden ser !etras, dFitos, e! carcter de subra"ado ?SA " !os caracteres de
dec!aracin de! ti#o de !a variab!e ?`, ], a, b, " c A. E! nombre de una variab!e no #uede
ser una
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -.
palabra reservada de! !enua(e ?5or =f 8oop #e%t Val -ide Caption And ...A. Para
saber
cu!es son !as #a!abras reservadas en Visual Basic #uede uti!iBarse e! -elp de dic1o
#rorama,
buscando !a re0erencia :eserved !ords.
D di0erencia de C, atlab, aple " otros !enua(es de #roramacin, Visual Basic no
distin&ue entre minLsculas 1 ma1Lsculas. Por tanto, !as variab!es 8on&itud.otal "
lon&itudtotal
son consideradas como id/nticas ?!a misma variab!eA. En Visual Basic es 1abitua! uti!iBar
!as !etras
ma">scu!as #ara se#arar !as distintas #a!abras Lue estn unidas en e! nombre de una
variab!e, como
se 1a 1ec1o anteriormente en !a variab!e 8on&itud.otal.
7ambi/n es 1abitua! entre !os #roramadores, aunLue no ob!iado, e! uti!iBar nombres con
todo ma">scu!as #ara !os nombres de !as constantes simb!icas.
-././ Tipo% de da,o%
D! iua! Lue C " otros !enua(es de #roramacin, Visual Basic dis#one de distintos ti#os
de datos,
a#!icab!es tanto #ara constantes como #ara variab!es. =a 7ab!a *.2 muestra !os ti#os de
datos
dis#onib!es en Visual Basic.
Tipo De%cripcin CarHc,er de
declaracin
Ran;o
7oolean 3inario 7rue o )a!se
7',e Entero corto 4 a 2--
In,e;er Entero ?2 b"tesA ` N*27.H a *27.7
Lon; Entero !aro ?, b"tesA ] N21,7,H*.,H a 21,7,H*.,7
Sin;le 8ea! sim#!e #recisin ?, b"tes A a N*.,4EZ*H a *.,4EZ*H
Do).le 8ea! dob!e #recisin ? H b"tesA O N1.79DZ*4H a 1.79DZ*4H
C)rrenc' N>mero con #unto decima! 0i(o ?H b"tesA b N9.22EZ1, a 9.22EZ1,
S,rin; Cadena de caracteres ?, b"tes Z 1
b"teMcar 1asta ., JA
c 4 a .--44 caracteres.
Da,e )ec1a 1 de enero de 144 a *1 de diciembre de
9999. Indica tambi/n !a 1ora, desde 4644644
a 2*6-96-9.
!arian, )ec1aM1oraV
n>meros enteros, rea!es, o caracteres
?1. b"tes Z 1 b"teMcar. en cadenas de
caracteresA
ninuno )M16 como Date
n>meros6 mismo rano Lue e! ti#o de va!or
a!macenado
U%erIde5ined Cua!Luier ti#o de dato o estructura de
datos. Se crean uti!iBando !a sentencia
7"#e ?2er a#artado *.14A
ninuno
7ab!a *.26 7i#os de datos en !i%)al 7a%ic.
En e! !enua(e Visual Basic e@isten dos 0ormas de aru#ar varios va!ores ba(o un mismo
nombre. =a #rimera de e!!as son !os arra1s ?vectores " matricesA, Lue aru#an datos de ti#o
1omo/neo. =a seunda son !as estructuras, Lue aru#an in0ormacin 1etero/nea o de
distinto
ti#o. En Visual Basic !as estructuras son verdaderos ti"os de datos defini*les "or el
usuario.
Para dec!arar !as variab!es se uti!iBa !a sentencia siuiente6
Dim NombreVariable As TipoVariable
cu"o em#!eo se muestra en !os e(em#!os siuientes6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -&
Dim Radio As Double, Superficie as Single
Dim Nombre As String
Dim Etiqueta As String * 10
Dim Francos As Currency
Dim Longitud As Long, X As Currency
En Visual Basic no es estrictamente necesario dec!arar todas !as variab!es Lue se van a
uti!iBar
?a no ser Lue se e!i(a !a o#cin 9ption $%plicit Lue 1ace ob!iatorio e! dec!arar!asA, " 1a"
otra 0orma
de dec!arar !as variab!es anteriores, uti!iBando !os caracteres es#ecia!es vistos
anteriormente. DsF #or
e(em#!o, e! ti#o de !as variab!es de! e(em#!o anterior se #uede dec!arar a! uti!iBar!as en !as
distintas
e@#resiones, #oni/ndo!es a continuacin e! carcter Lue "a se indic en !a 7ab!a *.2, en !a
0orma6
Radio# doble precisin
Nombre$ cadena de caracteres
Francos@ unidades monetarias
Longitud& entero largo
Esta 0orma de indicar e! ti#o de dato no es !a ms conveniente. Se mantiene en !as sucesivas
versiones de Visual Basic #or !a com#atibi!idad con cdios anteriores. Es #re0erib!e
uti!iBar !a
notacin donde se escribe directamente e! ti#o de dato.
-./.1 Eleccin del ,ipo de )na 0aria.le
Si en e! cdio de! #rorama se uti!iBa una variab!e Lue no 1a sido dec!arada, se considera
Lue esta
variab!e es de ti#o Variant. =as variab!es de este ti#o se ada#tan a! ti#o de in0ormacin o
dato Lue
se !es asina en cada momento. Por e(em#!o, una variab!e ti#o Variant #uede contener a!
#rinci#io
de! #rorama un string de caracteres, des#u/s una variab!e de do*le "recisin, " 0ina!mente
un
n>mero entero. Son #ues variab!es mu" 0!e@ib!es, #ero su uso debe restrinirse #orLue
ocu#an mMs
memoria ?a!macenan e! ti#o de dato Lue contienen, adems de! #ro#io va!or de dic1o datoA
"
reLuieren mMs tiempo de CPO Lue !os restantes ti#os de variab!es.
En enera! es e! ti#o de dato ?!os va!ores Lue #uede tener en !a rea!idadA !o Lue determina
Lu/
ti#o de variab!e se debe uti!iBar. D continuacin se muestran a!unos e(em#!os6
=nte&er #ara numerar !as 0i!as " co!umnas de una matriB no mu" rande
8on& #ara numerar !os 1abitantes de una ciudad o !os n>meros de te!/0onos
Boolean #ara una variab!e con s!o dos #osib!es va!ores ?sF o noA
+in&le #ara variab!es 0Fsicas con decima!es Lue no e@i(an #recisin
7ouble #ara variab!es 0Fsicas con decima!es Lue e@i(an #recisin
Currenc1 #ara cantidades randes de dinero
Es mu" im#ortante tener en cuenta <ue se debe utili>ar el tipo de dato mMs sencillo <ue
represente correctamente el dato real "a Lue en otro caso se ocu#ar ms memoria " !a
e(ecucin
de !os #roramas o 0unciones ser ms !enta.
-./.2 Declaracin eBplJci,a de 0aria.le%
Cna variab!e Lue se uti!iBa sin 1aber sido dec!arada toma #or de0ecto e! ti#o Variant. Puede
ocurrir
Lue durante !a #roramacin, se cometa un error " se escriba ma! e! nombre de una
variab!e. Por
e(em#!o, se #uede tener una variab!e _ dec!arada como entera, " a! #roramar re0erirse a
e!!a #or
error como _V Visual Basic su#ondrFa Lue /sta es una nueva variab!e de ti#o Variant.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -5
Para evitar este ti#o de errores, se #uede indicar a Visual Basic Lue enere un mensa(e de
error siem#re Lue encuentre una variab!e no dec!arada #reviamente. Para e!!o !o ms
#rctico es
estab!ecer una o#cin #or de0ecto, uti!iBando e! comando $nvironment de! men>
.ools69ptionsV en
e! cuadro Lue se abre se debe #oner Pes en !a o#cin :e<uire Variable 7eclaration.
7ambi/n se
#uede 1acer esto escribiendo !a sentencia siuiente en !a seccin de dec!araciones de cada
0ormu!ario " de cada mdu!o6
Option Explicit
-.1 OPERADORES
=a 7ab!a *.* #resenta e! con(unto de o#eradores Lue so#orta Visual Basic.
Tipo Operacin Operador en !.a%ic
Dritm/tico E@#onenciacin d
Cambio de sino ?o#erador unarioA N
&u!ti#!icacin, divisin [, M
Divisin entera e
8esto de una divisin entera Mod
Suma " resta Z, N
Concatenacin Concatenar o en!aBar ]
8e!aciona! Iua! a Y
Distinto KL
&enor Lue M menor o iua! Lue K KM
&a"or Lue M ma"or o iua! Lue L LM
+tros Com#arar dos e@#resiones de caracteres LiNe
Com#arar dos re0erencias a ob(etos I%
=ico Neacin No,
Dnd And
+r inc!usivo Or
+r e@c!usivo Oor
ELuiva!encia ?o#uesto a GorA EP0
Im#!icacin ?False si e! #rimer o#erando es >rue
" e! seundo o#erando es FalseA
I+p
7ab!a *.*6 +#eradores de Visual Basic.
Cuando en una e@#resin aritmtica intervienen o#erandos de di0erentes ti#os, e! resu!tado
se
e@#resa, enera!mente, en !a misma #recisin Lue !a de! o#erando Lue !a tiene ms a!ta. E!
orden, de
menor a ma"or, se>n !a #recisin es =nte&er, 8on&, +in&le, 7ouble " Currenc1.
=os o#eradores relacionales, tambi/n conocidos como o#eradores de co!"aracin,
com#aran
dos e@#resiones dando un resu!tado .rue ?verdadero@, 5alse ?falso@ o #ull ?no vMlido@.
E! o#erador Q rea!iBa !a concatenacin de dos o#erandos. Para e! caso #articu!ar de Lue
ambos o#erandos sean cadenas de caracteres, #uede uti!iBarse tambi/n e! o#erador R. No
obstante,
#ara evitar ambifedades ?sobre todo con variab!es de ti#o VariantA es me(or uti!iBar Q.
E! o#erador 8i0e sirve #ara com#arar dos cadenas de caracteres. =a sinta@is #ara este
o#erador
es !a siuiente6
Respuesta = Cadena1 Like Cadena2
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -6
donde !a variab!e :espuesta ser .rue si !a Cadena, coincide con !a CadenaF, 5alse si no
coinciden " #ull si Cadena, "Mo CadenaF son #ull.
Para obtener ms in0ormacin se #uede consu!tar e! -elp de Visual Basic.
-.2 SENTENCIAS DE CONTROL
=as sentencias de control, denominadas tambi/n estructuras de control1 #ermiten tomar
decisiones
" rea!iBar un #roceso re#etidas veces. Son !os denominados bi0urcaciones " buc!es. Este
ti#o de
estructuras son comunes en cuanto a conce#to en !a ma"orFa de !os !enua(es de
#roramacin,
aunLue su sinta@is #uede variar de un !enua(e de #roramacin a otro. Se trata de unas
estructuras
mu" im#ortantes "a Lue son !as encaradas de contro!ar e! flu#o de un #rorama se>n !os
reLuerimientos de! mismo. Visual Basic dis#one de !as siuientes estructuras de contro!6
=f ... .hen ... $lse
+elect Case
5or ... #e%t
7o ... 8oop
!hile D !end
-.2.1 Sen,encia I* ... T9EN ... ELSE ...
Esta estructura #ermite e(ecutar condiciona!mente una o ms sentencias " #uede escribirse
de dos
0ormas. =a #rimera ocu#a s!o una !Fnea " tiene !a 0orma siuiente6
I5 condicion T6en sentencia1 gEl%e sentencia2h
=a seunda es ms enera! " se muestra a continuacin6
If condicion Then
sentencia(s)
[Else
sentencia(s)]
End If
Si condicion es .rue ?verdadera@, se e(ecutan !as sentencias Lue estn a continuacin de
.hen, " si condicion es 5alse ?falsa@, se e(ecutan !as sentencias Lue estn a continuacin
de $lse, si
esta c!usu!a 1a sido es#eci0icada ?#ues es o#ciona!A. Para indicar Lue se Luiere e(ecutar
uno de
varios b!oLues de sentencias de#endientes cada uno de e!!os de una condicin, !a estructura
adecuada es !a siuiente6
If condicion1 Then
...sentencias1
ElseIf condicion2 Then
...sentencias2
Else
...sentencia-n
End If
Si se cum#!e !a condicion, se e(ecutan !as sentencias,, " si no se cum#!e, se e@aminan
secuencia!mente !as condiciones siuientes 1asta $lse, e(ecutndose !as sentencias
corres#ondientes
a! #rimer $lse=f cu"a condicin se cum#!a. Si todas !as condiciones son 0a!sas, se e(ecutan
!as
sentenciasNn corres#ondientes a $lse, Lue es !a o#cin #or de0ecto. =a siuiente 0iura
#resenta
esLuemticamente ambas 0ormas de re#resentar estas sentencias6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -7
condicin
7loP)e 1 de
%en,encia%
7loP)e # de
%en,encia%
Tr)e
*al%e
condicin 1
7loP)e 1
Tr)e
condicin #
7loP)e -
7loP)e #
*al%e
*al%e
Tr)e
)iura *.1 63i0urcaciones I0 e I0...E!se
Por e(em#!o,
Numero = 53 Se inicializa la variable.
If Numero < 10 Then
Digitos = 1
ElseIf Numero < 100 Then
' En este caso la condicin se cumple (True) luego se ejecuta lo
siguiente.
Digitos = 2
Else 'En el caso en que no se cumplan los dos anteriores se asigna 3
Digitos = 3
End If
-.2.# Sen,encia SELECT CASE
Esta sentencia #ermite e(ecutar una de entre varias acciones en 0uncin de! va!or de una
e@#resin.
Es una a!ternativa a =f ... .hen ... $lse=f cuando se com#ara !a misma e@#resin con
di0erentes
va!ores. Su 0orma enera! es !a siuiente6
Select Case expresion
Case etiq1
[sentencias1]
Case etiq2
[sentencias2]
Case Else
sentenciasn
End Select
donde e%presion es una e@#resin num/rica o a!0anum/rica, " eti<,, eti<F, ... #ueden
ado#tar !as
0ormas siuientes6
1. e;"resion
2. e;"resion To e;"resion
.' I% o"erador?de?relacin e;"resion
,. co!*inacin de las anteriores se"aradas "or co!as
Por e(em#!o,
Numero = 8 Se inicializan las variable.
Select Case Numero Se va a evaluar la variable Numero.
Case 1 To 5 Numero est entre 1 y 5.
Resultado = "Se encuentra entre 1 y 5"
' Lo siguiente se ejecuta si es True la expresin.
Case 6, 7, 8 ' Numero es uno de los tres valores.
Resultado = "Se encuentra entre 6 y 8"
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -9
Case Is = 9 , Is = 10 ' Numero es 9 10.
Resultado = "El valor es 9 o 10"
Case Else ' Resto de valores.
Resultado = "El nmero no se encuentra entre 1 y 10"
End Select
Cuando se uti!iBa !a 0orma e;"resion .o e;"resion, e! va!or ms #eLue'o debe a#arecer en
#rimer !uar.
Cuando se e(ecuta una sentencia +elect Case, Visual Basic eva!>a !a e%presion " e! contro!
de! #rorama se trans0iere a !a sentencia cu"a etiLueta tena e! mismo va!or Lue !a
e@#resin
eva!uada, e(ecutando a continuacin e! corres#ondiente b!oLue de sentencias. Si no e@iste
un va!or
iua! a !a e%presion entonces se e(ecutan !as sentencias a continuacin de Case $lse.
-.2.- *OR ... NEOT
=a sentencia 5or da !uar a un !aBo o buc!e, " #ermite e(ecutar un con(unto de sentencias
cierto
n>mero de veces. Su 0orma enera! es6
For variable = expresion1 To expresion2 [Step expresion3]
[sentencias]
Exit For
[sentencias]
Next [variable]
Cuando se e(ecuta una sentencia 5or, #rimero se asina e! va!or de !a e%presion, a !a
variab!e
" se com#rueba si su va!or es ma"or o menor Lue !a e%presionF' En caso de ser menor se
e(ecutan
!as sentencias, " en caso de ser ma"or e! contro! de! #rorama sa!ta a !as !Fneas a
continuacin de
#e%t. 7odo esto sucede en caso de ser !a e%presionB #ositiva. En caso contrario se
e(ecutarn !as
sentencias cuando !a variab!e sea ma"or Lue e%presionF' Cna veB e(ecutadas !as sentencias,
!a
variab!e se incrementa en e! va!or de !a e%presionB, o en 1 si +tep no se es#eci0ica,
vo!vi/ndose a
e0ectuar !a com#aracin entre !a variab!e " !a e%presionF, " asF sucesivamente.
=a sentencia $%it 5or es o#ciona! " #ermite sa!ir de un buc!e 5or ... #e%t antes de Lue /ste
0ina!ice. Por e(em#!o,
MyString="Informtica "
For Words = 3 To 1 Step -1 ' 3 veces decrementando de 1 en 1.
For Chars = Words To Words+4 '5 veces.
MyString = MyString & Chars ' Se aade el nmero Chars al string.
Next Chars ' Se incrementa el contador
MyString = MyString & " " ' Se aade un espacio.
Next Words
'El valor de MyString es: Informtica 34567 23456 12345
-.2./ Sen,encia DO ... LOOP
Cn 8oop ?bucle@ re#ite !a e(ecucin de un con(unto de sentencias mientras una condicin
dada sea
cierta, o 1asta Lue una condicin dada sea cierta. =a condicin #uede ser veri0icada antes o
des#u/s
de e(ecutarse e! con(unto de sentencias. Sus #osib!es 0ormas son !as siuientes6
Formato 1:
Do [{While/Until} condicion]
[sentencias]
[Exit Do]
[sentencias]
Loop
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina -:
Formato 2:
Do
[sentencias]
[Exit Do]
[sentencias]
Loop [{While/Until}condicion]
=a sentencia o#ciona! $%it 7o #ermite sa!ir de una buc!e 7o ... 8oop antes de Lue 0ina!ice
/ste. Por e(em#!o,
Check = True Se inicializan las variables.
Counts = 0
Do ' Empieza sin comprobar ninguna condicin.
Do While Counts < 20 'Otro bucle que acaba si Counts>=20 o con Exit Do.
Counts = Counts + 1 ' Se incrementa Counts.
If Counts = 10 Then ' Si Counts es 10.
Check = False ' Se asigna a Check el valor False.
Exit Do ' Se acaba el segundo Do.
End If
Loop
Loop Until Check = False ' Salir del "loop" si Check es False.
En e! e(em#!o mostrado, se sa!e de !os buc!es siem#re con Counts Q ,0. Es necesario 0i(arse
Lue si se inicia!iBa Counts con un n>mero ma"or o iua! a 14 se entrarFa en un buc!e
in0inito ?e!
#rimer buc!e acabarFa con Counts Q F0 #ero e! seundo no 0ina!iBarFa nunca, b!oLuendose
e!
#rorama " a veces e! ordenadorA.
-.2.1 Sen,encia $9ILE S $END
Esta sentencia es otra 0orma de enerar buc!es Lue se recorren mientras se cum#!a !a
condicin
inicia!. Su estructura es !a siuiente6
While condicion
[sentencias]
Wend
Por e(em#!o,
Counts = 0 Se inicializa la variable.
While Counts < 20 Se comprueba el valor de Counts.
Counts = Counts + 1 Se incrementa el valor de Counts.
Wend Se acaba el bucle cuando Counts > 19.
En cua!Luier caso se recuerda Lue !a me(or 0orma de mirar " a#render e! 0uncionamiento de
todas estas sentencias es mediante e! uso de! -elp de Visual Basic. +0rece una e@#!icacin
de cada
comando con e(em#!os de uti!iBacin.
-.4 ALGORITMOS
-.4.1 In,rod)ccin
Cn al&oritmo es en un sentido am#!io una Wsecuencia de "asos o eta"as 0ue conducen a la
realizacin de una tareaX. =os #rimeros a!oritmos nacieron #ara reso!ver #rob!emas
matemticos.
Dntes de escribir un #rorama de ordenador, 1a" Lue tener mu" c!aro e! a!oritmo, es decir,
cmo se
va a reso!ver e! #rob!ema considerado. Es im#ortante desarro!!ar buenos a!oritmos
?correctos "
e0icientesA. Cna veB Lue e! a!oritmo est desarro!!ado, e! #rob!ema se #uede reso!ver
inc!uso sin
entender!o.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .(
E(em#!o6 D!oritmo de Euc!ides #ara ca!cu!ar e! m.c.d. de dos n>meros enteros D " 3
1. Dsinar a & e! va!or de D, " a N e! va!or de 3.
2. Dividir & #or N, " !!amar 8 a! resto.
*. Si 8 distinto de 4, asinar a & e! va!or de N, asinar a N e! va!or de 8,vo!ver a comenBar
!a eta#a 2.
,. Si 8 Y 4, N es e! m.c.d. de !os n>meros oriina!es
Es mu" 0ci! #asar a Visual Basic este a!oritmo6
Dim a, b As Integer
a = 45: b = 63 Estos son los valores M y N
If a < b Then Se permutan a y b
temp = a : a = b : b = temp
End If
m = a : n = b : resto = m Mod n Mod devuelve el valor del resto
While resto <> 0 Mientras el resto sea distinto de 0
m = n: n = resto:
resto = m Mod n
Wend
' La solucin es la variable n. En este caso el resultado es 9
Si son necesarios, deben e@istir criterios de terminacin c!aros ?#or e(em#!o, #ara ca!cu!ar
seno?@A #or desarro!!o en serie se deber indicar e! n>mero de t/rminos de !a serieA. No
#uede 1aber
eta#as im#osib!es ?#or e(em#!o6 _im#rimir e! con(unto de todos !os n>meros enteros_A.
-.4.# Repre%en,acin de al;ori,+o%
E@isten diversas 0ormas de re#resentar a!oritmos. D continuacin se #resentan a!unas de
e!!as6
7etallada6 Se trata de escribir e! a!oritmo en un determinado !enua(e de #roramacin
?!enua(e de mLuina, ensamb!ador, 0ortran, basic, #asca!, C, &at!ab, 2isua! 3asic, ...A.
+imb'lica6 =as eta#as son descritas con !enua(e #r@imo a! natura!, con e! rado de
deta!!e
adecuado a !a eta#a de desarro!!o de! #rorama.
ArMfica6 #or medio de diaramas de 0!u(o.
=a sinta@is ?e! modo de escribirA debe re#resentar correctamente !a semntica ?e!
contenidoA.
=a sinta@is debe ser c!ara, senci!!a " accesib!e.
En cua!Luier caso e inde#endientemente de! ti#o de re#resentacin uti!iBada !o im#ortante
es
tener mu" c!aro e! a!oritmo a rea!iBar " #oner!o #or escrito en 0orma de esLuema antes de
#onerse a
#roramar!o. &erece !a #ena #asar unos minutos rea!iBando un esLuema sobre #a#e! antes
de
#onerse a tec!ear e! cdio sobre un tec!ado de ordenador.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .)
-.T *UNCIONES " PROCEDIMIENTOS
-.T.1 Concep,o% ;enerale% %o.re 5)ncione%
=as a#!icaciones in0ormticas Lue 1abitua!mente se uti!iBan, inc!uso a nive! de in0ormtica
#ersona!,
sue!en contener decenas " a>n cientos de mi!es de !Fneas de cdio 0uente. D medida Lue
!os
#roramas se van desarro!!ando " aumentan de tama'o, se convertirFan r#idamente en
sistemas
#oco mane(ab!es si no 0uera #or !a !odularizacin, Lue es e! #roceso consistente en dividir
un
#rorama mu" rande en una serie de mdu!os muc1o ms #eLue'os " mane(ab!es. D estos
mdu!os
se !es sue!e denominar de distintas 0ormas ?su*"rogra!as, su*rutinas, "rocedi!ientos,
funciones,
etc.A se>n !os distintos !enua(es. Sea cua! sea !a nomenc!atura, !a idea es sin embaro
siem#re !a
misma6 dividir un #rorama rande en un con(unto de sub#roramas o 0unciones ms
#eLue'as Lue
son !!amadas #or e! #rorama #rinci#a!V /stas a su veB !!aman a otras 0unciones ms
es#ecF0icas " asF
sucesivamente.
=a divisin de un #rorama en unidades ms #eLue'as o 0unciones #resenta Qentre otrasQ
!as
venta(as siuientes6
1. odulari>aci'n. Cada 0uncin tiene una misin mu" concreta, de modo Lue nunca tiene
un
n>mero de !Fneas e@cesivo " siem#re se mantiene dentro de un tama'o mane(ab!e. Ddems,
una misma 0uncin ?#or e(em#!o, un #roducto de matrices, una reso!ucin de un sistema de
ecuaciones !inea!es, ...A #uede ser !!amada muc1as veces en un mismo #rorama, e inc!uso
#uede ser reuti!iBada #or otros #roramas. Cada 0uncin #uede ser desarro!!ada "
com#robada
#or se#arado.
2. Ahorro de memoria 1 tiempo de desarrollo. En !a medida en Lue una misma 0uncin es
uti!iBada muc1as veces, e! n>mero tota! de !Fneas de cdio de! #rorama disminu"e, "
tambi/n !o 1ace !a #robabi!idad de introducir errores en e! #rorama.
*. =ndependencia de datos 1 ocultamiento de informaci'n. Cna de !as 0uentes ms
comunes de
errores en !os #roramas de com#utador son !os efectos colaterales o #erturbaciones Lue se
#ueden #roducir entre distintas #artes de! #rorama. Es mu" 0recuente Lue a! 1acer una
modi0icacin #ara a'adir una 0unciona!idad o correir un error, se introduBcan nuevos
errores
en #artes de! #rorama Lue antes 0uncionaban correctamente. Cna 0uncin es ca#aB de
mantener una ran inde#endencia con e! resto de! #rorama, manteniendo sus #ro#ios datos
"
de0iniendo mu" c!aramente !a interfaz o comunicacin con !a 0uncin Lue !a 1a !!amado "
con
!as 0unciones a !as Lue !!ama, " no teniendo ninuna #osibi!idad de acceso a !a in0ormacin
Lue no !e com#ete.
-.T.# *)ncione% ' procedi+ien,o% en !i%)al 7a%ic
En Visual Basic se distinue entre funciones " procedimientos. =a 0undamenta! di0erencia
entre un
procedimiento " una funci'n es Lue /sta >!tima #uede ser uti!iBada en una e@#resin
#orLue tiene
un valor de retorno. E! va!or de retorno ocu#a e! !uar de !a !!amada a !a 0uncin donde
esta
a#arece. Por e(em#!o, si en una e@#resin a#arece sin?%@ se ca!cu!a e! seno de !a variab!e %
" e!
resu!tado es e! va!or de retorno, Lue sustitu"e a sin?%@ en !a e@#resin en !a Lue a#arecFa.
Por tanto,
!as 0unciones devue!ven va!ores, a di0erencia de !os #rocedimientos Lue no devue!ven
nin>n va!or,
" #or tanto no #ueden ser uti!iBadas en e@#resiones. Cn procedimiento es un semento de
cdio
inde#endiente de! resto, Lue una veB !!amado #or e! #rorama, e(ecuta un n>mero
determinado de
instrucciones, sin necesidad de devo!ver nin>n va!or a! mismo ?#uede dar resu!tados
modi0icando
!os arumentosA, mientras Lue una 0uncin siem#re tendr un va!or de retorno.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .-
-.T.- *)ncione% A5)nc,ionC
=a sinta@is corres#ondiente a una 0uncin es !a siuiente6
[Static] [Private] Function nombre ([parmetros]) [As tipo]
[sentencias]
[nombre = expresion]
[Exit Function]
[sentencias]
[nombre = expresion]
End Function
donde nombre es e! nombre de !a 0uncin. Ser de un ti#o u otro de#endiendo de! dato Lue
devue!va. Para es#eci0icar e! ti#o se uti!iBa !a c!usu!a As .ipo ?=nte&er, 8on&, +in&le,
7ouble,
Currenc1, +trin& o VariantA. parMmetros son !os arumentos Lue son #asados cuando se
!!ama a !a
0uncin. Visual Basic asina e! va!or de cada arumento en !a !!amada a! #armetro Lue
ocu#a su
misma #osicin. Como se ver en un a#artado #osterior, !os arumentos #ueden ser #asados
por
referencia o por valor.
E! nombre de !a 0uncin, Lue es e! va!or de retorno, act>a como una variab!e dentro de!
cuer#o
de !a 0uncin. E! va!or de !a variab!e e%presion es a!macenado en e! #ro#io nombre de !a
0uncin. Si
no se e0ect>a esta asinacin, e! resu!tado devue!to ser 4 si !a 0uncin es num/rica, nu!o
?__A si !a
0uncin es de caracteres, o vacFo si !a 0uncin es Variant.
$%it 5unction #ermite sa!ir de una 0uncin antes de Lue /sta 0ina!ice " devo!ver asF e!
contro!
de! #rorama a !a sentencia inmediatamente a continuacin de !a Lue e0ectu !a !!amada a !a
0uncin.
=a sentencia $nd 5unction, a! iua! Lue !a $%it 5unction, devue!ve e! contro! de!
#rorama a
!a sentencia siuiente a !a Lue e0ectu !a !!amada, #ero !icamente una veB 0ina!iBada !a
0uncin.
=a !!amada a una 0uncin se 1ace de diversas 0ormas. Por e(em#!o, una de !as ms usua!es
es
!a siuiente6
variable = nombre([argumentos])
donde argu!entos son un !ista de constantes, variab!es o e@#resiones se#aradas #or comas
Lue son
#asadas a !a 0uncin. E! n>mero de arumentos debe ser iua! a! n>mero de #armetros de
!a
0uncin. =os tipos de !os arumentos deben coincidir con !os ti#os de sus corres#ondientes
#armetros, de !os contrario #uede 1aber 0a!!os im#ortantes en !a e(ecucin de! #rorama.
En cada !!amada a una 0uncin 1a" Lue inc!uir !os #ar/ntesis, aunLue /sta no tena
arumentos.
E! siuiente e(em#!o corres#onde a una 0uncin Lue devue!ve como resu!tado !a raFB
cuadrada
de un n>mero #6
Function Raiz (N As Double) As Double
If N < 0 Then
Exit Function
Else
Raiz = Sqr(N)
End Function
=a !!amada a esta 0uncin se 1ace de !a 0orma siuiente6
Cuadrada = Raiz(Num)
D di0erencia de C " CZZ en Visual Basic no es necesario devo!ver e@#!Fcitamente e! va!or
de
retorno, #ues e! nombre de !a 0uncin "a contiene e! va!or Lue se desea devo!ver. 7am#oco
es
necesario dec!arar !as 0unciones antes de !!amar!as.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina ..
-.T./ Procedi+ien,o% AS).C
=a sinta@is Lue de0ine un "rocedi!iento es !a siuiente6
[Static] [Private] Sub nombre [(parmetros)]
[sentencias]
[Exit Sub]
[sentencias]
End Sub
=a e@#!icacin es an!oa a !a dada #ara 0unciones.
=a !!amada a un "rocedi!iento #uede ser de a!una de !as dos 0ormas siuientes6
Call nombre[(argumentos)]
o bien, sin #asar !os arumentos entre #ar/ntesis, sino #oni/ndo!os a continuacin de!
nombre
sim#!emente se#arados #or comas6
nombre [argumentos]
D di0erencia de una funcin, un "rocedi!iento no #uede ser uti!iBado en una e@#resin #ues
no devue!ve nin>n va!or.
E! siuiente e(em#!o corres#onde a un "rocedi!iento ?+ubA Lue devue!ve una variab!e *
Lue
es !a raFB cuadrada de un n>mero N.
Sub Raiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandara un mensaje de error
Else
F = Sqr(N)
End If
End Sub
=a !!amada a este "rocedi!iento #uede ser de cua!Luiera de !as dos 0ormas siuientes6
Raiz N, F
Call Raiz(N, F)
En e! e(em#!o anterior, e! resu!tado obtenido a! e@traer !a raFB cuadrada a! n>mero N se
devue!ve en !a variab!e ) #asada como arumento, debido a Lue como se 1a mencionado
anteriormente, un "rocedi!iento no #uede ser uti!iBado en una e@#resin.
-.T.1 Ar;)+en,o% por re5erencia ' por 0alor
En !as funciones ?5unctionA " en !os "rocedi!ientos ?+ubA de Visual Basic, #or de0ecto !os
arumentos se #asan #or referencia-V de este modo, cua!Luier cambio de va!or Lue su0ra un
#armetro dentro de !a 0uncin o de! #rocedimiento tambi/n se #roduce en e! arumento
corres#ondiente de !a !!amada a !a 0uncin o a! #rocedimiento.
Cuando se !!ama a una 0uncin o a un #rocedimiento, se #odr es#eci0icar Lue e! va!or de
una
arumento no sea cambiado #or !a 0uncin o #or e! #rocedimiento, #oniendo dic1o
arumento entre
#ar/ntesis en !a !!amada. Cn arumento entre #ar/ntesis en !a !!amada es un arumento
#asado #or
valor. Por e(em#!o,
2 Pasar un arumento por referencia im#!ica Lue en rea!idad se #asa a !a 0uncin !a variab!e oriina!, de modo
Lue !a
0uncin #uede modi0icar su va!or. Pasar por valor im#!ica crear una nueva variab!e dentro de !a 0uncin "
#asar!e
una co#ia de! va!or de !a variab!e e@terna. Si se modi0ica e! va!or de !a variab!e co#ia, !a variab!e oriina!
Lueda
ina!terada. Cuando en !a !!amada a una 0uncin se #onen como arumentos constantes num/ricas o
e@#resiones !os
va!ores se #asan por valor.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .&
Raiz ((Num)) ' En el caso de la funcin
Raiz (Num), F ' En el caso del procedimiento
E! arumento #um es #asado por valor. Sini0ica Lue !o Lue se #asa es una co#ia de #um.
Si
e! #rocedimiento cambia ese va!or, e! cambio a0ecta s!o a !a co#ia " no a !a #ro#ia variab!e
#um.
+tra 0orma de es#eci0icar Lue un arumento ser siem#re #asado por valor es ante#oniendo
!a
#a!abra B1Val a !a dec!aracin de! #armetro en !a cabecera de! #rocedimiento ?+ub o
5unctionA.
Por e(em#!o,
Function Raiz (ByVal N As Double)
Sub Raiz (ByVal N As Double, F As Double)
Pasar arumentos por valor evita modi0icaciones accidenta!es, #ero tiene un coste en
tiem#o "
memoria Lue #uede ser sini0icativo cuando se #asan randes vo!>menes de in0ormacin,
como
sucede con vectores, matrices " estructuras.
-.T.2 Procedi+ien,o% rec)r%i0o%
Se dice Lue una 0uncin ?5unctionA es recursiva o Lue un #rocedimiento ?+ubA es
recursivo si se
!!aman a sF mismos.
D continuacin se #resenta una e(em#!o de una 0uncin Lue ca!cu!a e! 0actoria! de un
n>mero
#roramada de 0orma recursiva.
Function Factorial (N As Integer) As Long
If N = 0 Then
Factorial = 1 'Condicin de final
Else
Factorial = N * Factorial (N - 1)
End If
End Function
En este e(em#!o, si !a variab!e N Lue le pasamos a !a 0uncin va!e 4, sini0icar Lu se 1a
!!eado a! 0ina! de! #roceso, " #or tanto le asi&namos e! va!or 1 a! va!or de! 0actoria!
?recordar Lue
4a Y 1A. Si es distinto de 4, !a 0uncin se !!ama a e!!a misma, #ero variando e! arumento
?NN1A,
1asta !!ear a! #unto en e! Lue NN1Y4, 0ina!iBndose e! #roceso.
-.U ARRA"S
Cn arra1 #ermite re0erirse a una serie de e!ementos de! mismo ti#o con un mismo nombre,
" 1ace
re0erencia un >nico e!emento de !a serie uti!iBando uno o ms Fndices, como un vector o una
matriB
en E!ebra.
Visual Basic #ermite de0inir arra"s de variab!es de una o ms dimensiones ?1asta .4A " de
cua!Luier ti#o de datos ?ti#os 0undamenta!es " de0inidos #or e! usuarioA. Pero adems
Visual Basic
introduce una nueva c!ase de arra"s, arra3s de controles, esto es, ?arra"s de botones, de
etiLuetas, de
#ane!es, etc.A Lue #ermiten una #roramacin ms breve " c!ara. En este a#artado s!o se
tratarn
!os arra"s de variab!es.
Entre !os arra"s de variab!es cabe distinuir dos ti#os 0undamenta!es, de#endiendo de Lue
n>mero de e!ementos sea constante o #ueda variar durante !a e(ecucin de! #rorama.
1. Arra'% e%,H,ico%, cu"a dimensin es siem#re !a misma.
2. Arra'% dinH+ico%, cu"a dimensin se #uede modi0icar durante !a e(ecucin de!
#rorama.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .5
-.U.1 Arra'% e%,H,ico%
=a dec!aracin de un arra" esttico de#ender de su mbito.
=a dec!aracin de un arra" !oba! se 1ace en !a seccin de dec!araciones de un mdu!o
uti!iBando
!a sentencia Alobal.
=a dec!aracin de un arra" a nive! de! mdu!o o de! 0ormu!ario se 1ace en !a seccin de
dec!araciones de! mdu!o o de! 0ormu!ario uti!iBando !a sentencia 7im.
Para dec!arar un arra" !oca! a un #rocedimiento, se uti!iBa !a sentencia +tatic dentro de!
#ro#io
#rocedimiento.
D continuacin se #resentan a!unos e(em#!os6
Dim vector(19) As Double
Este e(em#!o dec!ara un arra" de una dimensin, !!amado vector, con veinte e!ementos,
vector2(4, vector2)4, ... , vector2):4, cada uno de !os cua!es #ermite a!macenar un 7ouble.
Dim matriz(3, 1 To 6) As Integer
Este e(em#!o dec!ara un arra" de dos dimensiones, matri>, con ,@. e!ementos,
!atriz2(1)4, ...
!atriz2.164, de ti#o entero.
Global cadena(1 To 12) As String
E! e(em#!o anterior dec!ara un arra" de una dimensin, cadena, con doce e!ementos,
caract2)4, ... , caract2)-4, cada uno de !os cu!es #ermite a!macenar una cadena de
caracteres.
=a dec!aracin de !os arra"s estticos es bastante cmoda. Se dec!aran una veB. Sin
embaro
tienen e! inconveniente Lue en !a ma"orFa de !os casos estn sobredimensionados " uti!iBan
ms
memoria de !a Lue rea!mente necesitan. Esto im#!ica Lue se est ma!astando memoria.
Para
so!ucionar este #rob!ema se uti!iBan !os arra"s dinmicos.
-.U.# Arra'% dinH+ico%
E! es#acio necesario #ara un arra" esttico se asina a! iniciarse e! #rorama " #ermanece
0i(o
durante su e(ecucin. E! es#acio #ara un arra" dinmico se asina durante !a e(ecucin de!
#rorama. Cn arra" dinmico, #uede ser redimensionado en cua!Luier momento de !a
e(ecucin. =a
0orma me(or de redimensionar !os arra"s es mediante variab!es.
Para crear un arra" dinmico #rimero 1a" Lue dec!arar!o como si 0uera una arra" esttico,
#ero
sin dar!e dimensin. Es decir, se de(a !a !ista vacFa sin #oner!e nin>n n>mero. Esto se 1ace
con !a
sentencia Alobal si se Luiere Lue sea !oba!, con 7im si se Luiere a nive! de mdu!o o con
+tatic o
7im si se Luiere Lue sea !oca!.
Para asinar e! n>mero actua! de e!ementos de! arra" se uti!iBa !a sentencia :e7im. =a
sentencia :e7im #uede a#arecer so!amente en un #rocedimiento " #ermite cambiar e!
n>mero de
e!ementos de! arra", no e! n>mero de dimensiones. Esto Luiere decir Lue, #or e(em#!o, no
se #uede
tras0ormar un vector en una matriB.
D continuacin se #resenta un e(em#!o de cmo se dec!aran arra"s dinmicos en Visual
Basic.
Si se dec!ara e! arra" atri> a nive! de! 0ormu!ario,
Dim Matriz( ) As Integer
ms tarde, un #rocedimiento +lculo #uede asinar es#acio #ara e! arra", como se indica a
continuacin6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .6
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada veB Lue se e(ecuta !a sentencia :e7im, todos !os va!ores a!macenados en e! arra" se
#ierden. Cuando interese cambiar e! tama'o de! arra" conservando !os va!ores de! arra",
1a" Lue
e(ecutar :e7im con !a #a!abra c!ave Preserve. Por e(em#!o, su#nase un arra" A de dos
dimensiones. =a sentencia,
ReDim Preserve A(D1, UBound(A, 2) + 2)
incrementa e! tama'o de! arra" en dos co!umnas ms. =a 0uncin OBound de! e(em#!o
devue!ve e!
va!or ms a!to de !a seunda dimensin.
-.18 ESTRUCTURAS
Cna estructura es un nuevo ti#o de datos ?un ti#o de0inido #or e! usuarioA Lue #uede ser
mani#u!ado
de !a misma 0orma Lue !os ti#os #rede0inidos ?=nt, +trin&, ...A. Cna estructura #uede
de0inirse como
una co!eccin o aru#acin de datos de di0erentes ti#os evidentemente re!acionados.
Para crear una estructura con Visual Basic 1a" Lue uti!iBar !a sentencia .1pe ... $nd .1pe.
Esta sentencia so!amente #uede a#arecer en !a seccin de dec!araciones de un mdu!o. Por
e(em#!o,
Type Ficha
Nombre As String
Direccion As String *40
Telefono As Long
DNI As Long
End Type
Este e(em#!o dec!ara un ti#o de datos denominado *ic6a Lue consta de cuatro !ie!*ros o
cam#os, denominados #ombre, 7ireccion, .elefono " 7#=.
Cna veB de0inido un nuevo ti#o de datos, se #ueden dec!arar variab!es !oba!es, a nive! de!
0ormu!ario o de! mdu!o, o !oca!es, de! mismo ti#o, como #or e(em#!o6
Dim Alumn as Ficha
Para re0erirse a un determinado miembro de una estructura se uti!iBa !a notacin
varia*le'!ie!*ro. Por e(em#!o,
Alum.DNI = 34103315
D su veB, un miembro de una estructura #uede ser otra estructura, es decir un ti#o de0inido
#or
e! usuario. Por e(em#!o,
Type Fecha
Dia As Integer
Mes As Integer
Anio As Integer
End Type
Type Ficha
Alta As Fecha
Nombre As String
Direccion As String * 40
Telefono AS Long
DNI As Long
End Type
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .7
Dentro de una estructura #uede 1aber arra"s estticos #ero no arra"s dinmicos.
En Visual Basic se #ueden de0inir arra"s de estructuras. =a dec!aracin de un arra" de
estructuras se 1ar con !a #a!abra Alobal, 7im o +tatic, de#endiendo de su mbito. =a
0orma de
1acer!o es !a siuiente6
Global Alum (1 To 40) As Ficha
Dim Alum (1 To 40) As Ficha
Static Alumn (1 To 40) As Ficha
En Visual Basic, a !a 1ora de dec!arar arra"s de estructuras, sucede !o mismo Lue a!
dec!arar
arra"s de cua!Luier ti#o de variab!es. Con Alum?, .o 40@, se crea un vector de estructuras
de ,4
e!ementos de ti#o 5icha ?Alu!2)4, Alu!2-4, ..., Alu!2&(4A. Con Alum?40@, se crea un
vector de
estructuras de ,1 e!ementos ?Alu!2(4, Alu!2)4, ... Alu!2&(4A.
-.11 *UNCIONES PARA MANE:O DE CADENAS DE CARACTERES
E@isten varias 0unciones >ti!es #ara e! mane(o de cadenas de caracteres ?strin&sA. Estas
0unciones se
uti!iBan #ara !a eva!uacin, mani#u!acin o conversin de cadenas de caracteres. Son !as
siuientes6
U,ilidad *)ncin en
!i%)al 7a%ic
Co+en,ario%
N>mero de caracteres de una cadena =en?strin i varnameA
Conversin a min>scu!as o a ma">scu!as =Case ?@A, CCase ?@A
Conversin de cadenas a n>meros " de
n>meros a cadenas
Str?nA, CStr?nA,
2a!?strinA
E@traccin de un n\ de caracteres en un
rano, de !a #arte derec1a o iBLuierda de
una cadena
&id?strin, inig, nhA,
8i1t?strin, !ent1A,
=e0t?strin, !ent1A
E! #armetro n de &id es
o#ciona! e indica e! n>mero de
caracteres a e@traer a #artir de
_ini_
Com#aracin de cadenas de caracteres strCom#?str1, str2A Devue!ve N1, 4, 1 se>n str, sea
menor, iua! o ma"or Lue strF
5a!!ar si una cadena es #arte de otra ?est
contenida como subNcadenaA
InStr?gnh, str1, str2A devue!ve #osicin de str, en strF
7ab!a *.,6 )unciones de mane(o de cadenas de caracteres en !i%)al 7a%ic.
E(em#!os6
MyDouble = 437.324 MyDouble es un Double.
MyString = CStr(MyDouble) MyString contiene "437.324".
MyValue = Val("2457") Devuelve 2457.
MyValue = Val(" 2 45 7") Devuelve 2457.
MyValue = Val("24 and 57") Devuelve 24.
AnyString = "Hello World" Se define el string.
MyStr = Right(AnyString, 6) Devuelve " World".
MyStr = Left(AnyString, 7) Devuelve "Hello W".
MyStr = Right(AnyString, 20) Devuelve "Hello World".
MyString = "Mid Function Demo" Se crea un nuevo string.
LastWord = Mid(MyString, 14, 4) Devuelve "Demo".
MidWords = Mid(MyString, 5) Devuelve "Function Demo".
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .9
Para obtener ms in0ormacin sobre cada una de !as 0unciones consu!tar e! -elp de Visual
Basic.
E@iste adems e! o#erador de concatenacin ] Lue #uede ser uti!iBado con cadenas de
caracteres. Se uti!iBa #ara #oner una cadena a continuacin de otra. Por e(em#!o6
str1 = "My first string" Se inicializan los strings
str2 = "My second string"
TextoFinal = str1 & str2 TextoFinal vale "My first stringMy second
string"
-.1# *UNCIONES MATEMGTICAS
D! iua! Lue !as 0unciones vistas #ara e! mane(o de cadenas de caracteres, e@iste una serie
de
0unciones matemticas !as cua!es #ermiten rea!iBar c!cu!os dentro de un #rorama de
Visual Basic.
Dic1as 0unciones se muestran en !a siuiente tab!a6
*)ncin
+a,e+H,ica
*)ncin en
!i%)al 7a%ic
*)ncin
+a,e+H,ica
*)ncin en
!i%)al 7a%ic
2a!or abso!uto Dbs?@A N\ a!eatorio 8nd
Drco tanente Dtn?@A Seno " coseno Sin?@A, Cos?@A
E@#onencia! E@#?@A 7anente 7an?@A
Parte entera Int?@A, )i@?@A 8aFB cuadrada SLr?@A
=oaritmo =o?@A Sino ?1, 4, N1A Sn?@A
7ab!a *.-6 )unciones matemticas en !i%)al 7a%ic.
E(em#!os6
MyNumber = Abs(50.3) Devuelve 50.3.
MyNumber = Abs(-50.3) Devuelve 50.3.
MyAngle = 1.3 ' El ngulo debe estar en radianes.
MySecant = 1 / Cos(MyAngle) ' Calcula la secante.
MySqr = Sqr(4) ' Devuelve 2.
MySqr = Sqr(23) ' Devuelve 4.79583152331272.
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0 'Declaracin de las variables
MySign = Sgn(MyVar1) ' Devuelve 1.
MySign = Sgn(MyVar2) ' Devuelve -1.
MySign = Sgn(MyVar3) ' Devuelve 0.
Con e! 0in de com#!etar estas 0unciones, se o0rece a continuacin una re!acin de 0unciones
Lue son derivadas de !as anteriores. E! a!umno #odrFa #roramar dic1as 0unciones en un
0ic1ero
4.bas " asF #oder!as uti!iBar #osteriormente en cua!Luier #rorama. Dic1as 0unciones se
muestran en
!a siuiente 7ab!a6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina .:
*)ncin +a,e+H,ica EBpre%in eP)i0alen,e
Secante Sec?GA Y 1 M Cos?GA
Cosecante Cosec?GA Y 1 M Sin?GA
Cotanente Cotan?GA Y 1 M 7an?GA
Drcoseno Drcsin?GA Y Dtn?G M SLr?NG [ G Z 1AA
Drcocoseno Drccos?GA Y Dtn?NG M SLr?NG [ G Z 1AA Z 2 [ Dtn?1A
Drcosecante Drcsec?GA Y Dtn?G M SLr?G [ G Q 1AA Z Sn??GA N1A [ ?2 [ Dtn?1AA
Drcocosecante Drccosec?GA Y Dtn?G M SLr?G [ G N 1AA Z ?Sn?GA N 1A [ ?2 [ Dtn?1AA
Drcocotanente Drccotan?GA Y Dtn?GA Z 2 [ Dtn?1A
Seno 5i#erb!ico 5Sin?GA Y ?E@#?GA N E@#?NGAA M 2
Coseno 5i#erb!ico 5cos?GA Y ?E@#?GA Z E@#?NGAA M 2
7anente 5i#erb!ica 5tan?GA Y ?E@#?GA N E@#?NGAA M ?E@#?GA Z E@#?NGAA
Secante 5i#erb!ica 5Sec?GA Y 2 M ?E@#?GA Z E@#?NGAA
Cosecante 5i#erb!ica 5cosec?GA Y 2 M ?E@#?GA N E@#?NGAA
Cotanente 5i#erb!ica 5cotan?GA Y ?E@#?GA Z E@#?NGAA M ?E@#?GA N E@#?NGAA
Drcoseno 5i#erb!ico 5arcsin?GA Y =o?G Z SLr?G [ G Z 1AA
Drcocoseno 5i#erb!ico 5arccos?GA Y =o?G Z SLr?G [ G N 1AA
Drcotanente 5i#erb!ica 5arctan?GA Y =o??1 Z GA M ?1 N GAA M 2
Drcosecante 5i#erb!ica 5arcsec?GA Y =o??SLr?NG [ G Z 1A Z 1A M GA
Drcocosecante 5i#erb!ica 5arccosec?GA Y =o??Sn?GA [ SLr?G [ G Z 1A Z1A M GA
Drcocotanente 5i#erb!ica 5arccotan?GA Y =o??G Z 1A M ?G Q 1AA M 2
=oaritmo en base N =oN?GA Y =o?GA M =o?NA
7ab!a *..6 )unciones au@i!iares matemticas ?no !as da Visual BasicA.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &(
/. E!ENTOS PROPIEDADES " CONTROLES
En este ca#Ftu!o se #retende recoer de una manera ms sistemtica " enera! !os eventos "
contro!es ms 1abitua!es de Visual Basic 4.0. 5a" Lue se'a!ar Lue en nin>n momento se
#retende
abandonar e! carcter introductorio de este manua!, " Lue Visual Basic 4.0 tiene muc1as
ms
#osibi!idades de !as Lue aLuF se muestran. Por e(em#!o, muc1os de !os contro!es " eventos
de Visual
Basic estn re!acionados con e! acceso a bases de datos. Estos as#ectos no se citarn en
estos
a#untes. Para una in0ormacin ms deta!!ada se #uede acudir a un buen !ibro de re0erencia o
a! -elp
de! #rorama.
=a #roramacin en Visual Basic ?a! menos #ara e(em#!os senci!!osA sue!e #roceder de!
siuiente modo6
1. Se de0inen interactivamente sobre e!
0ormu!ario !os contro!es Lue van a
constituir !a a#!icacin.
2. Se de0ine #ara cada contro! e! cdio
con e! Lue se va a res#onder a cada
uno de !os eventos. Para e!!o basta
c!icar dos veces sobre e! contro! " se
abre una ventana de cdio como !a
mostrada en !a 0iura ,.1. En e!!a
Visual Basic 1a #re#arado "a e! inicio
" e! 0ina! de !a 0uncin con !a Lue se va
a res#onder a! evento. E! nombre de! evento 0orma #arte de! nombre de !a 0uncin, (unto a!
nombre de! contro!. En e! e(em#!o de! !a )iura ,.1 est #re#arada !a 0uncin #ara escribir
e! cdio Lue se e(ecutar a! #roducirse e! evento Clic0 sobre e! contro! cmb+alir.
En e! resto de este ca#Ftu!o se vern con un cierto deta!!e !os eventos, contro!es "
#ro#iedades
ms 1abitua!es en Visual Basic.
/.1 E!ENTOS
D continuacin se #resentan brevemente !os eventos ms norma!es Lue reconoce Visual
Basic 4.0.
Es im#ortante tener una visin enera! de !os eventos Lue e@isten en !indo"s () #orLue
cada
contro! de !os Lue se vern ms ade!ante tiene su #ro#io con(unto de eventos Lue reconoce,
" otros
Lue no reconoce. Cua!Luier usuario de !as a#!icaciones escritas #ara !indo"s () 1ace uso
continuo
e intuitivo de !os eventos, #ero es #osib!e Lue nunca se 1a"a detenido a #ensar sobre e!!o.
Para saber Lu/ eventos #uede recibir un contro! determinado basta se!eccionar!o " #u!sar
5,.
De esta 0orma se abre una ventana de! -elp Lue e@#!ica e! contro! " #ermite acceder a !os
eventos
Lue so#orta.
/.1.1 E0en,o% ;enerale%
4.,.,., Car&a 1 descar&a de formularios
Cuando se arranca una a#!icacin, o ms en concreto cuando se visua!iBa #or #rimera veB
un
0ormu!ario se #roducen varios eventos consecutivos6 =nitiali>e, 8oad, Activate " Paint.
Cada uno de
estos eventos se #uede a#rovec1ar #ara rea!iBar ciertas o#eraciones #or medio de !a 0uncin
corres#ondiente.
)iura ,.1. Cdio Lue estionar e! evento C!icK sobre
e! contro! de nombre cmbSa!ir.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &)
Para inicia!iBar !as variab!es de0inidas a nive! de mdu!o se sue!e uti!iBar e! evento
=nitiali>e,
Lue tiene !uar antes Lue e! 8oad. E! evento 8oad se activa a! carar un 0ormu!ario. Con e!
0ormu!ario #rinci#a! esto sucede a! arrancar !a e(ecucin de un #roramaV con e! resto de !os
0ormu!arios a! mandar!os carar desde cua!Luier #rocedimiento o a! 1acer re0erencia a
a!una
#ro#iedad o contro! de un 0ormu!ario Lue no est/ carado. D! descarar un 0ormu!ario se
#roduce e!
evento Onload. Si se detiene e! #rorama desde e! botn +top de Visual Basic 4.0 ?o de!
men>
corres#ondienteA o con un $nd1 no se #asa #or e! evento Onload. Para #asar #or e! evento
Onload
es necesario cerrar !a ventana con e! botn de cerrar o !!amar!o e@#!Fcitamente.
E! evento 8oad de un 0ormu!ario se sue!e uti!iBar #ara e(ecutar una 0uncin Lue d/ va!or a
sus
#ro#iedades " a !as de !os contro!es Lue de#enden de dic1o 0ormu!ario. No se #uede uti!iBar
#ara
dibu(ar o im#rimir sobre e! 0ormu!ario, #ues en e! momento en Lue se #roduce este evento
e!
0ormu!ario todavFa no est dis#onib!e #ara dic1as o#eraciones. Por e(em#!o, si en e!
0ormu!ario debe
a#arecer !a sa!ida de! m/todo Print o de !os m/todos r0icos Pset, 8ine " Circle ?Lue se
estudian en
e! Ca#Ftu!o . de este manua!A #uede uti!iBarse e! evento Paint u otro #osterior ?#or e(em#!o,
e!
evento Aot5ocus de! #rimer contro!A #ero no #uede uti!iBarse e! evento 8oad.
Se #uede ocu!tar un 0ormu!ario sin descarar!o con e! m/todo -ide. Esto 1ace Lue e!
0ormu!ario desa#areBca de !a ventana, aunLue sus variab!es " #ro#iedades sian estando
accesib!es "
conservando sus va!ores. Para 1acer visib!e un 0ormu!ario ocu!to #ero "a carado se uti!iBa
e!
m/todo +ho", Lue enera !os eventos Activate " Paint. Si e! 0ormu!ario no 1abFa sido
carado
#reviamente, e! m/todo +ho" enera !os cuatro eventos mencionados.
Cuando un 0ormu!ario #asa a ser !a ventana activa se #roduce e! evento Activate " a! de(ar
de
ser!o e! evento 7eactivate. En e! caso de Lue e! 0ormu!ario Lue va a ser activo no estuviera
carado
"a, #rimero sucederFan !os eventos =nitiali>e, 8oad " !ueo !os eventos Activate " Paint.
7odo esto se #uede ver " entender con un sim#!e e(em#!o, mostrado en !a 0iura ,.2. Se 1an
de crear dos 0ormu!arios ?frmPrincipal " frm+ecundarioA. E! #rimero de e!!os contendr
dos
botones ?cmdVer+ec " cmd+alirA " e! seundo tres ?cmd-ide, cmdOnload "
cmd.erminateA. E!
0ormu!ario #rinci#a! ser e! #rimero Lue a#arece, " s!o se ver e! seundo si se c!ica en e!
botn
Ver +e&undo 5ormulario' Cuando asF se 1aa, a medida Lue !os eventos antes
mencionados se
va"an sucediendo, irn a#areciendo en #anta!!a unas ca(as de mensa(es Lue tendrn como
te@to e!
nombre de! evento Lue se acaba de #roducir. Se>n con cua! de !os tres botones se 1aa
desa#arecer
e! seundo 0ormu!ario, a! vo!ver!o a ver se #roducirn unos eventos u otros, se>n se #uede
ver #or
!os mensa(es Lue van a#areciendo con cada evento.
'Cdigo del Formulario 1
Private Sub cmbSalir_Click()
End
End Sub
Private Sub cmbVerSec_Click()
frmSecundario.Show
End Sub
'Cdigo del formulario 2
Private Sub cmdHide_Click()
Hide
End Sub
Private Sub cmdUnload_Click()
Unload Me
End Sub
Private Sub
cmdTerminate_Click() )iura ,.2. 8esu!tado de! e(em#!o de cara de 0ormu!arios..
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &-
Hide
Set frmSecundario = Nothing
End Sub
Private Sub Form_Activate()
MsgBox ("Evento Activate")
End Sub
Private Sub Form_Deactivate()
MsgBox ("Evento Deactivate")
End Sub
Private Sub Form_Initialize()
MsgBox ("Evento Initialize")
End Sub
Private Sub Form_Load()
MsgBox ("Evento Load")
End Sub
Private Sub Form_Paint()
MsgBox ("Evento Paint")
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox ("Evento Unload")
End Sub
Es mu" interesante rea!iBar este e(em#!o " seuir !a secuencia de eventos Lue se #roducen
a!
1acer a#arecer " desa#arecer !os 0ormu!arios.
4.,.,.F Paint
E! evento Paint sucede cuando 1a" Lue redibu(ar un 0ormu!ario o PictureBo%. Esto sucede
cuando
esos ob(etos se 1acen visib!es des#u/s de 1aber estado ta#ados #or otros, tras 1aber sido
movidos o
tras 1aber sido modi0icados de tama'o.
4.,.,.B $l foco ?focus@.
En todas !as a#!icaciones de !indo"s, en cua!Luiera de sus versiones, siem#re 1a" un
>nico
contro!, 0ormu!ario o ventana Lue #uede recibir c!icKs de! ratn o entradas desde tec!ado.
En cada
momento ese contro!, ventana o 0ormu!ario es e! Lue dis#one de! W0ocoX ?focusA. E! ob(eto
Lue
#osee e! 0oco est caracteriBado #or estar resaltado con !etra nerita, con un contorno ms
vivo o
teniendo #ar#adeando e! cursor en /!. Este 0oco #uede ser tras!adado de un ob(eto a otro #or
cdio
o #or interacciones de! usuario, como #or e(em#!o c!icando con e! ratn en distintos #untos
de !a
#anta!!a o #u!sando !a tec!a .ab. Cada veB Lue un ob(eto #ierde e! 0oco se #roduce su
evento
8ost5ocus ", #osteriormente, e! evento Aot5ocus de! ob(eto Lue 1a recibido e! 0oco.
Dos #ro#iedades de muc1os contro!es re!acionadas con e! 0oco son .ab=nde% " .ab+top.
.ab+top determina si e! 0oco se va o no a #osar en e! ob(eto a! #u!sar !a tec!a .ab ?si
.ab+top est a
5alse no se #uede obtener e! 0oco mediante e! tabu!adorA " .ab=nde% determina e! orden en
e! Lue
esto va a suceder. DsF a! carar un 0ormu!ario, e! 0oco estar en aLue! ob(eto cu"o .ab=nde%
sea 4.
D! #u!sar !a tec!a .ab e! 0oco ir a! ob(eto Lue tena .ab=nde% Y 1 " asF sucesivamente.
Para
retroceder en esta !ista se #u!sa a1Lsculas,.ab' =a #ro#iedad .ab=nde% se #uede
determinar en
tiem#o de dise'o #or medio de !a ca(a de #ro#iedades, de! modo 1abitua!.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &.
4.,.,.4 Re1Press; Re1Op 1 Re17o"n
E! evento Re1Press sucede cuando e! usuario #u!sa " sue!ta determinada tec!a. En este
evento e!
>nico arumento Re1Ascii es necesario #ara conocer cu! es e! cdio DSCII de !a tec!a
#u!sada. E!
evento Re17o"n se #roduce cuando e! usuario #u!sa determinada tec!a " e! evento Re1Op
a! so!tar
una tec!a.
=os eventos Re1Op " Re17o"n tienen un seundo arumento !!amado +hift Lue #ermiten
determinar si esa tec!a se 1a #u!sado estando #u!sadas a !a veB cua!Luier combinacin de !as
tec!as
+hift, Alt " Ctrl. En un a#artado #r@imo se e@#!ica cmo se identi0ican !as tec!as #u!sadas
a #artir
de! arumento +hift.
/.1.# E0en,o% relacionado% con el ra,n
4.,.F., Clic0 1 7blClic0
E! evento Clic0 se activa cuando e! usuario #u!sa " sue!ta r#idamente uno de !os botones
de! ratn.
7ambi/n #uede activarse desde cdio ?sin tocar e! ratnA variando !a #ro#iedad Value de
uno de
!os contro!es. En e! caso de un 0ormu!ario este evento se activa cuando e! usuario c!ica
sobre una
Bona de! 0ormu!ario en !a Lue no 1a"a nin>n contro! o sobre un contro! Lue en ese
momento est/
in1abi!itado ?#ro#iedad $nabled Y FalseA. En e! caso de un contro!, e! evento se activa
cuando e!
usuario rea!iBa una de !as siuientes o#eraciones6
C!icar sobre un contro! con e! botn derec1o o iBLuierdo de! ratn. En e! caso de un botn
de comando, de un botn de se!eccin o de un botn de o#cin, e! evento sucede so!amente
a! c!icar con e! botn iBLuierdo.
Se!eccionar un reistro de a!uno de !os varios ti#os !istas des#!eab!es Lue dis#one
Visual
Basic.
Pu!sar !a barra espaciadora cuando e! 0oco est en un botn de comando, en un botn de
se!eccin o en un botn de o#cin.
Pu!sar !a tec!a :eturn cuando en un 0ormu!ario 1a" un botn Lue tiene su #ro#iedad
7efault Y .rue.
Pu!sar !a tec!a $sc cuando en un 0ormu!ario 1a" un botn Lue tiene su #ro#iedad Cancel
Y
.rue.
Pu!sar una combinacin de tec!as ace!eradoras ?Alt Z otra tec!a, como #or e(em#!o cuando
de des#!iea e! men> 5ile de !ord con Alt,FA de0inidas #ara activar un determinado
contro! de un 0ormu!ario.
7ambi/n se #uede activar e! evento Clic0 desde cdio rea!iBando una de !as siuientes
o#eraciones6
5acer Lue !a #ro#iedad Value de un botn de comando va!a .rue.
5acer Lue !a #ro#iedad Value de un botn de o#cin va!a .rue
&odi0icar !a #ro#iedad Value de un botn de se!eccin.
E! evento 7blClic0 sucede a! c!icar dos veces seuidas sobre un contro! o 0ormu!ario con e!
botn iBLuierdo de! ratn.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &&
4.,.F.F ouse7o"n; ouseOp 1 ouseove
E! evento ouse7o"n sucede cuando e! usuario #u!sa cua!Luiera de !os botones de! ratn,
mientras
Lue e! evento ouseOp sucede a! so!tar un botn Lue 1abFa sido #u!sado. E! evento
ouseove
sucede a! mover e! ratn sobre un contro! o 0ormu!ario.
=os eventos ouseOp " ouse7o"n tienen a!unos arumentos Lue merecen ser
comentados. E! arumento Button indica cu! de !os botones de! ratn 1a sido #u!sado o
so!tado, "
e! arumento +hift indica si adems a!una de !as tec!as alt, shift o ctrl est tambi/n
#u!sada. =a
!ista con todos !os #osib!es va!ores de estos arumentos es !a Lue siue6
C,e %i+.lica !alor Accin C,e %i+.lica !alor Accin
vb=e0t3utton 1 3otn iBdo #u!sado o so!tado vbS1i0t&asK 1 7ec!a S5I)7 #u!sada
vb8i1t3utton 2 3otn dc1o #u!sado o so!tado vbCtr!&asK 2 7ec!a C78= #u!sada
vb&idd!e3utton , 3otn centra! #u!sado o so!tado vbD!t&asK , 7ec!a D=7 #u!sada
7ab!a ,.16 2a!ores de !os arumentos de !os eventos ouseOp " ouse7o"n
Con estos va!ores se a#!ica !a aritm/tica boo!eana, !o cua! Luiere decir Lue si se #u!san
simu!tneamente !os botones iBLuierdo " derec1o de! ratn e! arumento Button va!dr *
?1Z2A " si
se #u!san !as tres tec!as shift1 ctrl " alt simu!tneamente e! arumento +hift va!dr 7
?1Z2Z,A.
4.,.F.B 7ra&9ver 1 7ra&7rop
E! evento 7ra&9ver sucede mientras se est arrastrando un ob(eto sobre un contro!. Sue!e
uti!iBarse
#ara variar !a 0orma de! cursor Lue se mueve con e! ratn de#endiendo de si e! ob(eto sobre
e! Lue se
encuentra e! cursor en ese momento es v!ido #ara so!tar o no. E! evento 7ra&7rop sucede
a!
conc!uir una o#eracin de arrastrar " so!tar. E! evento 7ra&9ver reLuiere de !os arumentos
Lue se
muestran a continuacin6
Private Sub Text1_DragOver(Source As Control, _
X As Single, Y As Single, State As Integer)
...
End Sub
=os arumentos de este evento son +ource Lue contiene e! ob(eto Lue est siendo
arrastrado,
C e P Lue indican !a #osicin de! ob(eto arrastrado dentro de! sistema de coordenadas de!
ob(eto
sobre e! Lue se est arrastrando " +tate ?Lue es #ro#io de! 7ra&9ver, #ero no a#arece en e!
7ra&7ropA Lue va!e 4, 1 2 se>n se est/ entrando, saliendo o "er!aneciendo dentro de!
mismo
ob(eto, res#ectivamente. Es im#ortante se'a!ar Lue e! evento 7ra&9ver es #ro#io de! ob(eto
sobre e!
Lue se arrastra, no de! ob(eto Lue es arrastrado.
/.# PROPIEDADES MGS COMUNES
5a" a!unas #ro#iedades Lue son comunes a muc1os contro!es. D continuacin se 1ace una
!ista con
!as uti!iBadas ms 1abitua!mente6
Appearance6 Estab!ece si un ob(eto tiene un as#ecto #!ano ?va!or 4A o tridimensiona!
?va!or
1A.
Bac0Color6 Estab!ece e! co!or de 0ondo de un ob(eto.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &5
Caption6 Estab!ece e! te@to Lue a#arece dentro o (unto a! ob(eto. 7iene e! #a#e! de un
tFtu!o.
$nabled6 Estab!ece si un ob(eto es accesib!e " modi0icab!e o no.
5ont6 Estab!ece !as caracterFsticas de! ti#o de !etra de! ob(eto.
5oreColor6 Estab!ece e! co!or de! te@to "Mo r0icos de un ob(eto.
-ei&ht6 Estab!ece !a a!tura de un ob(eto.
8eft6 Estab!ece !a distancia 1oriBonta! entre e! orien de! contro! " e! orien de! ob(eto
Lue
!o contiene, Lue #uede ser un 0ormu!ario, un marco ?0rameA, etc.
ousePointerG Estab!ece !a 0orma Lue ado#tar e! #untero de! ratn a! #osicionarse sobre
e! ob(eto. Esta 0orma #uede e!eirse dentro de una !ista en !as Lue a#arecen !as 1abitua!es
de! #untero de! ratn o creando iconos #ro#ios.
#ame6 Nombre de! ob(eto. 7odos !os ob(etos inc!uidos en un 0ormu!ario deben tener un
nombre con e! Lue #oder re0erirse a /! a !a 1ora de #roramar !a 0orma en Lue debe actuar.
E@isten unas re!as #ara de0inir !os nombre de !os contro!es, Lue "a se vieron en e!
Ca#Ftu!o 1.
.op6 Estab!ece !a distancia vertica! entre e! orien de! contro! " e! orien de! ob(eto Lue !o
contiene.
Visible6 Estab!ece si e! ob(eto es visib!e o invisib!e.
!idth6 Estab!ece !a anc1ura de! ob(eto.
)iura ,.*. D!unos de !os contro!es ms 1abitua!es de 2isua! 3asic.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &6
/.- CONTROLES MGS USUALES
En !a 0iura ,.* se muestran a!unos de !os contro!es ms 1abitua!es en Visual Basic. Estos
contro!es se e@#!ican a continuacin con ms deta!!e.
/.-.1 7o,n de co+ando ACo++and 7),,onC
=a #ro#iedades ms im#ortantes de! botn de comando son su Caption, Lue es
!o Lue a#arece escrito en /!, !as re0erentes a su #osicin ?8eft " .opA " a#ariencia
e@terna ?-ei&ht, !idth " ti#o de !etraA " !a #ro#iedad $nabled, Lue determina si
en un momento dado #uede ser #u!sado o no. No 1a" Lue con0undir !a #ro#iedad
Caption con !a #ro#iedad #ame. =a #rimera de0ine a un te@to Lue a#arecer
escrito en e! contro!, mientras Lue !as seunda de0ine e! nombre interno con e!
Lue se #uede 1acer re0erencia a! citado ob(eto.
E! evento Lue siem#re sue!e tener #roramado es e! Clic0.
/.-.# 7o,one% de opcin AOp,ion 7),,onC
Ddems de !as mencionadas #ara e! caso anterior estos botones tienen !a
#ro#iedad Value Lue s!o #uede ser .rue en uno de !os botones de! ru#o.
Para aru#ar botones se co!oca #rimero un marco o frame en e! 0ormu!ario
" dentro de /! se co!ocan des#u/s cuantos botones de o#cin se deseen. En
un mismo 0ormu!ario se #ueden co!ocar cuantos ru#os de botones de
o#cin se Luiera, cada uno de e!!os aru#ado dentro de su #ro#io marco. Es
mu" im#ortante co!ocar #rimero e! frame " des#u/s !os botones de o#cin. Con esto se
consiue
Lue !os botones de o#cin est/n aru#ados, de modo Lue s!o uno de e!!os #ueda estar
activado.
/.-.- 7o,one% de %eleccin AC6ecN 7oBC
=a >nica di0erencia entre estos botones " !os anteriores es Lue en !os
botones de se!eccin #uede 1aber ms de uno con !a #ro#iedad Value a
.rue.
E! usuario debe decidir Lu/ ti#o de botones se a(ustan me(or a sus
necesidades6 en e! caso de !a edad, est c!aro Lue no se #uede ser de dos
edades di0erentesV sF es #osib!e sin embaro conocer varios !enua(es de
#roramacin.
/.-./ 7arra% de de%plaEa+ien,o AScroll 7ar%C
En este ti#o de contro! !as #ro#iedades ms im#ortantes son a% " in, Lue
determinan e! rano en e! Lue est inc!uido su va!or, 8ar&eChan&e " +mallChan&e
Lue determinan !o Lue se modi0ica su va!or a! c!icar en !a barra o en !a 0!ec1a
res#ectivamente " Value Lue determina e! va!or actua! de !a barra de des#!aBamiento.
=as barras de des#!aBamiento no tienen #ro#iedad Caption.
E! evento Lue se #rorama 1abitua!mente es Chan&e; Lue se activa cuando !a
barra de des#!aBamiento modi0ica su va!or. 7odo !o comentado en este a#artado es
com>n #ara !as barras de des#!aBamiento vertica!es " 1oriBonta!es.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &7
/.-.1 E,iP)e,a% ALa.el%C
En !as etiLuetas o !abe!s !a #ro#iedad ms im#ortante es Caption, Lue contiene
e! te@to Lue a#arece sobre este contro!. Esta #ro#iedad #uede ser modi0icada
desde #rorama, #ero no interactivamente c!icando sobre e!!a ?a di0erencia de
!as cajas de te%to, Lue se vern a continuacinA. Puede contro!arse su tama'o, #osicin,
co!or de
0ondo " una es#ecie de borde *ND. 5abitua!mente !as labels no sue!en recibir eventos ni
contener
cdio.
/.-.2 Ca(a% de ,eB,o ATeB, 7oBC
=a #ro#iedad ms im#ortante es .e%t, Lue a!macena e! te@to contenido en
!a ca(a. 7ambi/n se sue!en contro!ar !as Lue 1acen re0erencia a su tama'o,
#osicin " a#ariencia. En a!>n momento se #uede desear im#edir e! acceso
a !a ca(a de te@to, #or !o Lue se estab!ecer su #ro#iedad $nabled como
5alse. =a #ro#iedad ulti8ine, Lue s!o se a#!ica a !as ca(as de te@to,
determina si en una de e!!as se #ueden inc!uir ms de una !Fnea o si se
inoran !os sa!tos de !Fnea.
=os eventos Lue se #roraman son Chan&e, cuando se Luiere rea!iBar a!una accin a!
modi0icar e! contenido de !a ca(a, Clic0 " 7blClic0 " en a!unos casos es#ecia!es Re1Press
#ara
contro!ar !os caracteres Lue se introducen. Por e(em#!o, se #uede c1eLuear !a introduccin
de!
cdio DSCII 1* ?=ntroA #ara detectar Lue "a se 0ina!iBado con !a introduccin de datos.
7ambi/n se
uti!iBa !a #ro#iedad a%8en&th #ara determinar e! n>mero m@imo de caracteres Lue
#ueden
introducirse en !a ca(a de te@to.
En aLue!!os casos en !os Lue se uti!ice una ca(a de te@to como entrada de datos ?es e!
contro!
Lue se uti!iBa !a ma"orFa de !as veces con esta 0ina!idadA, #uede ser interesante uti!iBar e!
m/todo
+et5ocus #ara enviar e! 0oco a !a ca(a cuando se considere o#ortuno.
/.-.4 Li%,a% ALi%, 7oBC
Cna lista es un contro! en e! Lue se #ueden mostrar varios reistros
o !Fneas, teniendo uno o varios de e!!os se!eccionado?sA. Si en !a
!ista 1a" ms reistros de !os Lue se #ueden mostrar a! mismo
tiem#o, se a'ade automticamente una scrollBar.
Para a'adir o e!iminar reistros de !a !ista se uti!iBan !os
m/todos Add=tem " :emove=tem res#ectivamente. Esto s!o #uede
1acerse en modo de e(ecucin, " no en modo de dise'o. Se sue!en
inicia!iBar desde e! evento 5orm/8oad. Para a'adir un reistro6
lstName.AddItem Registro_Aadido
o bien,
lstName.RemoveItem Posicin_del_registro_en_la_lista
En e! caso de Lue se Luiera vaciar com#!etamente e! contenido de una !ista se #uede uti!iBar
e!
m/todo Clear.
Dos #ro#iedades interesantes de !as !istas son 8istCount " 8ist=nde%. =a #rimera a!macena
e!
n>mero tota! de reistros inc!uidos en !a !ista. =a seunda #ermite acceder a una #osicin
concreta
de !a !ista #ara a'adir un reistro nuevo en esa #osicin, borrar uno "a e@istente,
se!eccionar!o, etc.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &9
E! va!or de #ro#iedad 8ist=nde% en cada momento coincide con e! reistro se!eccionado "
en e! caso
de no 1aber ninuno se!eccionado esta #ro#iedad va!e N1.
Para #oder acceder o situar e!ementos en una !ista, se uti!iBa !a #ro#iedad 8ist, a'adi/ndo!e
como arumento e! Fndice de! e!emento en !a !ista. DsF, #or e(em#!o6
lstAlumnos.list(20) = "Antxon Garca"
inc!uir en !a !ista de a!umnos ?lstAlumnosA !a entrada WDnt@on 9arcFaX, en !a #osicin 21
de !a !ista
?e! Fndice de una !ista comienBa #or e! n>mero 4A.
Es interesante saber Lue a! se!eccionar uno de !os reistros de !a !ista se activa e! evento
Clic0
de dic1a !ista.
/.-.T Ca(a% co+.inada% ACo+.o 7oBC
Cn combo tiene muc1as cosas en com>n con una !ista. Por e(em#!o !os m/todos
Add=tem, :emove=tem o Clear " !as #ro#iedades 8ist=nde% o 8istCount.
=a di0erencia #rinci#a! es Lue en un combo tiene una #ro#iedad !!amada
+t1le, Lue #uede ado#tar tres va!ores ?,;F BA Lue corres#onden con tres distintas
0ormas de #resentar una !ista. =a ms 1abitua! corres#onde con !a #ro#iedad
+t1leY4 ?7ropdo"n ComboA, en !a Lue s!o se muestra e! reistro se!eccionado,
Lue es editab!e #or e! usuario, #ermaneciendo e! resto ocu!to 1asta Lue e! usuario
des#!iea !a !ista com#!eta c!icando sobre !a 0!ec1a. Con !a #ro#iedad +t1leY1
?+imple ComboA e! reistro se!eccionado tambi/n es editab!e, " muestra una !ista no
des#!eab!e
dotada si es necesario de una scrollbar. Con +t1leY2 ?7rop7o"n 8istA e! reistro
se!eccionado no
es editab!e " !a !ista es des#!eab!e.
En una ca(a combinada, a! iua! Lue en una caja de te%to senci!!a, est #ermitido escribir
con
e! tec!ado en tiem#o de e(ecucin, si !a #ro#iedad $nabled va!e .rue. En una !ista esto no
es
#osib!e.
/.-.U Con,role% relacionado% con 5ic6ero%
7raba(ando en un entorno !indo"s es 1abitua! tener Lue abrir " cerrar 0ic1eros #arar !eer
datos,
uardar un documento, etc. 5a" tres contro!es bsicos Lue resu!tan de suma uti!idad en esta
tarea.
Son !a !ista de unidades !icas o discos ?7rive 8istBo%A, !a !ista de directorios ?7ir
8istBo%A " !a
!ista de 0ic1eros ?5ile 8istBo%A. Estos contro!es se tratan con ms deta!!e en e! Ca#Ftu!o 7.
/.-.18 Con,rol Ti+er
Si se desea Lue una accin suceda con cierta #eriodicidad se #uede uti!iBar un contro!
.imer.
Este contro! #roduce de modo automtico un evento cada cierto n>mero de mi!iseundos.
=a
#ro#iedad ms im#ortante de un ob(eto de este ti#o es =nterval, Lue determina,
#recisamente, e!
interva!o en mi!iseundos entre eventos consecutivos. =a accin Lue se desea activar debe
#roramarse en e! evento .imer de ese mismo contro!.
Si en a!>n momento se desea anu!ar momentneamente !a accin #eridica es su0iciente
con
1acer 5alse !a #ro#iedad $nabled de! contro! .imer " #ara e(ecutar!a de nuevo vo!ver a
1acer .rue
esa #ro#iedad. 5aciendo 4 !a #ro#iedad =nterval tambi/n se consiue in1abi!itar e! .imer.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina &:
/./ CA:AS DE DIGLOGO ESTGNDAR ACONTROLES COMMON DIALOGC
E! contro! de cuadro de diMlo&o estMndar de !indo"s () ?Common 7ialo&A o0rece una
0orma
senci!!a " e0iciente de rea!iBar a!unas de !as tareas ms comunes de un #rorama, ta!es
como !a
se!eccin de un 0ic1ero #ara !ecturaMescritura, !a im#resin de un 0ic1ero o !a se!eccin de
un ti#o de
!etra o un co!or.
=o #rimero Lue 1a" Lue 1acer es ubicar e! contro! en e! 0ormu!ario. E! contro! se
re#resentar
como un icono de tama'o invariab!e. No es #osib!e es#eci0icar !a ubicacin Lue tendr !a
ca(a de
di!oo en !a #anta!!a, "a Lue se trata de una #ro#iedad no accesib!e #or e! usuario.
Cn >nico cuadro de diMlo&o estMndar #uede bastar #ara rea!iBar todas !as 0unciones Lue se
deseen, es decir, no es necesario insertar un cuadro de di!oo #ara im#rimir un te@to " otro
#ara
uardar!o, sino Lue ambos #ueden com#artir e! mismo cuadro de di!oo sim#!emente
invocando a
uno u otro ti#o en tiem#o de e(ecucin ?no es #osib!e indicar!o en tiem#o de dise'oA. Para
e!!o se
dis#one de !os m/todos siuientesG +ho"Color; +ho"5ont; +ho"-elp; +ho"9pen;
+ho"Printer "
+ho"+ave. En ocasiones interesar introducir varios contro!es di0erentes #or motivos de
c!aridad o
#ara Lue ciertas #ro#iedades sean distintas.
)iura ,.,. Contro!es Common Dia!o.
En !a 0iura ,., se #ueden observar !os distintos ti#os de contro! Common 7ialo&. Por
e(em#!o, si se desea visua!iBar un cuadro de di!oo #ara abrir un 0ic1ero, 1abr Lue
escribir6
dlgAbrir.ShowOpen
donde dl&Abrir es e! nombre asinado a! contro! Common 7ialo&.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5(
=as #rinci#a!es propiedades de este contro! en cada una de sus variantes se e@#!ican en !os
a#artados siuientes. =a #ro#iedad 5la& e@iste #ara todos !os contro!es " determina a!unas
de sus
#ro#iedades ms im#ortantes.
/./.1 OpenVSa0e Dialo; Con,rol
=as #ro#iedades ms im#ortantes de este contro! son6
7efault$%t6 Es !a e@tensin #or de0ecto a uti!iBar #ara abrirMsa!var arc1ivos.
7ialo&.itle6 7Ftu!o de !a ca(a de di!oo.
5ile#ame6 Nombre de! arc1ivo a abrirMsa!var.
5ile.itle6 Nombre de! arc1ivo a abrirMsa!var #ero sin !a ruta de acceso corres#ondiente.
5ilter6 Contiene !os 0i!tros de se!eccin Lue a#arecern indicados en !a #arte in0erior de !a
#anta!!a en !a !ista de ti#os de arc1ivo. Pueden indicarse m>!ti#!es ti#os de arc1ivo,
se#arndo!os mediante un barra vertica! ? Alt Ar +I ,K A. Su sinta@is es !a siuiente6
Objeto.Filter = (descripcin a aparecer en la listbox)|filtro
Por e(em#!o6
Texto (*.txt)|*.txt|Imgenes(*.bmp;*.ico)|*.bmp;*.ico
5ilter=nde%6 Indica e! Fndice ?con res#ecto a !a !ista de ti#osA de! 0i!tro #or de0ecto.
=nit7ir6 Contiene e! nombre de! directorio #or de0ecto.
5la&6 Esta #ro#iedad #uede tomar muc1os va!ores con ob(eto de contro!ar !os deta!!es
concretos de este contro! ?#or e(em#!o, abrir un 0ic1ero en modo read onl3, avisar antes de
escribir sobre un 0ic1ero "a e@istente, etc.A. En e! -elp de Common 7ialo& Control buscar
Properties65ile 7ialo& Properties " !ueo !a #ro#iedad 5la&.
/./.# Prin, Dialo; Con,rol
=as #ro#iedades ms im#ortantes de este contro! son6
Copies6 Determina e! n>mero de co#ias a rea!iBar #or !a im#resora.
5romPa&e6 Se!ecciona e! n>mero de #ina a #artir de! cua! comienBa e! rano de
im#resin.
Printer7efault6 Determina si !as o#ciones actua!es de im#resin deben ser asinadas
como
!as o#ciones de im#resin #or de0ecto de! sistema o no.
.oPa&e6 Se!ecciona e! n>mero de #ina 1asta !a cua! !!ea e! rano de im#resin.
5la&s6 2er con a"uda de! -elp !os #osib!es va!ores de esta #ro#iedad.
/./.- *on, Dialo; Con,rol
=as #ro#iedades ms im#ortantes de este contro! son6
5ontBold; 5ont=talic; 5ont+tri0ethru; 5ontOnderline6 Devue!ve o asina !os va!ores de
!os esti!os de !a 0uente actua!.
5ont#ameG Devue!ve o asina e! nombre de !a 0uente en uso.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5)
5ont+i>eG Devue!ve o asina e! tama'o de !a 0uente en uso.
in 1 a%G Dsina o !ee !os va!ores de! tama'o de 0uente mFnimo " m@imo
res#ectivamente Lue a#arecern en !a !ista de se!eccin de tama'os de !a 0uente.
5la&6 Lue indica si !os ti#os de !etra Lue se van a mostrar son !os de !a #anta!!a ?]51A, !os
de !a im#resora ?]52A o ambos ?]5*A. Si 5la& va!e 4 da un error en tiem#o de e(ecucin.
/././ Color Dialo; Con,rol
=as #ro#iedades ms im#ortantes de este contro! son6
Color6 Devue!ve o asina e! va!or de! co!or actua!.
5la&s6 2er con a"uda de! -elp !os #osib!es va!ores de esta #ro#iedad. Por e(em#!o, con e!
va!or @A-@ muestra e! cuadro de di!oo com#!eto, mientras Lue e! va!or @A-@ muestra
s!o !os co!ores #rede0inidos..
/.1 *ORMULARIOS MWLTIPLES
Cn #rorama #uede contener ms de un 0ormu!ario. De 1ec1o, 1abitua!mente !os #roramas
contienen m>!ti#!es 0ormu!arios. 8ecu/rdese Lue e! 0ormu!ario es !a ventana de m@imo
nive! en !a
Lue a#arecen !os distintos contro!es.
Sin embaro, un #rorama siem#re debe tener un formulario principal, Lue es e! Lue
a#arece
a! arrancar e! #rorama. Se #uede indicar cu! debe ser e! 0ormu!ario #rinci#a! en e! men>
.ools69ptions, en !a !enfeta Project, en !a seccin +tartup 5orm. Por de0ecto, e!
#rorama
considera como 0ormu!ario #rinci#a! e! #rimero Lue se 1a"a creado. E! resto de 0ormu!arios
Lue se
inc!u"an en e! #rorama sern carados en su momento, a !o !aro de !a e(ecucin de!
#rorama.
En tiem#o de dise'o #ara a'adir nuevos 0ormu!arios a! #rorama, 1a" Lue acudir a! men>
=nsert65orm. =a 0orma de carar " descarar estos 0ormu!arios se 1a e@#!icado con
anterioridad. Es
im#ortante sin embaro recordar Lue conviene descarar aLue!!os subN0ormu!arios Lue "a
no sean de
uti!idad, "a Lue asF se a1orran recursos a! sistema.
Para activar en tiem#o de e(ecucin un 0ormu!ario distinto de! inicia! ?o de! Lue est/ activo
en
ese momentoA, se uti!iBa e! m/todo +ho" ?frm#ame.+ho"A. E! m/todo -ide ocu!ta e!
0ormu!ario,
#ero !o de(a caradoV e! m/todo Activate !o vue!ve a mostrar. E! m/todo Onload e!imina !os
e!ementos r0icos de! 0ormu!ario, #ero no !as variab!es " e! cdio. E! m/todo Onload e
descara
e! #ro#io 0ormu!ario Lue !o !!ama. Para e!iminar com#!etamente un 0ormu!ario se #uede
uti!iBar e!
comando6
Set frmName = NOTHING
Lue !!ama a! evento .erminate ?1a" Lue uti!iBar tambi/n !os m/todos -ide o Onload #ara
Lue
desa#areBca de !a #anta!!aA.
Para re0erirse desde un 0ormu!ario a !os ob(etos " variab!es de otro 0ormu!ario se uti!iBa e!
operador punto ?fr!Ba!e'C*#ect'$ro"ert3A.
En ciertas ocasiones se desea Lue e! #rorama no rea!ice ninuna accin 1asta Lue e!
usuario
cierre una ventana o 0ormu!ario en !a Lue se !e #reunta a!o o en !a Lue tiene Lue tomar
a!una
decisin. En esos casos, a! uti!iBar e! m/todo +ho", es necesario uti!iBar e! arumento st1le
con
va!or 1. D esto se !e !!ama mostrar una ventana en 0orma modal. Esto Luiere decir Lue no se
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5-
#ermitir a! usuario 1acer activa ninuna #anta!!a 1asta Lue e! usuario cierre esa ventana
moda!.
Esto se 1ace asF6
frmName.Show 1
o bien,
frmName.Show vbmodal
/.1.1 *or+)lario% ' %).I5or+)lario%
En a!unos casos #uede ser
interesante estab!ecer una
(erarLuFa entre !as ventanas
o 0ormu!arios Lue van
a#areciendo sucesivamente
en !a #anta!!a de! ordenador,
de ta! manera Lue a! cerrar
una Lue se 1a"a estab!ecido
como #rinci#a!, se cierren
tambi/n todas !as Lue se
1an abierto desde e!!a "
dentro de e!!a. De esta
0orma una misma a#!icacin
#uede tener varios
documentos abiertos, uno
en cada ventana 1i(a. DsF
traba(an #or e(em#!o !ord " $%cel, Lue #ueden tener varios documentos abiertos dentro de
!a
ventana #rinci#a! de !a a#!icacin. En e! mundo de !as !indo"s de icrosoft a esto se
!!ama 7=
?ultiple 7ocument =nterfaceA.
En !i%)al 7a%ic estos 0ormu!arios Lue tienen subN0ormu!arios 1i(os se conocen como
7=5orms. =os 0ormu!arios 7= se crean desde e! men> de Visual Basic con e! comando
=nsert67= 5orm. En una a#!icacin s!o #uede 1aber un 0ormu!ario 7=, #ero /ste #uede
tener
varios 1i(os. Si se Luiere Lue un 0ormu!ario sea Child, debe tener su #ro#iedad 7=Child
como
.rue.
Si a! iniciar una a#!icacin e! 0ormu!ario Lue se cara en #rimer !uar es un 0ormu!ario
Child,
e! 0ormu!ario 7= se cara a! mismo tiem#o. D! cerrar un 0ormu!ario 7=5orm se cierran
todos
sus 0ormu!arios ChildV #or e(em#!o, a! cerrar !ord tambi/n se cierran todos !os documentos
Lue
estuvieran abiertos. =os 0ormu!arios Child se minimiBan " ma@imiBan dentro de !os !Fmites
de!
0ormu!ario 7=. Cuando estn ma@imiBados, su Caption a#arece (unto a! Caption de!
0ormu!ario
7=. =os 0ormu!arios Child no tienen men>s #ro#ios, sino Lue sus men>s a#arecen en !a
barra de
men>s de! 0ormu!ario 7=.
En una a#!icacin con un 0ormu!ario 7= " uno o ms 0ormu!arios Child, #uede 1aber
otros
0ormu!arios Lue no sean Child " Lue se abren 0uera de !os !Fmites de! 0ormu!ario 7=
cuando son
reLueridos.
)iura ,.-. &DI ?&u!ti#!e Document Inter0aceA.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5.
/.2 ARRA"S DE CONTROLES
Cn arra" de contro!es esta 0ormado #or contro!es de! mismo ti#o Lue com#arten e! nombre
" !os
#rocedimientos o 0unciones #ara estionar !os eventos. Para identi0icar a cada uno de !os
contro!es
#ertenecientes a! arra" se uti!iBa =nde% o ndice, Lue es una #ro#iedad ms de cada contro!.
Su#oniendo Lue e! sistema tena memoria su0iciente un arra" en !indo"s () #odrFa !!ear
a tener
1asta *27.7 e!ementos.
=a uti!idad #rinci#a! de !os arra"s se #resenta en aLue!!os casos en !os Lue e! #rorama debe
res#onder de 0orma seme(ante a un mismo evento sobre varios contro!es de! mismo ti#o.
=os
e(em#!os ms c!aros son !os botones de o#cin " !os men>s. En estos casos e! #rorama
res#onde de
manera seme(ante inde#endientemente de cu! es !a o#cin se!eccionada. =os arra"s de
contro!es
com#arten cdio, !o cua! Luiere decir Lue s!o 1a" Lue #roramar una 0uncin #ara
res#onder a un
evento de un determinado ti#o sobre cua!Luier contro! de! arra". =as 0unciones Lue
estionan !os
eventos de un arra" tienen siem#re u arumento adiciona! de! ti#o =nde% As =nte&er Lue
indica Lu/
contro! de! arra" 1a recibido e! evento.
Cna o#cin avanBada de Visual Basic #ermite crear ob(etos en tiem#o de e(ecucin,
siem#re
Lue sean e!ementos de un arra" "a e@istente, con !a instruccin 8oad. De 0orma an!oa se
#ueden
destruir con Onload.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5&
1. MENWS
Entre !as ca#acidades de Visual Basic no #odFa 0a!tar !a
de construir men>s con ran 0aci!idad. Sin embaro, 1a"
a!unas di0erencias res#ecto a! modo e! Lue se
constru"en !os contro!es. Para crear men>s Visual Basic
dis#one de una 1erramienta es#ecia! Lue se activa
mediante e! comando enu $ditor de! men> .ools. E!
cuadro de di!oo Lue se abre se nuestra en !a 0iura -.1.
&s ade!ante se ver cmo se uti!iBa esta 1erramientaV
antes, conviene recordar brevemente !as caracterFsticas
ms im#ortantes de !os men>s de !indo"s ().
=os men>s #resentan sobre !os dems contro!es !a
venta(a de Lue ocu#an menos es#acio en #anta!!a, #ero
tienen e! inconveniente de Lue sus #osibi!idades no
estn a !a vista ms Lue cuando se des#!iean.
1.1 INTRODUCCIN A LAS POSI7ILIDADES DE LOS
MENWS
=a ma"or #arte de !as a#!icaciones de !indo"s ()
uti!iBan men>s. DunLue todo e! mundo est
0ami!iariBado con sus 0unciones ms bsicas, conviene
ver a!unas #osibi!idades menos usua!es. Se uti!iBarn
#ara e!!o unas a#!icaciones tan conocidas como !ord "
$%cel.
=a 0iura -.2 recoe e! as#ecto de! men> Vie" de
!ord S.0, en e! Lue conviene destacar !as siuientes
caracterFsticas6
1. =o #rimero Lue !!ama !a atencin es Lue !os men>s
a#arecen divididos en ru#os de o#ciones
se#arados #or !Fneas 1oriBonta!es.
2. D!unos items como Pa&e 8a1out tienen un #unto
nero a su iBLuierda. Esto Luiere decir Lue ese
Ftem es !a o#cin e!eida entre !os cuatro items de
su ru#o. En este sentido !os men>s se #arecen a
!os contro!es 9ptionButton. Visual Basic 4.0 no
#ermite 1acer esto directamente, #ero !o #uede
simu!ar.
*. +tros items como :uler tienen una marca de
se!eccin a su iBLuierda. En este caso e! men>
rea!iBa !a 0uncin de !as ca(as de se!eccin
?Chec0Bo%A.
,. 7odas !as o#ciones de! men> tienen una !etra
subra"ada. =a 0ina!idad es #oder des#!ear " activar !os men>s desde tec!ado, sin a"uda de!
ratn ?con Alt " !a !etra subra"adaA.
)iura -.1. Editor de men>s de Visual Basic.
)iura -.2. E! men> Vie" de !ord S.0.
)iura -.*. E! men> 5ormat6+heet de $%cel S.0.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 55
-. 7ambi/n se observa Lue e! Ftem Annotations a#arece en ris c!aro. Esto Luiere decir Lue
en
este momento no est activo " #or tanto no es se!eccionab!e.
.. +tros items como .oolbars " Toom a#arecen seuidos #or #untos sus#ensivos ?..A. Este
es un
convenio uti!iBado #ara indicar Lue e!iiendo esas o#ciones se abrirn sendos cuadros de
di!oo en !os Lue 1abr Lue tomar otras decisiones.
Por !o Lue res#ecta a! men> de $%cel Lue a#arece en !a 0iura -.* !a caracterFstica ms
im#ortante es Lue tiene subUmenLs ?se'a!ados mediante un #eLue'o trinu!o a su
derec1aA, Lue se
abren a! co!ocar e! cursor sobre e! Ftem corres#ondiente. Estos men>s se sue!en !!amar
menLs en
cascada, " son mu" 0recuentes en !indo"s ().
+tra caracterFstica de !os men>s, Lue no a#arece en !as 0iuras -.2 " -.*, es !a #osibi!idad de
de0inir combinaciones de tec!as Lue rea!iBan !a misma 0uncin Lue una o#cin de! men>.
Por
e(em#!o, en muc1as a#!icaciones Ctrl+C eLuiva!e a $dit6Cop1 " Ctrl+V a $dit6Paste. Estas
combinaciones de tec!as se !!aman accesos r"idos ?shortcutA " 1a" Lue distinuir!as de
acceder a
!os men>s mediante !a tec!a Alt " !as !etras subra"adas de !os nombres.
1.# EL EDITOR DE MENWS AMENU
EDITORC
En !a 0iura -., se vue!ve a recoer Na
ma"or tama'o " con a!unos
e!ementos "a de0inidosN e! editor de
men>s mostrado en !a 0iura -.1, Lue
se abre con .ools6enu $ditor o
c!icando en e! botn corres#ondiente
de !a barra de 1erramientas.
Se !!ama tNtulo a cada e!emento
Lue a#arece en !a barra de men>s "
lNnea o Ntem a cada e!emento Lue
a#arece a! des#!earse un tFtu!o. Para
introducir un nuevo tFtu!o en !a barra
de men>s 1a" Lue de0inir e! nombre
con e! Lue se Luiere Lue a#areBca en !a
ca(a de te@to Caption de !a 0iura -.,.
Si se desea acceder a dic1o tFtu!o
mediante tec!ado ?Alt+letraA, !a !etra
Lue se desea uti!iBar deber ir
#recedida #or e! carcter ?]A. Ddems, " a! iua! Lue todos !os contro!es de Visual Basic,
conviene
Lue e! tFtu!o tena un no!*re ?ca(a de te@to #ameA #ara Lue se #ueda acceder a /! desde
#rorama.
=os nombres de !os tFtu!os de !os men>s sue!en comenBar #or !as !etras mnu, como #or
e(em#!o
!nuFile, !nuDdit o !nuAel".
En !a 0iura -., !a ca(a de te@to =nde% 1ace re0erencia a !a #osibi!idad de crear arra3s de
!en/s. Se #uede de0inir tambi/n un shortcut en !a ca(a de te@to corres#ondiente. En esta
0iura
a#arecen cuatro chec0Buttons ?Dna*led, +hec8ed, %isi*le " EindoFListA con !os Lue se
#ueden
es#eci0icar a!unas #ro#iedades inicia!es de! men>, como #or e(em#!o Lue est/ activado o
Lue sea
visib!e.
)iura -.,. De0inicin de men>s con enu $ditor.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 56
Se #ueden introducir items subordinados a un tNtulo #or
medio de !a flecha hacia la iz0uierda. Para e!!o basta de0inir!os
de! modo 1abitua! " !ueo c!icar sobre dic1a 0!ec1a. E! resu!tado
es Lue a#arecen unos #untos a !a iBLuierda de! ca#tion
corres#ondiente. Por e(em#!o, en e! men> de0inido en !a 0iura
-.,, $%it es una !Fnea subordinada de! men> 5ile, mientras Lue
Ondo, :epeat, Cut, Cop1 " Paste son items subordinados de!
men> $dit. En este >!timo caso se 1a introducido una !Fnea de
se#aracin entre :epeat " CutV #ara e!!o basta introducir un te!
ms cu"o caption sea e! carcter !enos ?NA.
=a 0iura -.- muestra e! resu!tado de e(ecutar !a a#!icacin cu"os men>s estn de0inidos en
e!
enu $ditor de !a 0iura -.,. +bs/rvese !a !Fnea 1oriBonta! de se#aracin, !os s1ortcuts "
!as !etras
subra"adas #ara #oder abrir e! men> desde tec!ado.
8es#ecto a !os nombres de !os items, !o 1abitua! es seuir !a nomenc!atura Lue "a se
muestra
en !a 0iura -., #ara Ondo6 #rimero se #onen !as tres !etras mnu, " des#u/s !os nombres de!
tFtu!o "
de! Ftem comenBando #or ma">scu!a6 mnu$ditOndo. Caso Lue 1a"a men>s en cascada, se
#onen
!os distintos nombres siuiendo estas mismas normas. De esta 0orma siem#re Lueda c!aro a
#artir
de! nombre a Lu/ e!emento de! men> se est 1aciendo re0erencia.
=a 0iura -., es bastante autoNe@#!icativa res#ecto a cmo se debe #roceder #ara estructurar
un men>, a'adiendo, borrando o cambiando de #osicin !os distintos e!ementos. De 0orma
resumida, se #ueden estab!ecer !as siuientes normas enera!es6
1. Para insertar un tFtu!o o Ftem basta se!eccionar !a !Fnea #or encima de !a cua! se Luiere
insertar
" c!icar en e! botn =nsert. Para a'adir un nuevo Ftem a! 0ina! de !a !ista se se!ecciona e!
>!timo
e!emento introducido " se c!ica en e! botn #e%t. Para borrar un e!emento, se se!ecciona "
se
c!ica en e! botn 7elete.
2. Se #uede cambiar de #osicin un tFtu!o o Ftem se!eccionndo!o " c!icando en !os botones
Lue
muestran !as 0!ec1as 1acia arriba " 1acia aba(o. Para convertir un tFtu!o en Ftem o #ara
cambiar
e! nive! de un Ftem se se!ecciona " se uti!iBan !as 0!ec1as 1acia !a derec1a " 1acia !a
iBLuierda.
Conviene recordar Lue !os nombres de !os items ?#or e(em#!o !nuDdit+o"3A deben estar
siem#re de acuerdo con su #osicin, se>n !as normas e@#!icadas anteriormente.
1.- AXADIR CDIGO A LOS MENWS
=os items de !os men>s ad!iten un /nico evento6 e! evento clic0, Lue consiste en ser
se!eccionados
#or medio de! ratn o de! tec!ado. Para a'adir e! cdio corres#ondiente basta e!eir en e!
men>,
estando en modo dise'o, e! Ftem corres#ondiente #ara Lue se abra !a ventana de cdio en
e!
#rocedimiento !iado a ese evento. 7ambi/n #uede buscarse directamente e! ob(eto " e!
evento
corres#ondiente en !as !istas des#!eab!es de !a ventana de cdio.
En ocasiones 1abr Lue cambiar !as #ro#iedades chec0ed; active " visible desde !os
#rocedimientos. D estas #ro#iedades se accede de! modo 1abitua!, con e! nombre de! Ftem "
e!
o#erador #unto ?.A
1./ ARRA"S DE MENWS
De !a misma manera Lue #ueden de0inirse arra"s de contro!es, tambi/n #ueden de0inirse
arra"s de
items ?" de tFtu!osA en un men>. =a venta(a de de0inir arra"s de items es Lue *asta definir
un /nico
)iura -.-. &en> Edit senci!!o.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 57
"rocedi!iento Lue se 1aa caro de! evento clic0 de todos !os items de! arra". Este
#rocedimiento
recibe como #armetro !a variab!e entera =nde%, Lue indica Lue Ftem de! arra" 1a sido
se!eccionado
#or e! usuario. Dentro de este #rocedimiento se #odr uti!iBar #or e(em#!o !a sentencia
+elect Case
#ara tratar de 0orma adecuada cada uno de !os casos.
1.1 E:EMPLO: MENW PARA DETERMINAR LAS CARACTERYSTICAS DE UN TEOTO
=a 0iura -.. muestra un
0ormu!ario Lue contiene una ca(a
de te@to con una 0rase ?W%isual
Basic es el lengua#e de
"rogra!acin 0ue hace !s fcil
el desarrollar a"licaciones "ara
EindoFs :5XA a !a Lue se #uede
dar 0ormato desde e! men> .e%t.
E! men> .e%t tiene tres submen>s6
5ont, +i>e " +t1le. E! men> 5ile
s!o tiene !a o#cin $%it, Lue
termina !a e(ecucin.
E! subNmen> 5ont tiene tres
o#ciones6 Arial, Courier #e" "
.imes #e" :oman. E! subNmen>
+i>e tiene - o#ciones6 14, 11, 12,
1*, " 1,. E! subNmen> +t1le tiene 2
o#ciones6 Bold e =talic. =os ti#os
de !etra " !os tama'os deben actuar
como !os C"tion Buttons6 s!o una
o#cin #uede estar se!eccionada
#ara e! te@to de !a ca(a. Sin embaro, !os esti!os Bold e =talic act>an como +hec8ed Bo;es6
e! te@to
#uede ser a !a veB Bold e =talic, " #uede no ser ninuna de !as dos cosas.
Para !os tama'os de !etra se debe uti!iBar un arra" de men>s con cinco e!ementos
?#ro#iedad
=nde% de 4 a ,A. Se de(a a! usuario Lue #ona !os nombres Lue desee a !os contro!es de !a
0iura -..,
o Lue uti!ice !os de! cdio de! #rorama Lue se muestra a continuacin. Ntese Lue con !os
men>s
Lue se com#ortan como C"tion Buttons !a #ro#iedad Chec0ed se #one a 5alse en todas !as
o#ciones
antes de #oner a .rue !a Lue e! usuario 1a e!eido. Con e! men> Lue se com#orta como
+hec8ed
Bo; sim#!emente se cambia !a #ro#iedad Chec0ed de .rue a 5alse o viceversa, cuando e!
usuario !a
e!ie. E! cdio se muestra a continuacin6
Option Explicit
Private Sub Form_Load()
txtBox.Text = "Visual Basic es el lenguaje de programacin " & _
"que hace ms fcil el desarrollar aplicaciones para Windows 95"
txtBox.Font.Name = "Arial"
mnuTextFontArial.Checked = True
txtBox.Font.Size = 10
mnuTextSizeA(0).Checked = True
txtBox.Font.Bold = False
txtBox.Font.Italic = False
End Sub
)iura -... Ca(a de te@to con 0ormatos desde men>.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 59
Private Sub mnuFileExit_Click()
End
End Sub
Private Sub mnuTextFontArial_Click()
mnuTextFontCou.Checked = False
mnuTextFontTimes.Checked = False
txtBox.Font.Name = "Arial"
mnuTextFontArial.Checked = True
End Sub
Private Sub mnuTextFontCou_Click()
mnuTextFontArial.Checked = False
mnuTextFontTimes.Checked = False
txtBox.Font.Name = "Courier New"
mnuTextFontCou.Checked = True
End Sub
Private Sub mnuTextFontTimes_Click()
mnuTextFontArial.Checked = False
mnuTextFontCou.Checked = False
txtBox.Font.Name = "Times New Roman"
mnuTextFontTimes.Checked = True
End Sub
Private Sub mnuTextSizeA_Click(Index As Integer)
Dim i As Integer
For i = 0 To 4
mnuTextSizeA(i).Checked = False
Next i
Select Case Index
Case 0
txtBox.Font.Size = 10
Case 1
txtBox.Font.Size = 11
Case 2
txtBox.Font.Size = 12
Case 3
txtBox.Font.Size = 13
Case 4
txtBox.Font.Size = 14
End Select
mnuTextSizeA(Index).Checked = True
End Sub
Private Sub mnuTextStyleBold_Click()
txtBox.Font.Bold = Not txtBox.Font.Bold
mnuTextStyleBold.Checked = Not mnuTextStyleBold.Checked
End Sub
Private Sub mnuTextStyleItalic_Click()
txtBox.Font.Italic = Not txtBox.Font.Italic
mnuTextStyleItalic.Checked = Not mnuTextStyleItalic.Checked
End Sub
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 5:
2. GRG*ICOS EN !ISUAL 7ASIC /.8
Visual Basic 4.0, adems de 1acer 0ci! !a construccin de inter0aces r0icas de usuario,
tiene
tambi/n randes #osibi!idades r0icas en !o Lue se re0iere a dibu(o de !Fneas " 0ormas
eom/tricas,
asF como en !o re0erente a !a introduccin de r0icos *it!a" o vectoriales rea!iBados con
otras
a#!icaciones. En este ca#Ftu!o se #resentarn brevemente !as #osibi!idades r0icas ms
im#ortantes
de Visual Basic 4.0.
2.1 TRATAMIENTO DEL COLOR
Dntes de ver cmo se dibu(a en Visual Basic 4.0 se ver cmo se de0inen !os co!ores. D!
iua! Lue
en tantas a#!icaciones in0ormticas, !os co!ores de Visual Basic se de0inen #or medio de !as
com#onentes 0undamenta!es 893 ?:ed, Areen and BlueA. =a intensidad de cada co!or
0undamenta!
se de0ine con un b1te, es decir con un n>mero entero entre 4 " 2--. Se uti!iBan #ues tres
b"tes #ara
de0inir !os tres co!ores. Visual Basic 4.0 uti!iBa un entero long ?*2 bits, , b"tesA #ara
uardar un
co!or, !o cua! Luiere decir Lue e@iste un b"te adiciona! donde se #odr uardar a!una otra
in0ormacin.
2.1.1 Repre%en,acin 6eBadeci+al de lo% colore%
Para !os n>meros enteros entre 4 " 2-- se uti!iBan dos
dFitos 1e@adecima!es. Con esta notacin e! cero es e!
W44X " e! 2-- e! W))X. E! n>mero Lue indica e! co!or va
#recedido #or e! carcter W]X " !a !etra W5X. DsF, e!
co!or verde se de0ine en !a 0orma6 ]544))44.
Visual Basic dis#one tambi/n de nombres #ara
!os co!ores 0undamenta!es " !os Lue son combinacin
de !os co!ores 0undamenta!es, se>n #uede verse en !a
7ab!a ..1.
2.1.# Acce%o a lo% colore% del %i%,e+a
E! cuarto b"te ?en e! entero long Lue contiene e! co!orA #uede uti!iBarse #ara 1acer
re0erencia a !os
colores del sistema. =os co!ores de! sistema son aLue!!os co!ores con !os Lue !indo"s ()
re#resenta !as ventanas " sus bordes, !as barras de des#!aBamiento, etc. Dic1os co!ores se
e!ien en
e! #ane! de contro! 7ispla16Appearance, " Visual Basic #ermite acceder a e!!os a trav/s de
su
nombre o de su va!or 1e@adecima!, Lue em#ieBa #or W]5HX " uti!iBa e! cuarto b"te. =a
7ab!a ..2
muestra a!unos de estos va!ores. Para una descri#cin com#!eta buscar Color Constants
en e! -elp
de Visual Basic.
No+.re Cdi;o 9EO Color
vb3!acK ]5444444 Nero
vb8ed ]5))4444 8o(o.
vb9reen ]544))44 2erde.
vbRe!!o% ]5))))44 Dmari!!o.
vb3!ue ]54444)) DBu!.
vb&aenta ]5))44)) &aenta.
vbC"an ]5))))44 C"an.
vb$1ite ]5)))))) 3!anco.
7ab!a ..1. Nombres de co!ores.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6(
No+.re !alor De%cripcin
vbScro!!3ars ]5H4444444 Scro!! bar co!or.
vbDesKto# ]5H4444441 DesKto# co!or.
vbDctive7it!e3ar ]5H4444442 Co!or o0 t1e tit!e bar 0or t1e active %indo%.
vbInactive7it!e3ar ]5H444444* Co!or o0 t1e tit!e bar 0or t1e inactive %indo%.
vb&enu3ar ]5H444444, &enu bacKround co!or.
vb$indo%3acKround ]5H444444- $indo% bacKround co!or.
vb$indo%)rame ]5H444444. $indo% 0rame co!or.
vb&enu7e@t ]5H4444447 Co!or o0 te@t on menus.
vb$indo%7e@t ]5H444444H Co!or o0 te@t in %indo%s.
vb7it!e3ar7e@t ]5H4444449 Co!or o0 te@t in ca#tion, siBe bo@, and scro!! arro%.
... ... ...
7ab!a ..2. Co!ores de! sistema.
2.1.- *)ncin RG7
Esta 0uncin devue!ve un n>mero Lue re#resenta un co!or a #artir de tres arumentos
enteros entre 4
" 2--, Lue son sus com#onentes 893. Como e(em#!o de uso6
form1.BackColor = RGB(127, 127, 64)
Si a!uno de !os arumentos tiene un va!or ma"or Lue 2--, se toma como 2--.
2.1./ Pale,a de colore%
E!eir adecuadamente un co!or a #artir de sus com#onentes
893 no es una tarea 0ci!. Por eso Visual Basic
#ro#orciona una #a!eta de ., co!ores #rede0inidos, 1. de !os
cua!es #ueden ser de0inidos a medida #or e! usuario. =a
0iura ..1 muestra !a #a!eta de co!ores, Lue a#arece con
Vie"6Color Palette o a! c!icar en una e! #eLue'o trinu!o
Lue a#arece en cua!Luier #ro#iedad de co!or en !a ventana
de Properties.
=a 0iura ..2 muestra e! cuadro de di!oo Lue se abre
a! #u!sar e! botn 7efine Colors... en !a #arte in0erior dc1a.
de !a 0iura ..1. Para e!eir un co!or se #ueden introducir
directamente !os va!ores 893, #ero tambi/n se #uede c!icar
en e! ma#a de co!ores de !a #arte su#erior iBda. " !ueo
mover e! cursor de !a #arte su#erior dc1a. )ina!mente,
c!icando en e! botn Add Color. E! co!or se!eccionado se
a'ade en !a #arte in0erior de !a #a!eta de co!ores ?0iura ..1A.
Por su#uesto es necesario tener en cuenta e! n>mero
de co!ores so#ortado #or !a tar(eta r0ica de! PC en e! Lue
se est/ traba(ando. =o ms 0recuente es Lue !os PCs est/n
con0iurados #ara so#ortar 2-. co!ores ?H bits #or #i@e!A,
.-.-*. co!ores ?1. bits #or #i@e!A o 1..777.21. co!ores ?2,
bits #or #i@e!A. Si !a tar(eta r0ica so#orta .-.-*. co!ores se
)iura ..1. Pa!eta de co!ores.
)iura ..2. Creacin de co!ores a medida.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6)
e!ie e! co!or ms cercano a! Lue e! usuario 1a Luerido re#resentar con !a 0uncin 893, #or
e(em#!o. Si !a tar(eta r0ica so#orta s!o 2-. co!ores se uti!iBa e! dithering, Lue consiste en
meBc!ar
#i@e!s de distintos co!ores con ob(eto de obtener un e0ecto !o ms #arecido #osib!e a! co!or
so!icitado.
E! e(em#!o 1., ?Co!ores 893A mostrado en e! Ca#Ftu!o 1 de este manua! es un buen
e(em#!o
de !a uti!iBacin de !os co!ores en Visual Basic.
2.# *ORMATOS GRG*ICOS
En un 0ormu!ario de Visual Basic N" en !os contro!es ima&e " pictureN es #osib!e insertar
r0icos,
tanto de ti#o *it!a" ?!os #roducidos #or a#!icaciones como Paint, Paintbrush, Paint +hop
Pro,
etc.A, como de ti#o vectorial ?!os #roducidos #or !as 1erramientas r0icas de !ord "
Po"erPointA.
Visual Basic 4.0 admite tres 0ormatos de 0ic1eros r0icos6 !os 0ic1eros 4.bmp " 4.ico #ara
!os
r0icos de ti#o *it!a" " !os 0ic1eros 4."mf ?EindoFs eta FileA #ara !os r0icos de ti#o
vectoria!.
=os 0ic1eros 4.ico son 0ic1eros *it!a" de #eLue'o tama'o ?*2 #or *2A destinados a
contener iconos.
Si se desea insertar 0ic1eros r0icos Lue est/n en otros 0ormatos, 1abr Lue convertir!os
#reviamente a uno de estos dos 0ormatos usando e! #rorama adecuado.
2.- CONTROLES GRG*ICOS
Visual Basic dis#one de varios contro!es con !os Lue insertar r0icos en un 0ormu!ario.
D!unos
tienen ms #osibi!idades Lue otros " es necesario conocer!os bien. D continuacin se vern
!os
contro!es line, shape, ima&e " picture.
2.-.1 Con,rol line
Es e! contro! r0ico ms e!ementa!, "a Lue carece de #ro#iedades como te;t, ca"tion "
value.
Ddems no reconoce nin>n evento, #or !o Lue su misin es casi e@c!usivamente
decorativa.
E! contro! line #ermite dibu(ar !Fneas en un formulario o en un contro! picture. =as
#ro#iedades ms im#ortantes son !as coordenadas de !os #untos e@tremos ?C,, P,, CF e
PFA, !a
anc1ura en #i@e!s ?Border!idthA, e! esti!o de !a !Fnea ?Border+t1leA Ncontinua, a traBos,
etc.N Lue
s!o est activo cuando !a anc1ura es 1 #i@e!, e! co!or ?BorderColorA " e! nombre ?#ameA.
=a !Fnea
#uede estar visib!e o no ?VisibleA, " e@iste !a #ro#iedad =nde%, Lue #ermite crear arra3s de
!Fneas.
2.-.# Con,rol %6ape
Este contro! es en muc1os as#ectos simi!ar a! contro! line6 tam#oco tiene !as #ro#iedades
te;t,
ca"tion " value, ni reconoce eventos. Se di0erencia en Lue admite 0ormas eom/tricas ms
com#!e(as, Lue vienen de0inidas #or !a #ro#iedad shape, Lue admite !os va!ores siuientes6
cuadrado
?+<uareA, rectnu!o ?:ectan&leA, cFrcu!o ?CircleA, e!i#se ?9valA, cuadrado redondeado
?:ounded
+<uareA " rectnu!o redondeado ?:ounded :ectan&leA.
Ddems de !as #ro#iedades corres#ondientes a! tama'o " #osicin, !as #ro#iedades ms
interesantes de! contro! shape son !as siuientes6 Bac8+olor, Bac8Gt3le, Border+olor,
BorderGt3le,
BorderEidth, Fill+olor, FillGt3le, <raFode.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6-
2.-.- E(e+plo 2.1: U%o de lo% con,role% line ' %6ape
=a 0iura ..* muestra un 0ormu!ario en e! Lue se 1an
dibu(ado tres contro!es 8ine " dos contro!es +hape.
=as tres !Fneas se 1an dibu(ado con !a #ro#iedad
Border!idthQ,, #ues si no !a #ro#iedad
Border+t1le no surte e0ecto. =a #ro#iedad
Border+t1le es -?<ash #ara !a seunda !Fnea " .?<ot
#ara !a tercera.
Des#u/s se 1an dibu(ado dos contro!es shape
!!amados shp:ect " shp::ec, cu"as #ro#iedades
Gha"e estn res#ectivamente a (?Rectangle " a
&?Rounded Rectangle. =a #ro#iedad Bac0Color est
en amari!!o #ara shp:ect " en b!anco #ara shp::ect.
En ambos casos Bac0+t1le est en )?C"a0ue, #ues si no e! co!or de 0ondo no surte e0ecto.
=a
#ro#iedad 5illColor ?Lue determina e! co!or de !as !Fneas de ra"adoA est en ro(o #ara
shp:ect " en
nero #ara shp::ect. )ina!mente, !a #ro#iedad 5ill+t1le Lue determina e! ti#o de ra"ado
est en
5?<oFnFard <iagonal #ara shp:ect " en 6?+ross #ara shp::ect. Como !a #ro#iedad
7ra"ode
est en ).?+o"3 $en #ara ambos contro!es, shp::ect se su#er#one sobre shp:ect #orLue
1a sido
creada sobre /! con #osterioridad.
2.-./ Con,rol i+a;e
E! contro! ima&e es un contenedor de r0icos bitmap o metafile. Este contro! admite "a
una am#!ia
co!eccin de eventos, #or !o Lue es "a un contro! con un #a#e! muc1o ms activo Lue !os
anteriores.
=as #ro#iedades ms #ro#ias e im#ortantes de este contro! son !as #ro#iedades picture "
stretch. =a #ro#iedad picture sirve #ara re!acionar este contro! con e! 0ic1ero Lue contiene
e! r0ico
Lue se desea re#resentar, a trav/s de! cuadro de di!oo 8oad Picture Lue #ermite e!eir e!
0ic1ero a
insertar. E! 0ic1ero deber ser de uno de !os tres ti#os admitidos. Se>n e! 0ic1ero e!eido,
!a
#ro#iedad picture tendr uno de !os tres va!ores siuientes6 icon, *it!a" o !etafile.
=a #ro#iedad stretch indica cmo se com#orta e! contro! picture a! introducir en /! e!
contenido de! 0ic1ero r0ico. Por de0ecto, cuando se crea un contro! ima&e arrastrando en
e!
0ormu!ario con e! ratn esta #ro#iedad tiene e! va!or false. Estando !a #ro#iedad stretch en
false e!
tama'o de! contro! se a(usta a! tama'o de! *it!a" o de! metafile Lue se introduce en dic1o
contro!.
Por e! contrario, si dic1a #ro#iedad est en true e! r0ico Lue #roviene de! 0ic1ero se
ada#ta a!
tama'o de contro!.
Se #uede tratar de modi0icar e! tama'o de! r0ico en modo de dise'o ?con e! ratn o
cambiando !as #ro#iedades de tama'o de! contro!A. Si e! r0ico es un *it!a" " !a #ro#iedad
stretch
est en false e! tama'o de !a imaen no cambia aunLue cambie e! de! contro! ?Luedando en
!a
esLuina su#erior iBLuierda si e! contro! se 1ace ms rande, o Luedando #arcia!mente ocu!ta
si
a!una de !as dimensiones de! contro! se 1ace ms #eLue'a Lue !a de! *it!a". Si !a
#ro#iedad
stretch est en true e! *it!a" se ada#ta a! tama'o de! contro! " su tama'o se cambia con e!
de /ste.
=os r0icos !etafile siem#re se #ueden cambiar de tama'o en modo de dise'o, tanto si
stretch est
en true como si est en false.
E@isten otras 0ormas de carar un r0ico en un contro! ima&e, adems de uti!iBar !a
#ro#iedad
picture en modo de dise'o, como se 1a visto anteriormente. Cna seunda 0orma, uti!iBab!e
tambi/n
)iura ..*. Contro!es 8ine " +hape.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6.
en modo de dise'o, es 1acer Cop1 " Paste a #artir de un r0ico contenido en otra
a#!icacin como
Paint +hop Pro o $%cel.
En modo de e(ecucin se #uede co#iar e! contenido de un contro! ima&e en otro contro! de!
mismo ti#o #or medio de una sentencia de asinacin en !a 0orma6
imgCuadro.picture = imgCaja.picture
" se #uede tambi/n carar una imaen de un 0ic1ero uti!iBando e! #rocedimiento
8oadPicture, #or
e(em#!o en !a 0orma siuiente ?1abr Lue estar seuro de Lue e@iste e! 0ic1eroA6
imgCuadro.picture = LoadPicture("d:\graficos\pc.wmf")
DunLue e! contro! ima&e admite a!unos eventos ?+lic8, <*l+lic8, <rag<ro", <ragCver,
ouse=", ouse<oFn, ouseoveA, sus #osibi!idades son tambi/n !imitadas. Por !a
0orma en Lue
se dibu(a, e! contro! ima&e no #uede estar sobre otro contro!, como #or e(em#!o un botn
?ver !os
la3ers, ms ade!ante en este ca#Ftu!oA. 7am#oco #uede contener otros contro!es en su
interior6 s!o
#uede contener r0icos. )ina!mente, este contro! no #uede obtener e! focus " #or tanto no
#uede
res#onder a acciones desde e! tec!ado. E! contro! picture, Lue se ver a continuacin,
resue!ve estas
!imitaciones.
2.-.1 Con,rol Pic,)re 7oB
Este es e! contro! r0ico ms #otente " enera! de Visual Basic 4.0. Este contro! es una
es#ecie de
0ormu!ario reducido, #ues #uede contener imenes " otros ti#os de contro!es ta!es como
botones,
s1a#es, !abe!s, ca(as de te@to, etc.
Con res#ecto a !os
*it!a"s, e! contro! picture se
com#orta de modo di0erente
Lue e! contro! ima&e. E!
contro! picture no tiene
#ro#iedad stretch, con !o cua!
a! carar un icono o un
bitma# siem#re a#arecen con
su tama'o natura! ?ta! " como
se #uede observar en !a 0iura
..,A. Sin embaro e! contro!
picture tiene !a #ro#iedad
Auto+i>e, Lue #or de0ecto est
en false. Cuando se cara un
*it!a" con Auto+i>e en false
e! r0ico a#arece en !a
esLuina su#erior iBLuierda de!
contro!V sin embaro, si
Auto+i>e est en true e!
contro! picture ada#ta su tama'o a! de! *it!a" Lue es carado. =a 0iura .., muestra !os
resu!tados
de introducir un icono en un contro! ima&e ?+tretch6 false " trueA " en un contro! picture
?Auto+i>e6
false " trueA.
=os r0icos !etafile se com#ortan de un modo di0erente, se>n #uede verse en !a 0iura
..-.
En e! contro! ima&e se caran con su verdadero tama'o si !a #ro#iedad stretch es false,
mientras
Lue se ada#tan a! tama'o de! contro! si dic1a #ro#iedad es true. Con e! contro! picture se
ada#tan a!
)iure ..,. Com#aracin entre ima&e " picture con *it!a"s.
)iure ..-. Com#aracin entre ima&e " picture con !etafiles.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6&
tama'o de! contro! si Auto+i>e es false, mientras Lue se caran con su #ro#io tama'o si es
Auto+i>e
es true.
En e! contro! picture ?a! iua! Lue en !os 0ormu!ariosA son im#ortantes !as cuatro
#ro#iedades
re!acionadas con e! co!or6 Bac8+olor, Fore+olor, Fill+olor " FillGt3le. =a #ro#iedad
Bac0Color
contro!a e! co!or de 0ondo de! contro!. =a #ro#iedad 5oreColor contro!a e! co!or de! te@to
Lue se
escribe en e! contro! ?con e! m/todo print, #or e(em#!o, como !ueo se verA. =as
#ro#iedades
5illColor " 5ill+t1le no a0ectan directamente a! contro! sino a !os e!ementos r0icos Lue se
dibu(en
sobre /! con m/todos ta!es como line " circle, Lue se vern a continuacin. 5ill+t1le
determina e!
ti#o de re!!eno o "attern ?!Fneas 1oriBonta!es, vertica!es, inc!inadas, cruBadas, ...A, mientras
Lue
5illColor determina e! co!or de estas !Fneas de! re!!eno.
2./ M>TODOS GRG*ICOS
7anto !os formularios como !os contro!es picture #ueden a!berar otros ti#os de contro!es.
Ddems
es #osib!e escribir te@to " dibu(ar directamente sobre e!!os #or medio de ciertos mtodosB de
Visual
Basic. Por de0ecto estos m/todos act>an sobre e! formulario activo. Si se desea Lue act>en
sobre un
contro! picture 1a" Lue #receder!os #or e! nombre de! contro! " e! o#erador #unto.
2./.1 M3,odo prin,
En tiem#o de e(ecucin se #uede escribir te@to en un formulario o en un contro! picture #or
medio
de! m/todo print. =a 0orma enera! de este m/todo es !a siuiente6
objeto.print {spc(n)|tab(n)} expresion poschar
donde spc?n@ es o#ciona! " sirve #ara insertar n caracteres en !a sa!idaV tab?n@ es tambi/n
o#ciona! "
sirve #ara #osicionar !a sa!ida en una #osicin abso!uta determinada #or n con un tabu!ador.
Si tab
se uti!iBa sin arumentos !!eva a! comienBo de !a siuiente re&i'n de salida4V e;"resion
re#resenta
cua!Luier e@#resin cu"o resu!tado sea un n>mero o una cadena de caracteres. $oschar
indica dnde
se im#rimir e! siuiente carcter. Si es un #unto " coma ?VA !a im#resin se 1ace a
continuacin de!
>!timo carcter im#resoV si es un tab?n@ o un tab tiene e! e0ecto antes descritoV si se omite,
!a
im#resin comienBa en una nueva !Fnea.
E! co!or, !a 0uente " e! tama'o de! te@to se toman de !as corres#ondientes #ro#iedades de!
0ormu!ario o contro! picture.
2./.# Di.)(o de p)n,o%: +3,odo P%e,
E! m/todo pset sirve #ara dibu(ar #untos en un 0ormu!ario o en un contro! picture. Su 0orma
enera!
es !a siuiente6
object.PSet Step (x, y), color
donde6
object es o#ciona! " re#resenta e! ob(eto ?form o pictureA en e! Lue se va a dibu(ar e! #unto.
Si
se omite, e! #unto se dibu(a en e! 0ormu!ario activo ?e! Lue tiene e! focusA.
* =os mtodos son #rocedimientos Lue Visual Basic o0rece "a #roramados. E! usuario s!o tiene Lue
!!amar!os
#asndo!es !os arumentos a#ro#iados.
, En Visual Basic se comienBa una rein de sa!ida cada 1, caracteres si se uti!iBa un ti#o de !etra de anc1ura
constante. Con otros ti#os de !etra esta medida es s!o a#ro@imada.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 65
+tep es o#ciona!. Si se introduce !as coordenadas Lue !e siuen son re!ativas res#ecto a !as
#ro#iedades CurrentC " CurrentP. D! dibu(ar un #unto, estas #ro#iedades se actua!iBan
a !as coordenadas de dic1o #unto.
?%; 1@ son !as coordenadas abso!utas o re!ativas de! #unto a dibu(ar ?e@#resiones, variab!es o
constantes singleA. 7anto !as coordenadas como !os #ar/ntesis son ob!iatorios. =as
unidades de#enden de !a #ro#iedad +caleode de! ob(eto en Lue se dibu(a.
Color es o#ciona! " es un nombre de co!or ?vb:ed, vbBlue, etc.A o un lon& conteniendo e!
cdio de co!or 1e@adecima! ?#uede ser e! va!or de retorno de !a 0uncin :ABA. Si se
omite se uti!iBa !a #ro#iedad 5oreColor de! ob(eto en e! Lue se dibu(a.
E! tama'o de! #unto viene determinado #or !a #ro#iedad 7ra"!idth de! ob(eto en Lue se
dibu(a. Si e! tama'o es ma"or Lue uno, e! #unto se dibu(a centrado en !as coordenadas
suministradas
a pset.
2./.- Di.)(o de lJnea% ' rec,Hn;)lo%: +3,odo line
E! m/todo line dibu(a !Fneas " Nen ciertas condicionesN ca(as rectanu!ares de !ados
1oriBonta!es "
vertica!es. Su 0orma enera! es !a siuiente6
object.Line Step (x1, y1) - Step (x2, y2), color, BF
donde object, step " color tienen e! mismo sini0icado Lue en pset, "
?%,; 1,@ son o#ciona!es " son !as coordenadas de! #unto inicia! de !a !Fnea. Si se omiten !a
!Fnea
comienBa en !as coordenadas de0inidas #or CurrentC " CurrentP.
?%F; 1F@ son ob!iados " contienen !as coordenadas de! #unto 0ina! de !a !Fnea.
B es un carcter o#ciona!. Si se inc!u"e se dibu(a un rectnu!o ?Bo;A con !os #untos dados
como e@tremos de una de sus diaona!es.
5 es tambi/n un carcter o#ciona!, Lue s!o se #uede inc!uir si se 1a inc!uido B. Si se
inc!u"e, !a ca(a rectanu!ar se re!!ena ?FillA con e! mismo co!or de! contorno. Si se omite
!a ca(a se re!!ena con !as #ro#iedades 5illColor " 5ill+t1le de! ob(eto en e! Lue se
dibu(a.
Des#u/s de e(ecutarse este m/todo !as
#ro#iedades CurrentC " CurrentP tienen e! va!or de!
#unto 0ina! de !a !Fnea. Es necesario introducir e!
carcter ?NA, aunLue se omita e! #rimero de !os #untos
Lue de0inen !a !Fnea.
=as #ro#iedades 7ra"!idth " 7ra"+t1le
determinan cmo se dibu(an !as !Fneas rectas o curvas
en Visual Basic. &s en concreto, !a #ro#iedad
7ra"!idth determina e! rosor en #i@e!s, mientras
Lue 7ra"+t1le determina e! ti#o de !Fnea. =a 7ab!a ..*
considera !os #osib!es va!ores de !a #ro#iedad
7ra"+t1le.
=os ti#os de ra"a discontinuo no #ermiten Lue e! rosor sea ma"or Lue 1 #i@e!. Si e! rosor
es
su#erior, !a !Fnea se dibu(a de modo continuo.
!alor E%,ilo de lJnea
4 continua ?va!or #or de0ectoA
1 traBos ?continua si %U1A
2 #untos ?continua si %U1A
* ra"aN#to ?continua si %U1A
, ra"aN#toN#to ?continua si %U1A
- trans#arente ?continua si %U1A
. continua interna
7ab!a ..*. 2a!ores de 7ra"+t1le.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 66
2././ Di.)(o de circ)n5erencia% arco% ' elip%e%: +3,odo circle
Este m/todo #ermite dibu(ar circun0erencias, e!i#ses " arcos. Su 0orma enera! es !a
siuiente6
object.Circle Step (x, y), radius, color, start, end, aspect
donde object, step " color tienen e! mismo sini0icado Lue en pset " line, "
?%; 1@ son ob!iatorias, " contienen !as coordenadas de! centro de !a circun0erencia.
:adius es ob!iatoria " de0ine e! radio de !a circun0erencia.
+tart; end son o#ciona!es, " #ermiten de0inir arcos #or medio de! nu!o inicia! ?startA "
0ina!
?endA. =os nu!os se miden siem#re en radianes " en sentido contrario a !as au(as
de! re!o(. Sus va!ores deben estar entre N2 " 2. En #rinci#io se dibu(a so!amente e!
arco, #ero si uno o ambos va!ores son neativos se tratan como #ositivos, #ero se
dibu(a una !Fnea Lue une e! centro de !a circun0erencia con e! orien o e! e@tremo de!
arco.
Aspect es tambi/n o#ciona! " se uti!iBa #ara dibu(ar e!i#ses. Es !a re!acin entre e! dimetro
vertica! " e! 1oriBonta!. E! va!or #or de0ecto es 1.4, !o Lue corres#onde a una
circun0erencia. Cuando aspect es distinto de 1.4, e! #armetro radius de0ine e! ma"or
de !os dos dimetros.
S!o !as 0iuras cerradas ?no !os arcos sin !Fneas Lue unan !os e@tremos con e! centroA
#ueden
ser re!!enadas con e! co!or determinado #or !as #ro#iedades 5illColor " 5ill+t1le de! ob(eto
en Lue
se dibu(aA. E! rosor " esti!o de !as !Fneas se determina con !as #ro#iedades 7ra"!idth "
7ra"+t1le. Des#u/s de e(ecutarse este m/todo !as #ro#iedades CurrentC " CurrentP
tienen e! va!or
de! centro de !a circun0erencia. Si se omite a!>n arumento ?e@ce#to !os Lue van a! 0ina!A,
deben
res#etarse !as comas de se#aracin entre arumentos.
2./.1 O,ro% +3,odo% ;rH5ico%
E@isten a!unos otros m/todos r0icos de inter/s. Por e(em#!o, e! m/todo cls cu"a 0orma
enera! es
object.Cls
borra de! 0ormu!ario o contro! picture todos !os resu!tados de !os m/todos r0icos " de!
m/todo
print, a! mismo tiem#o Lue #one !as #ro#iedades CurrentC " CurrentP a cero. No a0ecta a
!os
r0icos introducidos en modo de dise'o ?#or e(em#!o con !a #ro#iedad pictureA. 7am#oco
se
borran con este m/todo e! te@to " r0icos Lue se 1a"an creado con !a #ro#iedad
Auto:edra" en
true, si dic1a #ro#iedad se #one a false antes de !!amar a! m/todo cls. De esta 0orma se
#ueden
rea!iBar borrados se!ectivos.
E! m/todo point devue!ve, como entero long, e! co!or ?893A de! #unto es#eci0icado en un
0ormu!ario o contro! PictureBo%. Su 0orma enera! es6
object.Point(x, y)
Si se desea, e! entero long devue!to #or point #uede convertirse a !a notacin 1e@adecima!
Lue
se usa #ara !os co!ores uti!iBando !a 0uncin he%.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 67
2.1 SISTEMAS DE COORDENADAS
Cn #unto de #articu!ar im#ortancia con Visual Basic es
e! Lue 1ace re0erencia a !a #osicin " tama'o de !os
0ormu!arios " de !os dems contro!es, asF como a !as
unidades en Lue se e@#resan " determinan.
Visual Basic 4.0 #ermite e!eir entre distintas
unidades, e inc!uso uti!iBar distintas unidades #ara
distintos e!ementos de !a a#!icacin. =as unidades se
es#eci0ican con !a #ro#iedad +caleode, Lue es #ro#ia de
!os 0ormu!arios " contro!es picture. =a 7ab!a ..,
es#eci0ica !os #osib!es va!ores de esta #ro#iedad. =a
unidad #or de0ecto es e! t"ip, Lue es !a vi/sima #arte de!
punto o pi%el.
En un 0ormu!ario !as #ro#iedades re!acionadas con !a esca!a " !as dimensiones, aru#adas
de
cuatro en cuatro, son !as siuientes6 ?top, left, hei&ht " "idthA " ?scale.op, scale8eft,
scale-ei&ht "
scale!idthA. Su sini0icado de e@#!ica a continuacin con a"uda de !a 0iura ....
En esta 0iura se muestra !a
"antalla " un for!ulario. =a
#osicin " dimensiones de!
0ormu!ario vienen dadas #or !as
#ro#iedades ?top, left, hei&ht "
"idthA. Para un 0ormu!ario, estas
#ro#iedades se de0inen siempre en
t"ips. +bs/rvese Lue se miden a
#artir de !a esLuina su#erior
iBLuierda.
Sin embaro, e! 0ormu!ario
#uede tener su #ro#io sistema de
coordenadas interno, de0inido #or
!as #ro#iedades ?scale.op, scale8eft, scale-ei&ht " scale!idthA, #ara !o cua! su #ro#iedad
+caleode debe estar #uesta a cero. =as #ro#iedades scale8eft " scale.op determinan !as
coordenadas de !a esLuina su#erior iBLuierda en e! #ro#io sistema de coordenadas, mientras
Lue
scale!idth " scale-ei&ht determinan su anc1ura " a!tura en dic1as coordenadas. En
rea!idad estas
#ro#iedades determinan indirectamente !a #osicin de! orien de coordenadas " !a esca!a "
orientacin de !os e(es. Si scale-ei&ht es #ositiva e! e(e de ordenadas va 1acia aba(o,
mientras Lue
si es neativa estar orientado 1acia arriba. E! e(e 1oriBonta! va 1acia !a derec1a si
scale!idth es
#ositiva, " 1acia !a iBLuierda si es neativa. =as cuatro #ro#iedades ?scale.op, scale8eft,
scale-ei&ht " scale!idthA se #ueden estab!ecer con(untamente con e! m/todo scale, como
se ver
en e! siuiente a#artado. S!o !os 0ormu!arios " !os contro!es pictureBo% #ueden tener !as
#ro#iedades scale.op, scale8eft, scale-ei&ht " scale!idth.
Si !as #ro#iedades ?top, left, hei&ht " "idthA no se a#!ican a un 0ormu!ario sino a un
contro!,
"a no es ob!iatorio medir!as en t"ips, sino Lue se miden en !as unidades determinadas #or
!a
#ro#iedad scaleode de! formulario o pictureBo% Lue !as contiene. Cuando estas
#ro#iedades se
uti!iBan sin ante#oner!es e! nombre de un ob(eto se a#!ican a! 0ormu!ario activo. Para Lue se
a#!iLuen a un ob(eto cua!Luiera basta ante#oner!es e! nombre de! ob(eto se#arado #or e!
o#erador
#unto ?.A.
!alor Unidade%
4 de0inidas #or e! usuario
1 t%i#s ?1,,4 #or #u!adaA
2 #untos ?72 #or #u!adaA
* #i@e!s
, caracteres ?124@2,4 t%i#sA
- #u!adas
. mi!Fmetros
7 centFmetros
7ab!a ..,. 2a!ores de +caleode.
#anta!!a
0orm
%idt1
1ei1t
!e0t
to#
?sca!e=e0t, sca!e7o#A
sca!e5ei1t
sca!e$idt1
)iura .... Posicin " tama'o de una ca(a PictureBo%.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 69
2.1.1 M3,odo Scale
E! m/todo +cale #ermite de0inir !as cuatro #ro#iedades ?scale.op, scale8eft, scale-ei&ht "
scale!idthA de un 0ormu!ario o pictureBo% simu!tneamente. Su 0orma enera! es6
object.Scale (x1, y1) - (x2, y2)
donde object es e! nombre de! contro! picture ?si se omite, e! m/todo se a#!ica a! 0ormu!ario
activoA.
=as coordenadas ?%,; 1,@ son !as coordenadas de! v/rtice su#erior iBLuierdo de! 0ormu!ario
o
pictureBo%, mientras Lue ?%F; 1F@ corres#onden a! v/rtice in0erior derec1o. Por e(em#!o, e!
siuiente
m/todo6
pctCaja.Scale (-100, 100) - (100, -100)
estab!ece unos e(es en e! centro de !a pictureBo%, con !os sentidos ordinarios, Lue varFan
entre N144
" 144. Este m/todo eLuiva!e estab!ecer !as cuatro #ro#iedades siuientes6
pctCaja.scaleTop = 100
pctCaja.scaleLeft = -100
pctCaja.scaleHeight = -200
pctCaja.scaleWidth = 200
2.2 E!ENTOS " PROPIEDADES RELACIONADAS CON GRG*ICOS
2.2.1 El e0en,o Pain,
E! evento Paint se e(ecuta cuando un ob(eto Nde ti#o form o pictureBo%N se 1ace visib!e. Su
0ina!idad es Lue e! resu!tado de !os mtodos &rMficos " de! m/todo print a#areBcan en e!
ob(eto
corres#ondiente. 5a" Lue tener en cuenta Lue si se introducen m/todos r0icos en e!
#rocedimiento
form/load su resu!tado no a#arece a! 1acerse visib!e e! 0ormu!ario ?es como si se dibu(ara
sobre e!
0ormu!ario antes de Lue /ste e@istieraA. Para Lue e! resu!tados de print " de !os m/todos
r0icos
a#areBcan a! 1acerse visib!e e! 0ormu!ario, deben introducirse en e! #rocedimiento
paint/form.
7ambi/n !os contro!es pictureBo% tienen evento paint, Lue se e(ecuta a! 1acerse visib!es.
E! evento Paint tiene muc1a im#ortancia en re!acin con e! re0resco de !os r0icos " con !a
ve!ocidad de e(ecucin de !os mismos. En !os a#artados siuientes se com#!etar !a
e@#!icacin de
este tema.
2.2.# La propiedad DraZMode
Esta es una #ro#iedad bastante im#ortante " di0Fci! de mane(ar, sobre todo si se Luieren
rea!iBar
cierto ti#o de acciones con !os m/todos r0icos. =a o#cin #or de0ecto es !a n\ 1*6 Cop1
Pen.
=a #ro#iedad 7ra"ode contro!a cmo se dibu(an !os contro!es line " shape, asF como !os
resu!tados de !os m/todos r0icos pset, line " circle. =a o#cin #or de0ecto 1ace Lue cada
e!emento
r0ico se dibu(e con e! co!or corres#ondiente ?#or de0ecto e! foreColorA sobre !o Lue
1ubiera sido
dibu(ado anteriormente. En ocasiones esto no es !o ms adecuado #ues, #or e(em#!o, si se
su#er#onen dos 0iuras de! mismo co!or o si se dibu(a con e! bac0Color, !os r0icos
resu!tan
indistinuib!es.
Para entender cmo 0unciona 7ra"ode es necesario tener c!aros !os conce#tos de color
complementario " combinaci'n de dos colores. E! co!or com#!ementario de un co!or es e!
co!or
Lue sumado con /! da e! blanco ?]5))))))]A. Por e(em#!o, e! co!or com#!ementario de!
rojo
?]5))4444]A es e! c1an ?]544))))]A.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 6:
E! color complementario se #uede obtener mediante !a sim#!e resta de! co!or b!anco menos
e!
co!or oriina!. Por su #arte !a combinaci'n de dos colores es e! co!or Lue resu!ta de a#!icar
e!
o#erador !ico 9r6 e! co!or resu!tante tiene sus *its a 1 si a!uno o !os dos de !os co!ores
oriina!es
tiene a 1 e! *it corres#ondiente. =a e@#!icacin de !os distintos va!ores de !a #ro#iedad
7ra"ode
Lue se obtiene de! -elp es !a siuiente6
1 Blackness.
2 Not Merge Pen - Inverse of setting 15 (Merge Pen).
3 Mask Not Pen - Combination of the colors common to the background color
and the inverse of the pen.
4 Not Copy Pen - Inverse of setting 13 (Copy Pen).
5 Mask Pen Not - Combination of the colors common to both the pen and the
inverse of the display.
6 Invert - Inverse of the display color.
7 Xor Pen - Combination of the colors in the pen and in the display
color,
but not in both.
8 Not Mask Pen - Inverse of setting 9 (Mask Pen).
9 Mask Pen - Combination of the colors common to both the pen and the
display.
10 Not Xor Pen - Inverse of setting 7 (Xor Pen).
11 Nop - No operation - output remains unchanged. In effect, this setting
turns drawing off.
12 Merge Not Pen - Combination of the display color and the inverse of
the
pen color.
13 Copy Pen (Default) - Color specified by the ForeColor property.
14 Merge Pen Not - Combination of the pen color and the inverse of the
display color.
15 Merge Pen - Combination of the pen color and the display color.
16 Whiteness.
E! e@#!icar ms a 0ondo !as distintas a#!icaciones de esta #ro#iedad esta 0uera de! a!cance
de
este manua! introductorio.
2.2.- Plano% de di.)(o ALa'er%C
Visual Basic considera tres planos superpuestos ?!a"ersA6 e! #!ano 0ronta!, e! #!ano
intermedio " e!
#!ano de 0ondo. Es im#ortante saber en Lu/ #!ano se introduce cada e!emento r0ico #ara
entender
cundo unos e!ementos se su#er#ondrn a otros en !a #anta!!a. En #rinci#io, !os tres #!anos
se
uti!iBan de! siuiente modo6
1. En e! plano frontal se dibu(an todos los controles, e@ce#to !os contro!es r0icos " !as
!abe!s.
2. En e! plano intermedio se re#resentan !os controles grficos " !as la*els.
*. En e! plano de fondo se re#resenta e! color de fondo " e! resu!tado de !os !todos
grficos.
Estas re!as tienen e@ce#ciones Lue de#enden de !a #ro#iedad Auto:edra", de !a
#ro#iedad
ClipControl " de si !os m/todos r0icos se uti!iBan o no asociados a! evento paint.
2.2./ La propiedad A),oRedraZ
Esta #ro#iedad tiene una ran im#ortancia. En #rinci#io, todas !as a#!icaciones de !indo"s
#ermiten su#er#oner ventanas "Mu otros e!ementos r0icos, " recu#erar com#!etamente e!
contenido
de cua!Luier ventana cuando /sta se se!ecciona de nuevo " viene a #rimer #!ano ?es !a
ventana
activaA. D esto se !!ama redibujar ?redraFA !a ventana. Cua!Luier a#!icacin Lue se
desarro!!e en
Visual Basic debe ser ca#aB de redibu(arse correctamente, #ero #ara e!!o e! #roramador
debe
conocer a!o de !a #ro#iedad Auto:edra".
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7(
Por de0ecto, Visual Basic redibu(a siem#re !os contro!es Lue a#arecen en un 0ormu!ario.
Esto
no sucede sin embaro con e! resu!tado de !os mtodos &rMficos " de print. Para Lue !a
sa!ida de
estos m/todos se redibu(e es necesario ado#tar uno de !os dos m/todos siuientes6
1. Si en e! form o pictureBo% !a #ro#iedad Auto:edra" est en false6
Si !os mtodos &rMficos " print estn en e! #rocedimiento corres#ondiente a! evento paint
se redibu(an en e! "lano de fondo ?!os m/todos vue!ven a e(ecutarse, #or !o Lue e! #roceso
#uede ser !ento en ciertos casosA.
Si !os mtodos &rMficos " print estn 0uera de! evento paint no se redibu(an.
2. Si en e! form o pictureBo% !a #ro#iedad Auto:edra" est en true6
Si !os mtodos &rMficos " print estn en e! evento paint se inoran.
Si !os mtodos &rMficos " print estn 0uera de! evento paint se redibu(an uardando en
memoria una co#ia de !a Bona de #anta!!a a re0rescar. Este es !a 0orma ms r#ida de
conseuir Lue !os r0icos " e! te@to se redibu(en. 7iene e! inconveniente de necesitar ms
memoria.
=a #ro#iedad Auto:edra" de !os forms " de !as pictureBo% es inde#endiente, #or !o Lue
!as
dos 0ormas anteriores de conseuir Lue !os r0icos se redibu(en se #ueden uti!iBar
con(untamente,
#or e(em#!o una en e! 0ormu!ario " otra en !as pictureBo%.
2.2.1 La propiedad ClipCon,rol
Por de0ecto esta #ro#iedad de !as forms " pi%tureBo% est en true. En este caso !os
contro!es estn
siem#re #or encima de !a sa!ida de !os m/todos r0icos, #or !o Lue nunca una !Fnea se
dibu(ar
sobre un botn o una barra de des#!aBamiento, #or e(em#!o ?!os contro!es estn siem#re en
e! #!ano
0ronta! o en e! #!ano intermedio, se>n se 1a e@#!icado antesA.
Cuando !a #ro#iedad ClipControl se #one a false se #roduce una dob!e circunstancia6
=os m/todos r0icos situados en un evento paint siem#re se dibu(an en e! "lano de fondo
" #or tanto res#etan !os contro!es.
=os m/todos r0icos situados 0uera de un evento paint se dibu(an sobre cua!Luier
e!emento Lue est/ en !a #anta!!a.
2.4 E:EMPLOS
D continuacin se muestra dos e(em#!os Lue 1acen
uso de a!unos de !os contro!es " m/todos r0icos
e@#!icados #reviamente.
2.4.1 E(e+plo 2.#: GrH5ico% ' .arra% de
de%plaEa+ien,o
Este #rimer #rorama, cu"o 0ormu!ario se muestra
en !a 0iura ..7, es un e(em#!o senci!!o Lue #ermite
uti!iBar a!unas de !as 1erramientas r0icas de
Visual Basic. Para e!!o se 1an uti!iBado dos barras
de des#!aBamiento Lue, (unto a otras dos ca(as de
)iura ..7. &ovimiento de un #unto con Pset.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7)
te@to, modi0icarn " visua!iBarn !as coordenadas de! #unto a dibu(ar.
=a 7ab!a ..- muestra !os ob(etos " !as #ro#iedades a considerar en este e(em#!o.
Con,rol Propiedad !alor Con,rol Propiedad !alor
5Scro!!1 Name 5Scro!!1 t@t3o@ Name t@tCa(a2
=areC1ane - 7e@t 4
&a@ 144 t@tCa(a* Name t@tCa(a*
&in 4 7e@t 4
Sma!!C1ane 1 Picture3o@ Name Pct3o@
2Scro!!1 Name 2Scro!!1 Command3utton Name Command1
=areC1ane - Ca#tion Sa!ir
&a@ 144
&in 4
Sma!!C1ane 1
7ab!a ..-. Contro!es " #ro#iedades de! E(em#!o ..2.
Se #resenta a continuacin e! cdio de! #rorama6
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
pctBox.Scale (0, 0)-(100, 100) Se escala la picture box
End Sub
Private Sub HScroll1_Change()
txtCaja3.Text = Format(HScroll1.Value) Leemos valor de la barra hor.
pctBox.PSet (HScroll1.Value, VScroll1.Value), vbRed Dibuja punto
End Sub
Private Sub txtCaja2_KeyPress(KeyAscii As Integer)
Dim valor As Integer
valor = Val(txtCaja2.Text)
If KeyAscii = 13 Then
If valor <= VScroll1.Max And valor >= VScroll1.Min Then
VScroll1.Value = valor Asignamos valor del textbox a barra
ElseIf valor > VScroll1.Max Then
VScroll1.Value = VScroll1.Max
Else
VScroll1.Value = VScroll1.Min
End If
End If
End Sub
Private Sub txtCaja3_KeyPress(KeyAscii As Integer)
Dim valor As Integer
valor = Val(txtCaja3.Text)
If KeyAscii = 13 Then
If valor <= HScroll1.Max And valor >= HScroll1.Min Then
HScroll1.Value = valor Asignamos valor del textbox a barra
ElseIf valor > HScroll1.Max Then
HScroll1.Value = HScroll1.Max
Else
HScroll1.Value = HScroll1.Min
End If
End If
End Sub
Private Sub VScroll1_Change()
txtCaja2.Text = Format(VScroll1.Value) Leemos valor barra vertical
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7-
pctBox.PSet (HScroll1.Value, VScroll1.Value), vbRed Dibujamos
punto
End Sub
2.4.# E(e+plo 2.-: Repre%en,acin ;rH5ica de la %ol)cin de la ec)acin de %e;)ndo
;rado
En este seundo e(em#!o, cu"o 0ormu!ario se
muestra en !a 0iura ..H, se re#resentan e! !uar de
raFces de !a ecuacin de seundo rado en 0uncin de
!os coe0icientes, o ms en concreto en 0uncin de !os
cocientes 3MD " CMD. E! va!or de estas re!aciones se
cambia interactivamente #or medio de dos barras de
des#!aBamiento.
E! #rorama #ermite adems !a #osibi!idad de
mantener dibu(adas !as so!uciones anteriores de !a
ecuacin, o borrar!as " dibu(ar s!o !as >!timas raFces
ca!cu!adas borrando !as anteriores. Para 0ina!iBar e!
#rorama basta #resionar e! botn +alir.
=a 7ab!a ... muestra !os nombres " !os va!ores de !as #rinci#a!es #ro#iedades de !os
ob(etos
Lue a#arecen en !a 0iura ..H.
Con,rol Propiedad !alor Con,rol Propiedad !alor
0raDib Name 0raDib =abe!1 Ca#tion 3MD
Ca#tion Dibu(o =abe!2 Ca#tion CMD
Name )rame1 =abe!* Ca#tion 3
Ca#tion Divisiones E(es =abe!, Ca#tion C
1sb3D Name 1sb3D =abe!- Ca#tion G1MG8
=areC1ane 14 =abe!. Ca#tion G2MGI
&a@ 1444 Command3utton Name Command1
&in N1444 Ca#tion Sa!ir
Sma!!C1ane 1 !b!3D, !b!CD,
!b!G1, !b!32
3acKCo!or ]544C4)))
1sbCD Name 1sbCD o#tD1 Name o#tD1
=areC1ane 14 Ca#tion 3orrar
&a@ 144 o#tD2 Name o#tD2
&in N144 Ca#tion &antener
Sma!!C1ane 1 o#tNo Name +#tNo
#ct3o@ Name #ct3o@ Ca#tion No
o#tSi Name +#tSi
Ca#tion Si
7ab!a .... Contro!es " #ro#iedades de! E(em#!o ..*.
E! cdio de! #rorama es e! siuiente6
Dim a, b, c As Double
Dim x1, x2, dis, xr, xi As Double
Private Sub divisiones(nx As Integer, ny As Integer)
Dim i As Integer
Dim x, xinc, y, yinc As Single
pctBox.DrawWidth = 1
xinc = 20 / (nx - 1)
x = -10
For i = 1 To nx
)iura ..H. 8aFces de !a ecuacin de seundo rado..
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7.
pctBox.Line (x, 0)-(x, -1)
x = x + xinc
Next i
yinc = 10 / (ny - 1)
y = -5
For i = 1 To ny
pctBox.Line (-1, y)-(0, y)
y = y + yinc
Next i
pctBox.DrawWidth = 2
End Sub
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
pctBox.Scale (-10, 5)-(10, -5)
End Sub
Private Sub hsbBA_Change()
a = 1
b = hsbBA.Value / 10#
c = hsbCA.Value / 10#
lblBA.Caption = b
lblCA.Caption = c
dis = b ^ 2 - 4 * a * c
If optD2.Value = True Then mantener
pctBox.AutoRedraw = True
Else borrar
pctBox.AutoRedraw = False
pctBox.Cls
End If
If dis > 0 Then
x1 = (-b + Sqr(dis)) / (2 * a)
x2 = (-b - Sqr(dis)) / (2 * a)
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = Format(x2, "###0.000")
pctBox.PSet (x1, 0), vbRed
pctBox.PSet (x2, 0), vbRed
ElseIf dis = 0 Then
x1 = -b / (2 * a)
x2 = x1
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = ""
pctBox.PSet (x1, 0), vbGreen
Else
xr = -b / (2 * a)
xi = Sqr(-dis) / (2 * a)
lblX1.Caption = Format(xr, "###0.000")
lblX2.Caption = Format(xi, "###0.000")
pctBox.PSet (xr, xi), vbBlue
pctBox.PSet (xr, -xi), vbBlue
End If
If optSi = True Then
Call divisiones(10, 5)
End If
End Sub
Private Sub hsbCA_Change()
a = 1
b = hsbBA.Value / 10#
c = hsbCA.Value / 10#
lblBA.Caption = b
lblCA.Caption = c
dis = b ^ 2 - 4 * a * c
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7&
If optD2.Value = True Then mantener
pctBox.AutoRedraw = True
Else borrar
pctBox.AutoRedraw = False
pctBox.Cls
End If
If dis > 0 Then
x1 = (-b + Sqr(dis)) / (2 * a)
x2 = (-b - Sqr(dis)) / (2 * a)
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = Format(x2, "###0.000")
pctBox.PSet (x1, 0), vbRed
pctBox.PSet (x2, 0), vbRed
ElseIf dis = 0 Then
x1 = -b / (2 * a)
x2 = x1
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = ""
pctBox.PSet (x1, 0), vbGreen
Else
xr = -b / (2 * a)
xi = Sqr(-dis) / (2 * a)
lblX1.Caption = Format(xr, "###0.000")
lblX2.Caption = Format(xi, "###0.000")
pctBox.PSet (xr, xi), vbBlue
pctBox.PSet (xr, -xi), vbBlue
End If
If optSi = True Then
Call divisiones(10, 5)
End If
End Sub
Private Sub optD1_Click()
pctBox.AutoRedraw = True
pctBox.Cls
pctBox.DrawWidth = 1
pctBox.Line (-90, 0)-(90, 0), vbBlack
pctBox.Line (0, -45)-(0, 45), vbBlack
pctBox.DrawWidth = 2
End Sub
Private Sub pctBox_Paint()
pctBox.AutoRedraw = True
pctBox.Line (-90, 0)-(90, 0), vbBlack
pctBox.Line (0, -45)-(0, 45), vbBlack
pctBox.DrawWidth = 2
End Sub
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 75
4. ARC9I!OS " ENTRADAVSALIDA DE DATOS
En este ca#Ftu!o se van a describir varias 0ormas de introducir in0ormacin en e! #rorama,
asF como
de obtener resu!tados en 0orma im#resa o mediante escritura en un 0ic1ero. Se va a
#resentar una
nueva 0orma interactiva de comunicarse con e! usuario, como son !as ca(as de di!oo
s&Bo% e
=nputBo%. Particu!ar inter/s tiene !a !ectura " escritura de datos en e! disco, !o cua! es
necesario
tanto cuando e! vo!umen de in0ormacin es mu" im#ortante ?!a memoria 8D& est siem#re
ms
!imitada Lue e! es#acio en discoA, como cuando se desea Lue !os datos no desa#areBcan a!
terminar
!a e(ecucin de! #rorama. =os 0ic1eros en disco resue!ven ambos #rob!emas.
7ambi/n se ver en este ca#Ftu!o cmo obtener resu!tados a!0anum/ricos " r0icos #or !a
im#resora.
4.1 CA:AS DE DIGLOGO INPUT7OO " MSG7OO
Estas ca(as de di!oo son simi!ares a !as Lue se uti!iBan en muc1as a#!icaciones de
!indo"s. =a
ca(a de mensa(es o s&Bo% abre una ventana a trav/s de !a cua! se envFa un mensa(e a!
usuario " se
!e #ide una res#uesta, #or e(em#!o en 0orma de c!icar un botn 9.R.6Cancel, o Pes6#o. Este
ti#o de
mensa(es son mu" uti!iBados #ara con0irmar acciones " #ara decisiones senci!!as. =a ca(a de
di!oo
=nputBo% #ide a! usuario Lue tec!ee una 0rase, #or e(em#!o su nombre, un tFtu!o, etc.
=a 0orma enera! de !a 0uncin s&Bo% es !a siuiente6
respuesta = MsgBox("texto para el usuario", tiposBotones, "titulo")
donde respuesta es !a variab!e donde se a!macena e! va!or de retorno, Lue es un n>mero
indicativo
de! botn c!icado #or e! usuario, de acuerdo con !os va!ores de !a 7ab!a 7.1. =a constante
simb!ica
Lue re#resenta e! va!or de retorno indica c!aramente e! botn c!icado. =os otros dos
arumentos son
o#ciona!es. E! #armetro tiposBotones es un entero Lue indica !a combinacin de botones
deseada
#or e! usuarioV sus #osib!es va!ores se muestran en !a 7ab!a 7.2. 7ambi/n en este caso !a
constante
simb!ica corres#ondiente es su0icientemente e@#!Fcita. Si este arumento se omite se
muestra s!o
e! botn 9.R. E! #armetro titulo contiene un te@to Lue a#arece como tFtu!o de !a ventanaV
si se
omite, se muestra en su !uar e! nombre de !a a#!icacin.
!alor de re,orno Con%,an,e %i+.lica
1 vb+J !alor ,ipo%7o,one% Con%,an,e %i+.lica
2 vbCance! 4 vb+J+n!"
* vbDbort 1 vb+JCance!
, vb8etr" 2 vbDbort8etr"Inore
- vbInore * vbResNoCance!
. vbRes , vbResNo
7 vbNo - vb8etr"Cance!
7ab!a 7.1. 3otn c!icado #or e! usuario. 7ab!a 7.2. 3otones mostrados en &s3o@.
Se #uede modi0icar e! va!or de tiposBotones de modo Lue e! botn Lue se activa #or
de0ecto
cuando se #u!sa !a tec!a =ntro ?e! botn Lue tiene e! focusA sea cua!Luiera de !os botones de
!a ca(a.
Para e!!o basta sumar a tiposBotones otra constante Lue #uede tomar uno de !os tres va!ores
siuientes6 0 ?v*<efaulButton), Lue re#resenta e! #rimer botnA, F)E ?v*<efaulButton-,
Lue
re#resenta e! seundo botnA " ),F ?v*<efaulButton., Lue re#resenta e! tercer botnA.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 76
)ina!mente, se #uede inc!uir en e! mensa(e un icono ad?hoc #or e! mismo #rocedimiento de
sumar!e a! arumento tiposBotones una nueva constante num/rica con !os siuientes
va!ores "
sini0icados de0inidos #or !a constante simb!ica a#ro#iada6 1. ?v*+riticalA, *2
?v*HuestionA, ,H
?v*D;cla!ationA " ., ?v*Infor!ationA. Es obvio Lue, #or !os #ro#ios va!ores considerados,
a! sumar
estas constantes o !as anteriores a! arumento tiposBotones, !a in0ormacin oriina! descrita
en !a
7ab!a 7.2 no se #ierde. =a 0iura 7.1 muestra un e(em#!o de ca(a s&Bo% resu!tado de
e(ecutar e!
comando siuiente6
lblBox.Caption = MsgBox("Pulse un botn: ", 2 + 256 + 48, _
"Caja de mensajes")
donde e! W2X indica Lue deben a#arecer !os botones Abort, :etr1 " Cancel, e! W2-.X indica
Lue e!
*otn "or defecto es e! seundo ?:etr1A " e! W,HX indica Lue debe a#arecer e! icono de
e;cla!acin.
Por otra #arte, !a 0orma enera! de !a 0uncin =nputBo% es !a siuiente6
texto = InputBox("texto para el usuario", "titulo", "default", left, top)
donde te%to es !a variab!e donde se a!macena e! va!or de retorno, Lue es e! te@to tec!eado
#or e!
usuario. =os #armetros _te;to "ara el usuario_ " titulo tienen e! mismo sini0icado Lue en
s&Bo%. E! #armetro default es un te@to #or de0ecto Lue a#arece en !a ca(a de te@to " Lue
e!
usuario #uede ace#tar, modi0icar o sustituirV e! contenido de esta ca(a es !o Lue en de0initiva
esta
0uncin devue!ve como va!or de retorno. )ina!mente, left " top son !as coordenadas de !a
esLuina
su#erior iBLuierda de !a =nputBo%V si se omiten, Visual Basic dibu(a esta ca(a centrada en
1oriBonta!
" a!o #or encima de !a mitad de !a #anta!!a en vertica!. =a 0iura 7.2 muestra un e(em#!o
de ca(a
=nputBo% resu!tado de e(ecutar e! comando siuiente6
lblBox.Caption = InputBox("Escriba su nombre: ", _
"Caja de entrada", "Miguel Indurain")
donde e! nombre Lue a#arece #or de0ecto es e! de! me(or cic!ista de !os >!timos tiem#os.
Este
nombre a#arece se!eccionado " #uede ser sustituido #or otro Lue tec!ee e! usuario.
4.# M>TODO PRINT
Este m/todo #ermite escribir te@to en formularios, ca(as pictureBo% " en un ob(eto
!!amado Printer
Lue se ver un #oco ms ade!ante.
4.#.1 Carac,erJ%,ica% ;enerale%
=a 0orma enera! de! m/todo Print se e@#!ica me(or con a!unos e(em#!os como !os
siuientes6
pctBox.Print "La distancia es: "; Dist; " km."
pctBox.Print 123; 456; "San"; "Sebastin"
pctBox.Print 123, 456, "San", "Sebastin"
)iura 7.1. E(em#!o de ca(a &s3o@. )iura 7.2. E(em#!o de ca(a de In#ut3o@.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 77
cu"o resu!tado es e! siuiente ?#uede variar de#endiendo de! ti#o " tama'o de !as !etrasA6
=a distancia es6 2*..- Km.
12* ,-. SanSebastin
12* ,-. San Sebastin
De estos e(em#!os se #ueden "a sacar a!unas conc!usiones6
1. E! m/todo Print recibe como datos una lista de varia*les 3Io cadenas de caracteres. =as
cadenas son im#resas " !as variab!es se sustitu"en #or su va!or.
2. 5a" dos ti#os bsicos de separadores #ara !os e!ementos de !a !ista. E! carcter punto 1
coma
?VA 1ace Lue se escriba inmediatamente a continuacin de !o anterior. =a coma ?,A 1ace Lue
se
va"a a! comienBo de !a siuiente Mrea de salida. Con !etra de #aso constante como !a
Courier
!as reas de sa!ida em#ieBan cada 1, caracteres, es decir en !as co!umnas 1, 1-, 29, etc. Con
!etras de #aso variab!e esto se 1ace s!o de modo a#ro@imado.
*. =as constantes num/ricas #ositivas van #recedidas #or un es#acio en b!anco " se#aradas
entre
sF #or otro es#acio en b!anco. Si son neativas e! seundo es#acio es ocu#ado #or e! sino
menos ?NA.
,. E! ti#o " tama'o de !etra Lue se uti!iBa de#ende de !a #ro#iedad 5ont de! 0ormu!ario,
ob(eto
PictureBo% u ob(eto Printer en Lue se est/ escribiendo.
E@isten otros se#aradores ta!es como .ab?n@ " +pc?n@. E! #rimero de e!!os !!eva e! #unto de
insercin de te@to a !a co!umna n, mientras Lue e! seundo de(a n es#acios en b!anco antes
de seuir
escribiendo. .ab sin arumento eLuiva!e a !a coma ?,A. Estos es#aciadores se uti!iBan en
combinacin con e! #unto " coma ?VA, #ara se#arar!os de !os dems arumentos.
Por de0ecto !a sa!ida de cada m/todo Print se escribe en una nueva !Fnea, #ero si se co!oca
un
#unto " coma a! 0ina! de un m/todo Print, e! resu!tado de! siuiente Print se escribe en !a
misma
!Fnea.
Puede contro!arse e! !uar de! 0ormu!ario o contro! donde se im#rime !a sa!ida de! m/todo
Print. Esta sa!ida se im#rime en e! !uar indicado #or !as #ro#iedades CurrentC "
CurrentP de!
0ormu!ario o contro! donde se im#rime. Cambiando estas #ro#iedades se modi0ica e! !uar
de
im#resin, Lue #or de0ecto es !a esLuina su#erior iBLuierda. E@isten unas 0unciones
!!amadas
.e%t!idth?strin&@ " .e%t-ei&ht?strin&@ Lue devue!ven !a anc1ura " !a a!tura de una cadena
de
caracteres #asada como arumento. Estas 0unciones #ueden a"udar a ca!cu!ar !os va!ores
ms
adecuados #ara !as #ro#iedades CurrentC " CurrentP.
=a 0uncin str?valor/numrico@ convierte un n>mero en cadena de caracteres #ara 0aci!itar
su
im#resin. En rea!idad, es !o Lue Visual Basic 4.0 1a 1ec1o de modo im#!Fcito en !os
e(em#!os
anteriores. En versiones anteriores de! #rorama era necesario Lue e! usuario rea!iBase !a
conversin
de modo e@#!Fcito.
4.#.# *)ncin *or+a,
=a 0uncin 5ormat rea!iBa !as conversiones necesarias #ara Lue ciertos datos num/ricos o
de otro
ti#o #uedan ser im#resos con Print. Como se 1a visto, en e! caso de !as variab!es num/ricas
esto no
es im#rescindib!e, #ero !a 0uncin 5ormat #ermite contro!ar e! n>mero de es#acios, e!
n>mero de
decima!es, etc. En e! caso de su a#!icacin a ob(etos ti#o fecha ?dateA " hora ?timeA !a
a#!icacin de
5ormat es im#rescindib!e, #ues Print no !os escribe directamente. =a 0orma enera! de esta
0uncin
es !a siuiente6
Format(expresion, formato)
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 79
donde e%presion es una variab!e o e@#resin " formato NLue es o#ciona!N describe e!
0ormato
deseado #ara e! resu!tado. E! va!or de retorno es una cadena de caracteres directamente
uti!iBab!e en
Print. Para fechas e@isten 0ormatos #rede0inidos ta!es como JGeneral <ateK, JLong
<ateK,
Jediu! <ateK " JGhort <ateKV #ara !a 1ora !os 0ormatos #rede0inidos son JLong >i!eK,
Jediu! >i!eK " JGhort >i!eK. Ddems e@iste !a #osibi!idad de Lue e! usuario de0ina sus
#ro#ios
0ormatos ?ver OserU7efined 7ate6.ime 5ormats ?5ormat 5unction@, en e! -elp de!
#roramaA. E!
usuario tambi/n #uede de0inir sus #ro#ios 0ormatos num/ricos " de cadenas de caracteres.
D di0erencia de !a 0uncin +tr, !a 0uncin 5ormat no de(a es#acio en b!anco #ara e! sino de
!os n>meros #ositivos. Para una in0ormacin ms deta!!ada sobre !a 0uncin 5ormat
consu!tar e!
-elp.
4.- UTILIDACIN DE IMPRESORAS
Visual Basic #ermite obtener #or !a im#resora r0icos " te@to simi!ares a !os Lue se
#ueden obtener
#or !a #anta!!a, aunLue con a!unas di0erencias de cierta im#ortancia. E@isten dos 0ormas de
im#rimir6 !a #rimera mediante e! m/todo Print5orm, " !a seunda uti!iBando e! ob(eto
Printer, Lue
es un ob(eto simi!ar a! ob(eto PictureBo%. Dmbos m/todos tienen #untos 0uertes " d/bi!es
Lue se
comentarn a continuacin.
4.-.1 M3,odo Prin,*or+
E! m/todo Print5orm #ermite im#rimir un 0ormu!ario con sus contro!es " con !os
resu!tados de !os
m/todos r0icos ?p+et, line " circleA " de! m/todo print. Para e!!o !a #ro#iedad
Auto:edra" de!
0ormu!ario tiene Lue estar #uesta a true, " !os m/todos citados tienen Lue estar !!amados
desde un
evento distinto de! Paint. =o >nico Lue no se dibu(a de! 0ormu!ario es !a *arra de ttulo.
Este sistema de im#resin es mu" senci!!o de uti!iBar, #ero tiene e! inconveniente de Lue e!
resu!tado se im#rime con !a misma reso!ucin de !a #anta!!a ?entre -4 " 144 #untos #or
#u!adaA, no
a#rovec1ando #or tanto !a ma"or reso!ucin Lue sue!en tener !as im#resoras ?*44 .44
#untos #or
#u!adaA.
4.-.# O.(e,o Prin,er
Este seundo sistema tiene !a venta(a de Lue #ermite a#rovec1ar #!enamente !a reso!ucin
de !a
im#resora, #ero no permite dibujar controles sino s!o !os m/todos r0icos 1abitua!es
?p+et; line "
circleA, e! m/todo print " un m/todo no visto 1asta a1ora Lue es PaintPicture.
Para Visual Basic !a im#resora es un ob(eto r0ico ms, simi!ar a !os 0ormu!arios " a !as
ca(as
r0icas PictureBo%. Como ta! ob(eto r0ico tiene sus #ro#iedades enera!es ?<raFGt3le,
Bac8+olor, Fore+olor, etc.A, adems de otras #ro#iedades es#ecF0icas de !a im#resora,
como
<eviceBa!e, <riverBa!e, Crientation, +o"ies, etc. Para ms in0ormacin #uede uti!iBarse
e! -elp,
buscando Printer object. En #rinci#io se uti!iBa !a im#resora #or de0ecto de! PC, #ero
Visual Basic
mantiene una Printers Collection, Lue es a!o asF como un arra" de im#resoras dis#onib!es.
D #artir
de esta Printers Collection se #uede cambiar a !a im#resora Lue se desee.
E! ob(eto Printer tiene un m/todo !!amado $nd7oc #ara enviar rea!mente a !a im#resora e!
resu!tado de !os m/todos r0icos. E! m/todo PaintPicture #ermite incor#orar e! contenido
de
ficheros &rMficos a un for!ulario, PictureBo% o Printer. Su 0orma enera! es6
object.PaintPicture pictProp X, Y, Width, Height
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 7:
donde pictProp indica e! orien de! r0ico ?coincide con !a #ro#iedad picture de
PictureBo%A, C e
P indican !as coordenadas de insercin " !os dos >!timos #armetros !as dimensiones
?o#ciona!esA.
4./ CONTROLES *ILELIST DIRLIST " DRI!ELIST
Cno de !os #rob!emas Lue 1a" Lue
reso!ver #ara !eer o escribir en 0ic1eros
de disco es ser ca#aces de !oca!iBar
interactivamente !os corres#ondientes
0ic1eros, de modo an!oo a como se
rea!iBa con !os comandos 5ile69pen o
5ile6+ave As de !ord, $%cel o de
cua!Luier otra a#!icacin. DunLue estas
o#eraciones se #ueden 1acer muc1o
ms 0ci!mente con !os Common
7ialo& Controls vistos en e! Ca#Ftu!o
,, aLuF se van a e@#!icar !os contro!es
es#ecF0icos de Lue dis#one Visual
Basic.
Visual Basic dis#one de tres
contro!es Lue 0aci!itan e! recorrer e! rbo! de 0ic1eros " de directorios, !oca!iBando o
creando
interactivamente un 0ic1ero determinado. Estos contro!es son e! 5ile8istBo% ?#ara
0ic1erosA, e!
7ir8istBo% ?#ara directoriosA " e! 7rive8istBo% ?#ara unidades de discoA. =a 0iura 7.*
muestra
estos tres contro!es, (unto con unas etiLuetas Lue !os identi0ican. =os dos #rimeros son
listas,
mientras Lue e! tercero es una ca(a de ti#o combo.
En #rinci#io estos contro!es, cuando se co!ocan en un 0ormu!ario ta! como se muestra en !a
0iura 7.*, estn desconectados. ;uiere esto decir Lue a! cambiar !a unidad de disco ?driveA
no se
muestran en !a ca(a dir8istBo% !os directorios corres#ondientes a !a nueva unidad de disco.
Por otra
#arte, a! cambiar de directorio tendrn Lue cambiar de modo acorde !os 0ic1eros en !a ca(a
file8istBo%. =a di0icu!tad de conectar estas ca(as no es rande, #ero sF 1a" Lue saber cmo
se 1ace
#ues de#ende de #ro#iedades de estas ca(as Lue no a#arecen en !a ventana de #ro#iedades
en modo
de dise'o, " Lue s!o estn accesib!es en modo de e(ecucin.
=as #ro#iedades ms im#ortantes Lue no a#arecen en !a ventana Properties " Lue no estn
accesib!es ms Lue en modo de e(ecucin son !as siuientes6
1. =a 7rive8istBo% tiene una #ro#iedad !!amada drive Lue recoe !a unidad se!eccionada
#or e!
usuario ?#uede ser una unidad 0Fsica como e! disco cGH o una unidad !ica asinada #or e!
usuario a otro disco o directorio en un servidor o en otro ordenador de !a redA.
2. =a #ro#iedad path de !a ca(a 7ir8istBo% determina e! drive se!eccionado " #or tanto Lu/
directorios se muestran en dic1a ca(a.
*. )ina!mente, una #ro#iedad tambi/n !!amada path de !a ca(a 5ile8istBo% determina e!
directorio Lue contiene !os 0ic1eros mostrados.
Para en!aBar correctamente !as ca(as de discos, directorios " 0ic1eros se #uede uti!iBar e!
evento chan&e, de ta! 0orma Lue cada veB Lue e! usuario cambia !a unidad de disco se
cambia e!
path de! directorio " cada veB Lue se cambia e! directorio se cambia e! path de !os 0ic1eros.
Esto
#uede 1acerse con e! cdio siuiente6
Private Sub dirPrueba_Change()
)iura 7.*. Ca(as 7rive8istBo%, 7ir8istBo% " 5ile8istBo%.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9(
filPrueba.Path = dirPrueba.Path
End Sub
Private Sub drvPrueba_Change()
dirPrueba.Path = drvPrueba.Drive
End Sub
=a ca(a 5ile8istBo% tiene una #ro#iedad !!amada 5ile#ame Lue contiene e! nombre de!
0ic1ero se!eccionado #or e! usuario. Para tener e! path com#!eto de! 0ic1ero basta
ante#oner!e !a
#ro#iedad path de !a file8istBo%, Lue inc!u"e e! directorio " e! drive, " !a barra invertida
?eA. Si e!
usuario introduce 5ile#ame inc!u"endo e! path, Visual Basic actua!iBa tambi/n de modo
automtico !a #ro#iedad Path de 5ile8istBo%. E! usuario se debe #reocu#ar de uti!iBar e!
evento
Chan&e #ara actua!iBar e! Path de !a ca(a 7ir8istBo% " !a #ro#iedad 7rive de
7rive8istBo%.
+tra #ro#iedad im#ortante es !a #ro#iedad Pattern, Lue indica !os ti#os de 0ic1eros Lue se
mostrarn en !a ca(a. E! va!or #or de0ecto es V4.4W, !o cua! 1ace Lue se muestren todos !os
0ic1eros.
Si su va!or 0uese V4.docW s!o se mostrarFan !os 0ic1eros con esta e@tensin. =a #ro#iedad
Pattern
admite varias o#ciones se#aradas #or untos " coma ?V4.docX 4.dotWA.
4.1 TIPOS DE *IC9EROS
7anto en !indo"s como en Visual Basic e@isten, #rinci#a!mente, dos ti#os de arc1ivos6
1. 5icheros A+C== o 0ic1eros de te@to. Contienen caracteres codi0icados se>n e! cdio
DSCII
" se #ueden !eer con cua!Luier editor de te@to como #otepad. Sue!en tener e@tensin 4.t%t o
4.bat, #ero tambi/n otras como 4.m #ara !os #roramas de atlab, 4.c #ara !os 0ic1eros
0uente
de C o 4.cpp #ara !os 0ic1eros 0uente de CZZ.
2. 5icheros binarios6 Son 0ic1eros imaen de !os datos o #roramas ta! como estn en !a
memoria de! ordenador. No son !eib!es directamente #or e! usuario. 7ienen !a venta(a de
Lue
ocu#an menos es#acio en disco " Lue no se #ierde tiem#o " #recisin cambindo!os a
0ormato
DSCII a! escribir!os " a! !eer!os en e! disco.
Con Visual Basic se #ueden !eer tanto 0ic1eros DSCII como 0ic1eros binarios. Ddems e!
acceso a un 0ic1ero #uede ser de dos 0ormas #rinci#a!es.
1. Acceso secuencial' Se !een " escriben !os datos como si se tratara de un !ibro6 siem#re a
continuacin de! anterior " sin #osibi!idad de vo!ver atrs o sa!tar datos. Si se Luiere
acceder a
un dato Lue est 1acia !a mitad de un 0ic1ero, 1abr Lue #asar #rimero #or todos !os datos
anteriores. =os 0ic1eros de te@to tienen acceso secuencia!.
2. Acceso aleatorio 2rando!46 Permiten acceder directamente a un dato sin tener Lue #asar
#or
todos !os dems, " #ueden acceder r a !a in0ormacin en cua!Luier orden. 7ienen !a
!imitacin
de Lue !os datos estn a!macenados en unas unidades o b!oLues Lue se !!aman re&istros, "
Lue
todos !os reistros Lue se a!macenan en un 0ic1ero deben ser de! mismo tama'o. =os
0ic1eros
de acceso a!eatorio son 0ic1eros binarios.
*. Acceso binario. Son como !os de acceso a!eatorio, #ero e! acceso no se 1ace #or
registros sino
#or b1tes.
Dntes de #oder !eer o escribir en un 0ic1ero 1a" Lue abrir!o #or medio de !a sentencia 9pen.
En esta sentencia 1a" Lue es#eci0icar Lu/ ti#o de acceso se desea tener, distinuiendo
tambi/n si es
#ara !ectura ?outputA, escritura ?inputA o escritura a'adida ?appendA.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9)
4.2 LECTURA " ESCRITURA EN *IC9EROS SECUENCIALES
4.2.1 Aper,)ra ' cierre de 5ic6ero%
Para #oder !eer o escribir en un 0ic1ero antes debe ser abierto con !a sentencia 9pen, cu"a
0orma
enera! es !a siuiente6
Open filename For modo As # fileNo
donde6
filename es e! nombre de! 0ic1ero a abrir. Ser una variab!e strin& o un nombre entre dob!es
comi!!as ?W XA.
modo Para acceso secuencia! e@isten tres #osibi!idades6 =nput #ara !eer, 9utput #ara
escribir a! comienBo de un 0ic1ero " Append #ara escribir a! 0ina! de un 0ic1ero "a
e@istente. Si se intenta abrir en modo =nput un 0ic1ero Lue no e@iste, se #roduce un
error. Si se abre #ara escritura en modo 9utput un 0ic1ero Lue no e@iste se crea, " si
"a e@istFa se borra su contenido " se comienBa a escribir desde e! #rinci#io. E! modo
Append es simi!ar a! modo 9utput, #ero res#eta siem#re e! contenido #revio de!
0ic1ero escribiendo a continuacin de !o >!timo Lue 1a"a sido escrito anteriormente.
file#o es un n>mero entero ?o una variab!e con un va!or enteroA Lue se asina a cada
0ic1ero
Lue se abre. En todas !as o#eraciones sucesivas de !ectura "Mo escritura se 1ar
re0erencia a este 0ic1ero #or medio de este n>mero. No #uede 1aber dos 0ic1eros
abiertos con e! mismo n>mero. Visual Basic dis#one de una 0uncin !!amada
5ree5ile Lue devue!ve un n>mero no ocu#ado #or nin>n 0ic1ero.
D continuacin #uede verse un e(em#!o de 0ic1ero abierto #ara !ectura6
Open "C:\usuarios\PRUEBA1.txt" For Input as #1
Des#u/s de terminar de !eer o escribir en un 0ic1ero 1a" Lue cerrar!o. Para e!!o, se uti!iBara
e!
comando Close, Lue tiene !a siuiente 0orma6
Close # fileNo
donde e! file#o es e! n>mero Lue se !a 1abFa asinado a! abrir!o con !a instruccin 9pen.
4.2.# Lec,)ra ' e%cri,)ra de da,o%
S.E.F., +entencia =nput
E@isten varias 0ormas de !eer en un 0ic1ero de acceso secuencia!. Por e(em#!o, #ara !eer e!
va!or de
una o ms variab!es se uti!iBa !a sentencia =nput6
Input # fileNo, varName1, varName2, varName3, ...
donde e! file#o es e! n>mero asinado a! arc1ivo a! abrir!o " varBa!e)1 varBa!e-1 ''' son
!os
nombres de !as variab!es donde se uardarn !os va!ores !eFdos en e! 0ic1ero. Debe 1aber
una
corres#ondencia entre e! orden " !os ti#os de !as variab!es en !a !ista, con !os datos
a!macenados en
e! 0ic1ero. No se #ueden !eer directamente vectores, matrices o estructuras. Si !os datos de!
disco
1an de ser escritos #or e! #ro#io #rorama, conviene uti!iBar !a sentencia "rite ?me(or Lue
!a printA
#ara arantiBar Lue !os va!ores estn convenientemente se#arados. =a sentencia "rite se
ver
#osteriormente.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9-
S.E.F.F 5unci'n 8ine =nput 1 funci'n =nput
=a 0uncin 8ine =nput Y !ee una !Fnea com#!eta de! arc1ivo " devue!ve su contenido como
va!or de
retorno. Su 0orma enera! es6
varString = Line Input #fileNo
Conviene recordar Lue en !os 0ic1eros de te@to se sue!e uti!iBar e! carcter return ?o =ntroA
#ara de!imitar !as distintas !Fneas. Este es e! carcter DSCII n\ 1*, Lue #or no ser un carcter
im#rimib!e se re#resenta en Visual Basic como chr2).4. En muc1as ocasiones ?como
1erencia de!
&SND+SA se uti!iBa como de!imitador de !Fneas una combinacin de !os caracteres return "
linefeed, re#resentada en Visual Basic como chr2).4,chr2)(4. En !a cadena de caracteres
Lue
devue!ve line no se inc!u"e e! carcter de terminacin de !a !Fnea.
Para !eer todas !as !Fneas de un 0ic1ero se uti!iBa un buc!e for o "hile. Visual Basic dis#one
de
!a 0uncin $95 ?Dnd of FileA Lue devue!ve true cuando se !a !!eado a! 0ina! de! 0ic1ero.
2/ase e!
siuiente e(em#!o6
Do While Not EOF(fileNo)
miLinea = Line Input #fileNo
...
Loop
7ambi/n se #uede uti!iBar !a 0uncin =nput, Lue tiene !a siuiente 0orma enera!6
varString = Input(nchars, #fileNo)
donde nchars es e! n>mero de caracteres Lue se Luieren !eer " var+trin& es !a variab!e
donde se
a!macenan !os caracteres !eFdos #or !a 0uncin. Este 0uncin !ee " devue!ve todos !os
caracteres Lue
encuentra, inc!uidos !os intro " linefeed. Para a"udar a uti!iBar esta 0uncin e@iste !a
0uncin 895
?file#o@, Lue devue!ve e! n\ tota! de caracteres de! 0ic1ero. Por e(em#!o, #ara !eer todo e!
contenido
de un 0ic1ero " escribir!o en una ca(a de te@to se #uede uti!iBar6
txtCaja.text = Input(LOF(fileNo), #fileNo)
S.E.F.B 5unci'n print Y
Para escribir e! va!or de unas ciertas variab!es en un 0ic1ero #reviamente abierto en modo
9utput o
Append se uti!iBa !a instruccin print Y, Lue tiene !a siuiente 0orma6
Print #fileNo, var1, var2, var2, ...
donde var,, varF,... #ueden ser variab!es, e@#resiones Lue dan un resu!tado num/rico o
a!0anum/rico, o cadenas de caracteres entre dob!es comi!!as, ta!es como JDl valor de ;
es'''K.
Consid/rese e! siuiente e(em#!o6
Print #1, "El valor de la variable I es: ", I
donde = es una variab!e con un cierto va!or Lue se escribe a continuacin de !a cadena. =as
re!as
#ara determinar e! 0ormato de !a 0uncin print Y son !as mismas Lue !as de! m/todo print
visto
#reviamente.
S.E.F.4 5unci'n "rite Y
D di0erencia de Print Y, !a 0uncin !rite Y introduce comas entre !as variab!es "Mo cadenas
de
caracteres de !a !ista, adems encierra entre dob!es comi!!as !as cadenas de caracteres antes
de
escribir!as en e! 0ic1ero. =a 0uncin !rite Y introduce un carcter ne"line, esto es, un
return o un
return+linefeed des#u/s de! >!timo carcter de !as !ista de variab!es. =os 0ic1eros escritos
con
!rite Y son siem#re !eib!es con =nput Y, cosa Lue no se #uede decir de Print Y.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9.
4.4 *IC9EROS DE ACCESO ALEATORIO
=os 0ic1eros de acceso a!eatorio se caracteriBan #orLue en e!!os se #uede !eer en cua!Luier
orden.
=os 0ic1eros de acceso a!eatorio son 0ic1eros binarios. Cuando se abre un 0ic1ero se debe
escribir
5or :andom, a! es#eci0icar e! modo de a#ertura ?si e! 0ic1ero se abre 5or Binar1 e! acceso
es
simi!ar, #ero no #or registros sino #or *3tesV este modo es muc1o menos uti!iBadoA.
4.4.1 A.rir ' cerrar arc6i0o% de acce%o alea,orio
Estos arc1ivos se abren tambi/n con !a sentencia 9pen, #ero con modo :andom. D! 0ina! se
a'ade
!a sentencia 8enQlon&itud:e&istro, en b"tes. 2/ase e! siuiente e(em#!o6
fileNo = FreeFile
size = Len(unObjeto)
Open filename For Random as #fileNo Len = size
donde filena!e es una variab!e Lue a!macena e! nombre de! arc1ivo. E! >!timo #armetro
in0orma
de !a !onitud de !os reistros ?todos deben tener !a misma !onitudA. Visual Basic dis#one
de !a
0uncin 8en?objeto#ame@, Lue #ermite ca!cu!ar !a dimensin en b"tes de cua!Luier ob(eto
#erteneciente a una c!ase o estructura.
De ordinario !os 0ic1eros de acceso directo se uti!iBan #ara !eer o escribir de una veB todo
un
b!oLue de datos. Este b!oLue sue!e ser un o*#eto de una estructura, con varias varia*les
!ie!*ro.
=os 0ic1eros abiertos #ara acceso directo se cierran con Close, iua! Lue !os secuencia!es.
4.4.# Leer ' e%cri.ir en )na arc6i0o de acce%o alea,orio. *)ncione% Ge, ' P),
Se uti!iBan !as 0unciones Aet " Put. Su sinta@is es !a siuiente6
Get #fileNo, registroNo, variableObjeto
Put #fileNo, registroNo, variableObjeto
=a instruccin Aet !ee un reistro de! 0ic1ero " a!macena !os datos !eFdos en una variab!e,
Lue
#uede ser un o*#eto de una determinada clase o estructura. =a instruccin Put escribe e!
contenido
de !a variab!e en !a #osicin determinada de! 0ic1ero. Si se omite e! n>mero de reistro se
!ee
?escribeA a continuacin de! reistro !eFdo ?escritoA anteriormente. 2/ase e! siuiente
e(em#!o6
FileNo=FreeFile
size=Len(unObjeto)
Open filename for Random as #fileNo Len=size
Get #fileNo, 3, size
Con este e(em#!o, 1emos abierto e! 0ic1ero filena!e de !a misma 0orma Lue !o 1emos 1ec1o
en e! e(em#!o anterior, #ero a1ora, adems 1emos !eFdo un reistro de !onitud size, " ms
en
concreto, e! tercer reistro. Si se Luisiera modi0icar e! va!or de este reistro, no tendrFamos
ms Lue
asinar!e e! va!or Lue Luisi/ramos, #ara a continuacin introducir!o en e! 0ic1ero mediante
!a
sentencia siuiente6
Put #fileNo, 3, size
4.T *IC9EROS DE ACCESO 7INARIO
=a t/cnica a em#!ear es bsicamente !a misma Lue con !os 0ic1eros de acceso a!eatorio, con
!a
sa!vedad de Lue en !uar de mane(ar reistros, en !os 0ic1eros de acceso binario se traba(a
con
b"tes. 2/ase e! siuiente e(em#!o6
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 9&
FileNo=FreeFile
Open filename for Binary as #fileNo
Get #1, 4, dato
dato = 7
Put #1, 4, dato
Close #1
En e! anterior e(em#!o se #uede observar como #rimero introducimos en !a variab!e dato e!
va!or de! cuarto b"te de! 0ic1ero filena!e, #ara #osteriormente asinar!e e! va!or 7, e
introducir!o de
nuevo en e! cuarto b"te de filena!e.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 95
T. ANEOO A: CONSIDERACIONES ADICIONALES SO7RE DATOS "
!ARIA7LES
En este Dne@o se inc!u"en a!unas consideraciones de inter/s #ara #ersonas Lue no 1an
#roramado
antes en otros !enua(es. D continuacin se e@#!ican !as #osibi!idades " !a 0orma de
a!macenar !os
distintos ti#os de variab!es.
T.1 CARACTERES " CDIGO ASCII
=as variab!es strin& ?cadenas de caracteresA contienen un con(unto de caracteres Lue se
a!macenan
en b1tes de memoria. Cada carcter es a!macenado en un b1te ?H bitsA. En un bit se #ueden
a!macenar dos va!ores ?4 " 1AV con dos bits se #ueden a!macenar 22 Y , va!ores ?44, 41, 14,
11 en
binarioV 4, 1 2, * en decima!A. Con H bits se #odrn a!macenar 2H Y 2-. va!ores di0erentes
?norma!mente entre 4 " 2--V con ciertos com#i!adores entre N12H " 127A.
En rea!idad, cada letra se uarda en un so!o *3te como un n>mero entero, e!
corres#ondiente a
esa !etra en e! cdio DSCII ?una corres#ondencia entre n>meros enteros " caracteres,
am#!iamente
uti!iBada en in0ormticaA, Lue se muestra en !a siuiente tab!a #ara !os caracteres estndar
?e@iste un
cdio DSCII e@tendido Lue uti!iBa !os 2-. va!ores " Lue contiene caracteres es#ecia!es "
caracteres
es#ecF0icos de !os a!0abetos de diversos #aFses, como #or e(em#!o !as vocales acentuadas "
!a letra
#ara e! caste!!anoA.
( ) - . & 5 6 7 9 :
( nul soh st; et; eot en0 ac8 *el *s ht
) nl vt n" cr so si dle dc) dc- dc.
- dc& na8 s3n et* can e! su* esc fs gs
. rs us s" L J M N O @ P
& 2 4 Q , 1 ? ' I ( )
5 - . & 5 6 7 9 : R S
6 T U V W X A B + < D
7 F G A I J Y L B C
9 $ H R G > = % E Z [
: \ ] ^ _ ` a b a * c
)( d e f g h i # 8 l !
)) n o " 0 r s t u v F
)- ; 3 z c d e f del
7ab!a D.1. Cdio DSCII estndar.
Esta tab!a se uti!iBa de !a siuiente 0orma. =a #rimera ci0ra ?!as dos #rimeras ci0ras, en e!
caso
de !os n>meros ma"ores o iua!es Lue 144A de! n>mero DSCII corres#ondiente a un
carcter
determinado 0iura en !a #rimera co!umna de !a 7ab!a, " !a >!tima ci0ra en !a #rimera 0i!a de
!a
7ab!a. Sabiendo !a 0i!a " !a co!umna en !a Lue est un determinado carcter #uede
com#onerse e!
n>mero DSCII corres#ondiente. Por e(em#!o, !a !etra D est en !a 0i!a . " !a co!umna -. Su
n>mero
DSCII es #or tanto e! .-. E! carcter ` est en !a 0i!a * " !a co!umna 7, #or !o Lue su
re#resentacin
DSCII ser e! *7. +bs/rvese Lue e! cdio DSCII asocia n>meros consecutivos con !as
!etras
ma">scu!as " min>scu!as ordenadas a!0ab/ticamente. Esto sim#!i0ica notab!emente ciertas
o#eraciones de ordenacin a!0ab/tica de nombres. Ntese Lue todas !as ma">scu!as tienen
cdio
DSCII anterior a cua!Luier min>scu!a.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 96
En !a 7ab!a D.1 a#arecen muc1os caracteres no im#rimib!es ?todos aLue!!os Lue se
e@#resan
con 2 * !etrasA. Por e(em#!o, e! 6, es e! tabu!ador 1oriBonta!, e! nl es e! carcter nueva
lnea, etc.
T.# NWMEROS ENTEROS
=os n>meros enteros en Visual Basic se uardan en 1, 2 , b"tes.
Con H bits ?1 b"teA se #odrFan uardar 2H n>meros6 desde 4 1asta 2--.
Con 1. bits ?2 b"tesA se #odrFan uardar 21. n>meros6 desde 4 1asta .-.-*-. Si se reserva
un bit #ara e! sino se tendrFan 21- n>meros6 desde I-#42T 1asta -#424
Con *2 bits ?, b"tesA se #odrFan uardar 2*2 n>meros6 desde 4 1asta ,.29,.9.7.29-. Si se
reserva un bit #ara e! sino se tendrFan 2*16 desde I#.1/4./T-.2/T 1asta #.1/4./T-.2/4
T.- NWMEROS REALES
En muc1as a#!icaciones 1acen 0a!ta variab!es rea!es, ca#aces de re#resentar manitudes Lue
contenan una "arte entera 3 una "arte fraccionaria o deci!al. Estas variab!es se !!aman
tambi/n
de punto flotante. De ordinario, en base 14 " con notacin cientF0ica, estas variab!es se
re#resentan
#or medio de !a mantisa, Lue es un n>mero ma"or o iua! Lue 4.1 " menor Lue 1.4, " un
e%ponente
Lue re#resenta !a #otencia de 14 #or !a Lue 1a" Lue mu!ti#!icar !a mantisa #ara obtener e!
n>mero
considerado. Por e(em#!o, se re#resenta como 4.*1,1-92.-, j 141. 7anto !a mantisa
como e!
e%ponente #ueden ser #ositivos " neativos.
T.-.1 !aria.le% ,ipo Sin;le
=os com#utadores traba(an en base 2. Por eso un n>mero con decima!es de ti#o +in&le se
a!macena
en , b"tes ?*2 bitsA, uti!iBando -& *its "ara la !antisa ?1 #ara e! sino " 2* #ara e! va!orA "
9 *its
"ara el e;"onente ?1 #ara e! sino " 7 #ara e! va!orA. Es interesante ver Lu/ c!ase de
n>meros de
#unto 0!otante #ueden re#resentarse de esta 0orma. En este caso 1a" Lue distinuir e! ran&o
de !a
precisi'n. =a "recisin 1ace re0erencia a! n>mero de ci0ras con !as Lue se re#resenta !a
!antisa6 con
2* bits e! n>mero ms rande Lue se #uede re#resentar es,
223 = 8.388.608
!o cua! Luiere decir Lue se #ueden re#resentar todos !os n>meros decima!es de . ci0ras " !a
ma"or
#arte QaunLue no todosQ de !os de 7 ci0ras ?#or e(em#!o, e! n>mero 9.21*.,-. no se #uede
re#resentar con 2* bitsA. Por eso se dice Lue !as variab!es ti#o +in&le tienen entre . " 7
ci0ras
decima!es eLuiva!entes de #recisin.
8es#ecto a! e;"onente de dos #or e! Lue 1a" Lue mu!ti#!icar !a !antisa en base 2, con 7 bits
e!
n>mero ms rande Lue se #uede re#resentar es 127. E! ran&o vendr de0inido #or !a
#otencia,
2127 = 1.7014 1038
!o cua! indica e! orden de manitud de! n>mero ms rande re#resentab!e de esta 0orma.
En e! caso de !os n>meros dec!arados como +in&le ?, b"tesA e! rano es6 desde
I-./8#T#-E-T
a I1./81#UTEI/1 #ara !os va!ores neativos " desde 1./81#UTEI/1 a -./8#T#-E-T #ara !os
va!ores
#ositivos.
A"renda %isual Basic &'( co!o si estuviera en $ri!ero "gina 97
T.-.# !aria.le% ,ipo Do).le
DsF #ues, !as variab!es ti#o +in&le tienen un rango " Qsobre todoQ una "recisin mu"
!imitada,
insu0iciente #ara !a ma"or #arte de !os c!cu!os t/cnicos " cientF0icos. Este #rob!ema se
so!uciona
con e! ti#o 7ouble, Lue uti!iBa H b"tes ?., bitsA #ara a!macenar una variab!e. Se uti!iBan 5.
*its "ara
la !antisa ?1 #ara e! sino " -2 #ara e! va!orA " )) "ara el e;"onente ?1 #ara e! sino " 14
#ara e!
va!orA. =a precisi'n es en este caso,
252 = 4.503.599.627.370.496
!o cua! re#resenta entre 1- " 1. ci0ras decima!es eLuiva!entes. Con res#ecto a! ran&o, con
un
e@#onente de 14 bits e! n>mero ms rande Lue se #uede re#resentar ser de! orden de 2
e!evado a 2
e!evado a 14 ?Lue es 142,A6
21024 = 1.7977 10308
Si se considera e! caso de !os n>meros dec!arados como 7ouble ?H b"tesA e! rano va desde
I1.4U42U-1-/T2#-#E-8T a I/.U/8212/1T/1#/4EI-#/ #ara !os va!ores neativos " desde
/.U/8212/1T/1#/4EI-#/ a 1.4U42U-1-/T2#-#E-8T #ara !os va!ores #ositivos.
T./ SISTEMA 7INARIO OCTAL DECIMAL " 9EOADECIMAL
D contnuacin se #resentan !os #rimeros n>meros natura!es e@#resados en distintos
sistemas de
numeracin ?bases 14, 2, H " 1.A. Para e@#resar !os n>meros en base 1. se uti!iBan !as seis
#rimeras
!etras de! abecedario ?D, 3, C, D, E " )A #ara re#resentar !os n>meros decima!es 14, 11,
12,1*,1, "
1-. =a ca!cu!adora Lue se inc!u"e como accesorio en !indo"s () o0rece #osibi!idades de
e@#resar
un n>mero en distintos sistemas de numeracin.
Deci+al 7inario Oc,al 9eBadec.
4 4 4 4
1 1 1 1
2 14 2 2
* 11 * *
, 144 , ,
- 141 - -
. 114 . .
7 111 7 7
H 1444 14 H
9 1441 11 9
14 1414 12 D
11 1411 1* 3
12 1144 1, C
1* 1141 1- D
1, 1114 1. E
1- 1111 17 )
1. 14444 24 14
17 14441 21 11
7ab!a *., E@#resin de un n>mero en !os distintos sistemas

You might also like