Está en la página 1de 10

Conceptos generales sobre funciones

Las aplicaciones informticas que habitualmente se utilizan, incluso a nivel de informtica


personal, suelen contener decenas y an cientos de miles de lneas de cdigo fuente. A medida
que los programas se van desarrollando y aumentan de tamao, se convertiran rpidamente
en sistemas poco manejables si no fuera por la modularizacin, que es el proceso consistente
en dividir un programa muy grande en una serie de mdulos mucho ms pequeos y
manejables. A estos mdulos se les suele denominar de distintas formas (subprogramas,
subrutinas, procedimientos, funciones, etc.) segn los distintos lenguajes. Sea cual sea la
nomenclatura, la idea es sin embargo siempre es la misma: dividir un programa grande en un
conjunto de subprogramas o funciones ms pequeas que son llamadas por el programa
principal; stas a su vez llaman a otras funciones ms especficas y as sucesivamente.
La divisin de un programa en unidades ms pequeas o funciones presenta entre otras las
ventajas siguientes:
1. Modularizacin. Cada funcin tiene una misin muy concreta, de modo que nunca tiene un
nmero de lneas excesivo y siempre se mantiene dentro de un tamao manejable. Adems,
una misma funcin (por ejemplo, un producto de matrices, una resolucin de un sistema de
ecuaciones lineales, ...) puede ser llamada muchas veces en un mismo programa, e incluso
puede ser reutilizada por otros programas. Cada funcin puede ser desarrollada y comprobada
por separado.
2. Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma funcin es
utilizada muchas veces, el nmero total de lneas de cdigo del programa disminuye, y
tambin lo hace la probabilidad de introducir errores en el programa.
3. Independencia de datos y ocultamiento de informacin. Una de las fuentes ms comunes de
errores en los programas de computador son los efectos colaterales o perturbaciones que se
pueden producir entre distintas partes del programa. Es muy frecuente que al hacer una
modificacin para aadir una funcionalidad o corregir un error, se introduzcan nuevos errores
en partes del programa que antes funcionaban correctamente. Una funcin es capaz de
mantener una gran independencia con el resto del programa, manteniendo sus propios datos y
definiendo muy claramente la interfaz o comunicacin con la funcin que la ha llamado y con
las funciones a las que llama, y no teniendo ninguna posibilidad de acceso a la informacin que
no le compete.
Funciones y procedimientos Sub en Visual Basic 6.0
En ocasiones se utiliza la palabra genrica procedimiento para ambos. La fundamental
diferencia entre un procedimiento Sub y una funcin es que sta ltima puede ser utilizada en
una expresin porque tiene un valor de retorno. El valor de retorno ocupa el lugar de la
llamada a la funcin donde esta aparece. Por ejemplo, si en una expresin aparece sin(x) se
calcula el seno de la variable x y el resultado es el valor de retorno que sustituye a sin(x) en la
expresin en la que apareca. Por tanto, las funciones devuelven valores, a diferencia de los
procedimientos que no devuelven ningn valor, y por tanto no pueden ser utilizadas en
expresiones. Un procedimiento Sub es un segmento de cdigo independiente del resto, que
una vez llamado por el programa, ejecuta un nmero determinado de ESIISS: Aprenda Visual
Basic 6.0 como si estuviera en Primero pgina 38 instrucciones, sin necesidad de devolver
ningn valor al mismo (puede dar resultados modificando los argumentos), mientras que una
funcin siempre tendr un valor de retorno.
Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las de las variables.
Para llamar desde un formulario a un procedimiento Public definido en otro formulario es
necesario preceder su nombre por el del formulario en que est definido. Sin embargo, si se
desea llamar a un procedimiento definido en un mdulo estndar (*.bas) no es necesario
precederlo del nombre del mdulo ms que si hay coincidencia de nombre con otro
procedimiento de otro mdulo estndar.
Funciones (function)
La sintaxis correspondiente a una funcin es la siguiente:
[Static] [Private] Function nombre ([parmetros]) [As tipo]
[sentencias]
[nombre = expresion]
[Exit Function]
[sentencias]
[nombre = expresion]
End Function
Donde nombre es el nombre de la funcin. Ser de un tipo u otro dependiendo del dato que
devuelva. Para especificar el tipo se utiliza la clusula As Tipo (Integer, Long, Single, Double,
Currency, String o Variant). parmetros son los argumentos que son pasados cuando se llama a
la funcin. Visual Basic asigna el valor de cada argumento en la llamada al parmetro que
ocupa su misma posicin. Si no se indica un tipo determinado los argumentos son Variant por
defecto. Como se ver en un apartado posterior, los argumentos pueden ser pasados por
referencia o por valor.
El nombre de la funcin, que es el valor de retorno, acta como una variable dentro del cuerpo
de la funcin. El valor de la variable expresion es almacenado en el propio nombre de la
funcin. Si no se efecta esta asignacin, el resultado devuelto ser 0 si la funcin es numrica,
nulo ("") si la funcin es de caracteres, o Empty si la funcin es Variant.
Exit Function permite salir de una funcin antes de que sta finalice y devolver as el control
del programa a la sentencia inmediatamente a continuacin de la que efectu la llamada a la
funcin.
La sentencia End Function marca el final del cdigo de la funcin y, al igual que la Exit Function,
devuelve el control del programa a la sentencia siguiente a la que efectu la llamada, pero
lgicamente una vez finalizada la funcin.
La llamada a una funcin se hace de diversas formas. Por ejemplo, una de las ms usuales es la
siguiente:
variable = nombre([argumentos])
donde argumentos son un lista de constantes, variables o expresiones separadas por comas
que son pasadas a la funcin. En principio, el nmero de argumentos debe ser igual al nmero
de parmetros de la funcin. Los tipos de los argumentos deben coincidir con los tipos de sus
correspondientes parmetros, de lo contrario puede haber fallos importantes en la ejecucin
del programa. Esta regla no rige si los argumentos se pasan por valor (concepto que se ver
ms adelante).
En cada llamada a una funcin hay que incluir los parntesis, aunque sta no tenga
argumentos.
Procedimientos Sub
La sintaxis que define un procedimiento Sub es la siguiente:
[Static] [Private] Sub nombre [(parmetros)]
[sentencias]
[Exit Sub]
[sentencias]
End Sub
La explicacin es anloga a la dada para funciones.
La llamada a un procedimiento Sub puede ser de alguna de las dos formas siguientes:
Call nombre[(argumentos)] o bien, sin pasar los argumentos entre parntesis, sino ponindolos
a continuacin del nombre simplemente separados por comas: nombre [argumentos]
A diferencia de una funcin, un procedimiento Sub no puede ser utilizado en una expresin
pues no devuelve ningn valor. Por supuesto una funcin puede ser llamada al modo de un
procedimiento Sub, pero en esta caso no se hace nada con el valor devuelto por la funcin.
El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una variable F que es
la raz cuadrada de un nmero 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
La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas siguientes:
Raiz N, F
Call Raiz(N, F)
En el ejemplo anterior, el resultado obtenido al extraer la raz cuadrada al nmero N se
devuelve en la variable F pasada como argumento, debido a que como se ha mencionado
anteriormente, un procedimiento Sub no puede ser utilizado en una expresin.

FORMULARIOS MLTIPLES
Un programa puede contener ms de un formulario. De hecho, habitualmente los programas
contienen mltiples formularios. Recurdese que el formulario es la ventana de mximo nivel
en la que aparecen los distintos controles.
Sin embargo, un programa siempre debe tener un formulario principal, que es el que aparece
al arrancar el programa. Se puede indicar cul debe ser el formulario principal en el men
Project/Project Properties, en la lengeta General, en la seccin Startup Form. Por defecto, el
programa considera como formulario principal el primero que se haya creado. El resto de
formularios que se incluyan en el programa sern cargados en su momento, a lo largo de la
ejecucin del programa.
Para aadir en tiempo de diseo nuevos formularios al programa, hay que acudir al men
Project/Add Form. La forma de cargar y descargar estos formularios se ha explicado con
anterioridad. Es importante sin embargo recordar que conviene descargar aquellos sub-
formularios que ya no sean de utilidad, ya que as se ahorran recursos al sistema.
Para activar en tiempo de ejecucin un formulario distinto del inicial (o del que est activo en
ese momento), se utiliza el mtodo Show (frmName.Show). El mtodo Hide oculta el
formulario, pero lo deja cargado; el mtodo Activate lo vuelve a mostrar. El mtodo Unload
elimina los elementos grficos del formulario, pero no las variables y el cdigo. El mtodo
Unload Me descarga el propio formulario que lo llama. Para eliminar completamente un
formulario se puede utilizar el comando:
Set frmName = NOTHING que llama al evento Terminate (hay que utilizar tambin los mtodos
Hide o Unload para que desaparezca de la pantalla).
Para referirse desde un formulario a los objetos y variables de otro formulario se utiliza el
operador punto (frmName.Object.Property).

Apertura de controles en forma modal
En ciertas ocasiones se desea que el programa no realice ninguna accin hasta que el usuario
cierre una ventana o formulario en la que se le pregunta algo o en la que tiene que tomar
alguna decisin.
En esos casos, al utilizar el mtodo Show, es necesario utilizar el argumento Style con valor 1.
A esto se le llama mostrar una ventana en forma modal. Esto quiere decir que no se permitir
al usuario hacer activa ninguna pantalla hasta que el usuario cierre esa ventana modal. Esto se
hace as:
frmName.Show 1
o bien,
frmName.Show vbModal

MENUS

Entre las capacidades de Visual Basic 6.0 no poda faltar la de construir mens con gran
facilidad. Sin embargo, hay algunas diferencias respecto al modo el que se construyen los
controles. Para crear mens Visual Basic dispone de una herramienta especial que se activa
mediante el comando Menu Editor del menTools. El cuadro de dilogo que se abre se nuestra
en la ms adelante se ver cmo se utiliza esta herramienta. Los mens presentan sobre los
dems controles la ventaja de que ocupan menos espacio en pantalla, pero tienen el
inconveniente de que sus posibilidades no estn a la vista ms que cuando se despliegan.

MENS CONTEXTUALES (POPUP MENU)
Los mens contextuales aparecen cuando el usuario da un clic sobre un elemento de la
aplicacin. El programa debe reconocer el evento MouseUp o MouseDown, ver si el usuario ha
clicado con el botn derecho (argumento Button igual a 2) y llamar al mtodo PopupMenu,
que tiene la siguiente forma general: PopupMenu menuName [,flags[,x[,y]]] donde menuName
ee el nombre de un men (con al menos un elemento), x e y son las coordenadas base para
hacer aparecer el men contextual, y flags son unas constantes que determinan ms en
concreto dnde y cmo se muestra el men. Las constantes que determinan dnde aparece el
men son: vbPopupMenuLeftAlign (default), vbPopupMenuCenterAlign y
vbPopupMenuRightAlign. Por otra parte vbPopupMenuLeftButton (default) y
vbPopupMenuRightButton determinan si el comando se activa con el botn izquierdo o con
cualquiera de los dos botones. Las constantes se combinan con el operador Or. El nombre del
men que aparece en el mtodo PopupMenu debe haber sido creado con el Menu Editor,
aunque puede tener la propiedad Visible a False, si no se desea que se vea.
Formularios MDI (Multiple Document Interface)
En algunos casos puede ser interesante establecer una jerarqua entre las ventanas o
formularios que van apareciendo sucesivamente en la pantalla del ordenador, de tal manera
que al cerrar una que se haya establecido como principal, se cierren tambin todas las que se
han abierto desde ella y dentro de ella. De esta forma una misma aplicacin puede tener
varios documentos abiertos, uno en cada ventana hija. As trabajan por ejemplo Word y Excel,
que pueden tener varios documentos abiertos dentro de la ventana principal de la aplicacin.
En el mundo de las Windows de Microsoft a esto se llama MDI (Multiple Document Interface).
En Visual Basic 6.0 estos formularios que tienen sub-formularios hijos se conocen como
MDIForms. Los formularios MDI se crean desde el men de Visual Basic 6.0 con el comando
Project/Add MDI Form. En una aplicacin slo puede haber un formulario MDI, pero ste
puede tener varios hijos. Si se quiere que un formulario sea Child, debe tener su propiedad
MDIChild como True.
Si al iniciar una aplicacin el formulario que se carga en primer lugar es un formulario Child, el
formulario MDI se carga al mismo tiempo. Al cerrar un formulario MDIForm se cierran todos
sus formularios Child;
Los formularios Child se minimizan y maximizan dentro de los lmites del formulario MDI.
Cuando estn maximizados, su Caption aparece junto al Caption del formulario
MDI. Los formularios Child no tienen mens propios, sino que sus mens aparecen en la barra
de mens del formulario MDI.
En una aplicacin con un formulario MDI y uno o ms formularios Child, puede haber otros
formularios que no sean Child y que se abren fuera de los lmites del formulario MDI cuando
son requeridos.
INTERCAMBO DINAMICO DE DATOS (Dinamic Data Exchange) DDE
El intercambio dinmico de datos es una utilidad de Windows que utiliza Visual Basic, y nos
permite crear aplicaciones que tomen datos una de otras.
Para pasar datos de una aplicacin a otra se necesitan al menos dos aplicaciones.
Puede darse el caso que una aplicacin est recibiendo datos de otra aplicacin, y a su vez
enve datos a una tercera.
A la aplicacin que enva la informacin se le llama aplicacin servidor, y a la que la recibe,
aplicacin cliente.
La aplicacin servidor debe estar funcionando antes de que la aplicacin cliente le pida la
informacin. Si no es as, se generar un error.
Los datos a traspasar de una aplicacin a otra pueden ser :
Textos, de un Label o un TextBox.
Imgenes, de un PictureBox.
El origen de un intercambio DDE siempre es un formulario. Dentro de este formulario origen
estar el Label, TextBox o PictureBox que contiene la informacin a enviar.
Para indicar que un formulario es origen de informacin para un intercambio DDE se le debe
decir en sus propiedades LinkMode y LinkTopic.
El destino de un texto ha de ser necesariamente un Label, un TextBox, y el destino de un
grfico debe ser un PictureBox.
Cuando se quiere que uno de estos controles sea el destino de un intercambio DDE se debe
indicar en sus propiedades LinkMode, LinkTopic, LinkItem, e indicar el tiempo de espera para
un intercambio en la propiedad LinkTimeout.
Propiedad LinkMode
Tiene distinta forma si se trata de un control (Label, TextBox y PictureBox) un formulario.
Para un formulario tiene dos valores posibles :
0 = None No puede existir comunicacin DDE con ese formulario
1= Source El formulario permite que exista una comunicacin DLL entre uno de sus
controles y otra aplicacin.
Si se establece el valor de esta propiedad a 0 en tiempo de diseo, no podr cambiarse en
tiempo de ejecucin. Si se establece a 1 en tiempo de diseo, se podr cambiar a 0 y volver a
ponerla a 1 en tiempo de ejecucin.
Para un control, la propiedad LinkMode le permite que inicie una conversacin DDE con una
aplicacin servidor, (origen), y cmo iniciarla. Tiene 4 valores posibles :
0=None. No existe comunicacin DDE con ese control
1=Automtico Los datos se traspasarn desde la aplicacin servidor a este control de la
aplicacin cliente cada vez que cambie el dato en la aplicacin servidor (origen)
2=Manual Los datos se traspasarn cuando lo pida la aplicacin cliente (destino),
mediante la orden LinkRequest.
3=Notify Cuando existe un cambio en los datos de la aplicacin origen, sta notifica a la
aplicacin destino que el dato ha cambiado, pero no le enva el dato nuevo. En el control de la
aplicacin destino donde debe llevarse la informacin, se genera el evento LinkNotify, en cuyo
procedimiento podremos escribir el cdigo necesario dependiendo de nuestra aplicacin.
Para traer la informacin, debe ejecutarse la orden LinkRequest.
En tiempo de ejecucin, para un control, esta propiedad es de lectura y escritura, es decir, se
puede usar para saber que valor tiene esta propiedad en un determinado control, o para forzar
esa propiedad a un determinado valor.
La sintaxis de esta propiedad es :
objeto.LinkMode [= nmero]
donde nmero es un entero que especifica el tipo de conexin. (0, 1, 2 3) y objeto es el
nombre del control.
Propiedad LinkTopic
Esta propiedad es de lectura y escritura, tanto para los controles como para los formularios.
Cuando un control destino quiere establecer una comunicacin DDE llama a la aplicacin
origen, y dentro de ella, al formulario que contiene el control cuya informacin debe ser
traspasada (la aplicacin origen puede tener varios formularios). Al formulario podra llamarle
por su nombre, pero no lo hace as. Le llama por un nombre que se le debe poner al formulario
en su propiedad LinkTopic. A este nombre se le denomina Tema.
La propiedad LinkTopic, para un formulario de origen, devuelve o establece el tema al que el
formulario responde en una conversacin DDE.
Sintaxis nombredelformulario.LinkTopic [= tema]
Para un control destino, La propiedad LinkTopic contiene el nombre de la aplicacin y el tema,
ambos separados mediante el carcter | (carcter 124)
Sintaxis nombredelcontrol.LinkTopic [= aplicacionorigen|tema]
El nombre de la aplicacin origen ser el nombre del proyecto de Visual Basic sin la extensin
.VBP (si la aplicacin se est ejecutando en el entorno de desarrollo de Visual Basic), o el
nombre de la aplicacin de Visual Basic sin la extensin .EXE (si se ejecuta como un archivo
ejecutable independiente).
El tema ser el mismo al que responde el formulario donde se encuentra el control que
contiene la informacin a traspasar.
Propiedad LinkItem
La propiedad LinkItem solamente la tiene el control destino de la informacin. No la tiene el
formulario origen. En esta propiedad deber expresarse el nombre del control origen de la
informacin.
Esta propiedad es de lectura y escritura, es decir, tanto sirve para saber el nombre del control
origen de los datos, como para establecerlo en tiempo de ejecucin.
Sintaxis objeto.LinkItem [= cadena]
donde cadena es el nombre del control origen que tiene los datos y objeto es el nombre del
control al que se le esta poniendo la propiedad LinkItem.
Propiedad LinkTimeout

Devuelve o establece la cantidad de tiempo que un control espera una respuesta a un mensaje
DDE.
Sintaxis objeto.LinkTimeout [= nmero]
donde nmero es una expresin numrica que especifica el tiempo de espera en dcimas de
segundo.
El tiempo de respuesta DDE desde aplicaciones origen vara. Esta propiedad se usa para ajustar
el tiempo que un control destino espera la respuesta de una aplicacin origen. Si se usa
LinkTimeout de forma correcta se puede evitar la generacin de un error por Visual Basic si
una aplicacin origen tarda mucho en responder.
Nota : El plazo mayor de tiempo que un control puede esperar es 65.535 dcimas de segundo,
es decir, sobre 1 hora y 49 minutos. Al establecer LinkTimeout a 1 se indica al control que
espere la respuesta en una conversacin DDE durante el mayor plazo de tiempo. El usuario
puede forzar que el control deje de esperar presionando la tecla ESC.
Evento LinkNotify
Ocurre cuando el origen ha cambiado el dato definido por el vnculo DDE si la propiedad
LinkMode del control destino est establecido a 3 (Notificar).
Private Sub objeto_LinkNotify([ndice As Integer])
End Sub
En este procedimiento se puede escribir el cdigo necesario para la aplicacin, sabiendo que
este evento se produce cuando cambia la informacin en origen. Posiblemente no se quiera
depositar de inmediato en el control destino, puesto que si fuese as se habra puesto la
propiedad LinkMode a 1. Cuando se quiera colocar el dato en el control destino, se puede
utilizar el mtodo LinkRequest para obtener el nuevo dato de la fuente.
Mtodo LinkRequest
Pide a la aplicacin origen de una conversacin DDE que actualice el contenido de un control
Label, PictureBox o TextBox.
Sintaxis objeto.LinkRequest
Siendo objeto el nombre del control destino de la aplicacin.
Objeto es el nombre de un control Label, PictureBox o TextBox involucrado en una
conversacin DDE como destino. LinkRequest provoca que la aplicacin origen enve los datos
actuales al objeto, actualizando la propiedad Caption si objeto es un control Label, la
propiedad Picture si objeto es un control PictureBox o la propiedad Text si objeto es un control
TextBox.

Si la propiedad LinkMode del objeto est definida como 1 (Automtico), la aplicacin origen
actualiza objeto automticamente y LinkRequest no es necesario. Si la propiedad LinkMode del
objeto est definida como 2 (Manual), la aplicacin origen actualiza objeto slo cuando se usa
LinkRequest.
Si la propiedad LinkMode del objeto est definida como 3 (Notify), el origen notifica al destino
que los datos han cambiado invocando el mtodo LinkNotify. El destino debe entonces usar el
mtodo LinkRequest para actualizar los datos.
Mtodo LinkSend
Transfiere el contenido de un control PictureBox a la aplicacin destino de una conversacin
DDE.
Sintaxis objeto.LinkSend
Objeto debe ser un control PictureBox de un objeto Form que sea origen de una conversacin
DDE.
Cuando otras aplicaciones establecen vnculos automticos con un objeto Form de su
aplicacin, Visual Basic las notifica cuando el contenido de un control TextBox o Label origen
cambia. Sin embargo, Visual Basic no notifica automticamente a una aplicacin destino DDE
cuando el valor de la propiedad Picture de un control PictureBox origen cambia. Como la
cantidad de datos de un grfico pueden ser muy grande y como no tiene sentido actualizar la
aplicacin destino por cada cambio de pxel de la imagen, Visual Basic requiere el uso del
mtodo LinkSend para notificar explcitamente a las aplicaciones destino DDE cundo cambia
el contenido de un control PictureBox.
Mtodo LinkPoke
Transfiere el contenido de un control Label, PictureBox o TextBox a la aplicacin origen de una
conversacin DDE.
Sintaxis objeto.LinkPoke
Objeto es el nombre del control Label, PictureBox o TextBox involucrado en la conversacin
DDE como destino.
Si objeto es un control Label, LinkPoke transfiere el contenido de la propiedad Caption al
origen. Si objeto es un control PictureBox, LinkPoke transfiere el contenido de la propiedad
Picture al origen. Si objeto es un control TextBox, LinkPoke transfiere el contenido de la
propiedad Text al origen. Normalmente, en una conversacin DDE la informacin fluye de
origen a destino. Sin embargo, LinkPoke permite que un objeto destino suministre datos al
origen. No todas las aplicaciones origen aceptan informacin de esta forma; si la aplicacin
origen no acepta los datos, se produce un error.

También podría gustarte