Está en la página 1de 20

Visual Basic - Guía del Estudiante Cap.

LA FUNCION SHELL
LA FUNCION COMMAND PARA PASAR PARAMETROS
LA FUNCION DoEvents
Cajas de mensaje (Mensaje Box)
Cajas de entrada de datos (Input Box)
El Objeto APP (La Aplicación)

LA FUNCION SHELL

La función Shell se utiliza para ejecutar un programa ajeno a la aplicación que se está
ejecutando. Imaginemos que tenemos una aplicación Visual Basic que necesita, por ejemplo,
establecer una comunicación telefónica, y que esa comunicación telefónica nos la realiza un
programa desarrollado en C++ , llamado MARCADOR.EXE que funciona perfectamente y no
queremos desaprovechar. Imaginemos que ese programa tiene la posibilidad de introducirle el
número telefónico que debe marcar como un parámetro. Este parámetro se le introduce,
supongamos, añadiendo el número al nombre del programa ejecutable. Por ejemplo:

MARCADOR.EXE 1234567

En nuestra aplicación Visual Basic introduciremos una línea invocando la función Shell seguida
del nombre (y Path) del ejecutable y del parámetro que le vamos a introducir al ejecutable:

Shell "C:\VB\MARCADOR.EXE 080"

Mediante esta línea, lo que hacemos es ejecutar el programa MARCADOR.EXE e introducirle


como parámetro el número a marcar. Resultado: el programa MARCADOR.EXE llama al
número 080 (Bomberos), y una vez establecida la llamada podemos pasarle a ese Organismo
datos o lo que nuestra aplicación haga.

Veamos que dice la Ayuda de VB respecto a la Función Shell:

Ejecuta un programa ejecutable.

Sintaxis Variable = Shell ( rutaDeAcceso [, estiloDeVentana] )

donde:

Variable es identificador de la tarea (ID)

rutaDeAcceso es el nombre del programa por Ejecutar (con su Path) y cualquier argumentos
o conmutadores (switches) de línea de comando requeridos; puede incluir directorio o carpeta
y unidad de disco. También puede ser el nombre de un documento que se ha asociado con un
programa ejecutable.

estiloDeVentana es el número correspondiente al estilo de la ventana en la cual se va a


ejecutar el programa. En Microsoft Windows, si se omite estiloDeVentana, el programa se
inicia minimizado con enfoque.

El argumento con nombre estiloDeVentana tiene estos valores:

Constante Valor Descripción

vbHide 0 Se oculta la ventana y se pasa el foco a la ventana oculta.


vbNormalFocus 1 La ventana recupera el foco y vuelve a su posición y
tamaño
original.
vbMinimizedFocus 2 La ventana se muestra como un icono con foco.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 1


vbMaximizedFocus 3 La ventana se maximiza con foco.
vbNormalNoFocus 4 La ventana vuelve al tamaño y posición más recientes. La
ventana activa actual permanece activa.
vbMinimizedNoFocus 6 La ventana se muestra como un icono. La ventana activa
actual permanece activa.
Comentarios

Si la función Shell ejecuta con éxito el archivo nombrado, devuelve la identificación de la tarea
(ID) del programa iniciado. La ID de la tarea es un número exclusivo que identifica el programa
en ejecución. Este número debe ser un Long. Si la función Shell no puede iniciar el programa
nombrado, ocurrirá un error. Si desea conocer el ID de la tarea, realice una aplicación con un
botón (cmbCalculadora) y un label (label1). Ponga en ese botón en su procedimiento click, el
siguiente código. - Observe que esta aplicación inicia la calculadora de Windows -

Private Sub cmbCalculadora_Click()


Dim variable As Long
variable = Shell("C:\windows\calc.exe", 1)
label1.Caption = Str(variable)
End Sub

Posiblemente lo único que le importe sea el ejecutar esa aplicación, sin dar mayor importancia
al ID de la tarea. Utilice una línea con la siguiente expresión :

Shell ("C:\windows\calc.exe"), 1

(Observe en las dos formas de ejecutar la función Shell, que la colocación de los paréntesis y
la coma separadora es distinto.

El programa a ejecutar puede ser un programa Windows caso anterior de la calculadora) o un


programa DOS.

Nota La función Shell ejecuta otros programas de manera asíncrona. Esto quiere decir que
no se puede esperar que un programa iniciado con Shell termine su ejecución antes de que se
ejecuten las instrucciones que siguen a la función Shell en la aplicación. Esto es un gran
inconveniente de la función Shell. Excepto en contadas ocasiones, siempre es necesario
conocer cuando se ha terminado de ejecutar el programa iniciado mediante Shell. Y no es ese
el único problema. La mayoría de los programas DOS que se ejecutan con Shell no se cierran
automáticamente. Esto significa que si podemos evitar el uso de Shell debe evitarse. Pero si
es completamente necesario, tampoco pasa nada. Pero hay que controlar, tanto la terminación
del proceso DOS como su cierre.

Podemos usar para ello APIs. No las hemos explicado todavía. Por eso, y adelantar un poco
como se trabaja con ellas, vamos a presentar, sin grandes explicaciones, lo que hay que hacer
para poder detectar que se ha terminado de ejecutar el programa DOS y para cerrarlo. Verá
mas APIs mas adelante.

El programa DOS elegido para este ejemplo es el popular ARJ.EXE, un compresor de datos
que, sin ánimo de publicidad, es uno de los mejores que existen. Pero trabaja solamente en
DOS. Se utiliza un Procedimiento que he llamado ExecCmdNoFocus, para detectar que el
proceso abierto para comprimir o descomprimir ha finalizado, y proceder a cerrarlo.

La declaración de las Apis y Constantes (En la sección de Declaraciones de un Módulo) es la


siguiente:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As _
String, ByVal lpWindowName As String) As Long

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 2


Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal _


bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode _
As Long) As Long

Declaramos las constantes

Public Const WM_CLOSE = &H10


Public Const STILL_ACTIVE = &H103
Public Const PROCESS_QUERY_INFORMATION = &H400

El Procedimiento podemos ponerlo en el Módulo anterior o en el formulario. Variará el tipo de


declaración de las APIs:

Public Sub ExecCmdNoFocus(ByVal CmdLine As String)

(CmdLine es el parámetro que le vamos a pasar cuando invoque este procedimiento).

'Este procedimiento inicia un proceso en DOS y espera a que termine


'Una vez terminado este proceso, cierra la ventana, que se mostrará minimizada y sin foco

Declaramos las variables locales en ese procedimiento

Dim hProcess As Long 'handle del proceso donde se invoca la función Shell
Dim RetVal As Long 'Valor donde la función GetExitCode coloca el resultado
Dim winHwnd As Long ' manipulador de la ventana que contenga el Caption
‘Finalizado - ARJ
Dim RetValls As Long 'valor de retorno de PostMessage

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(CmdLine, _


vbMinimizedNoFocus))

Do
GetExitCodeProcess hProcess, RetVal
Sleep 100
'en este apartado comprueba si está abierta la ventana "Finalizado - ARJ"
winHwnd = FindWindow(vbNullString, "Finalizado - ARJ")
If winHwnd <> 0 Then
RetValls = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
End If
Loop While RetVal = STILL_ACTIVE

End Sub

La ventana DOS del ARJ tiene el Caption Finalizado - ARJ cuando ya ha terminado el
proceso. En el procedimiento ExecCmdNoFocus se analiza si esa ventana está presente
(prueba de que ARJ ya ha terminado, pues antes de terminar tiene otro Caption).

Para llamar a ese procedimiento hay que citarle por su nombre (ExecCmdNoFocus) que
como lo hemos declarado Public en un Módulo, podemos llamarle desde cualquier parte de la
aplicación. Debemos pasarle el parámetro CmdLine, que será el programa que vamos a
ejecutar con Shell y los parámetros adicionales que este programa necesite (En este caso, el
programa es ARJ.EXE y a continuación debe indicársele el nombre del archivo ya
comprimido, a continuación a para que añada mas ficheros a ese archivo, y a continuación el
nombre de ese fichero o ficheros a añadir :

El parámetro CmdLine del procedimiento es todo lo que va entre paréntesis.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 3


ExecCmdNoFocus ("C:\DirA\ARJ.EXE a C:\DirB\Fichero1.Ext")

NO se preocupe si no lo entiende ahora. Es difícil.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 4


LA FUNCION COMMAND

En el ejemplo anterior usábamos un ejecutable realizado en C++ para marcar un número


telefónico que le introducíamos como parámetro. ¿Podemos hacer eso en una aplicación VB?
La respuesta debe ser SI. Usaremos para ello la función Command. Esta función nos
devuelve el parámetro introducido tras el nombre del ejecutable realizado en VB, cuando
iniciamos la aplicación VB mediante la línea de comandos de Windows (línea Archivo |
Ejecutar del Menú de Windows 3.xx o línea Ejecutar de W95), o desde otra aplicación
utilizando la función Shell.

Veamos también en este caso lo que dice la Ayuda de VB:

Command (Función)

Devuelve parte del argumento de la línea de comandos utilizada para lanzar Microsoft Visual
Basic o un programa ejecutable desarrollado con Visual Basic.

Cuando se inicia Visual Basic desde la línea de comandos, la parte de la línea de comandos
que sigue a /CMD se pasa al programa como un argumento de la línea de comandos. En el
siguiente ejemplo, cmdlineargs representa la información de argumento devuelta por la función
Command.

VB /CMD cmdlineargs

En las aplicaciones desarrolladas con Visual Basic y compiladas en un archivo .EXE,


Command devuelve los argumentos que aparezcan en la línea de comandos tras el nombre de
la aplicación. Por ejemplo:

MyApp cmdlineargs

En la ventana Código, puede usted cambiar el texto devuelto por Command eligiendo
Opciones del proyecto en el menú Herramientas.

Veamos con un par de ejemplos como se pueden usar estas dos funciones:

Marcador Telefónico

Esta aplicación debe marcar un número telefónico. El número a marcar se le pasará como
parámetro tras el nombre de la aplicación. La aplicación ya compilada se llamará
MARCADOR.EXE. Para marcar un número debemos poner, en la línea de Comando de
Windows:

Marcador.exe 1234567

o como ya sabemos, introducirle el parámetro mediante una llamada con la función Shell
desde otra aplicación:

Shell Marcador.exe 1234567

Como no vamos a realizar llamada alguna, sino comprobar que esto puede funcionar, nuestra
pequeña aplicación tendrá solamente un Label llamado FRMARCADORL1 donde
presentaremos el número a marcar. Todo el código necesario se lo metemos en el
procedimiento Activate del formulario:

Private Sub Form_Activate()


FRMARCADORL1.Caption = Command
End Sub

También podemos pasar parámetros a un ejecutable, mediante el Drag & Drop de Windows.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 5


Hemos visto mas atrás como podemos hacer Drag & Drop en una aplicación VB. Pero como
comentábamos, el D&D no es una función de VB, sino de Windows. Y Windows lo utiliza en su
Explorador de Windows para pasar como parámetro a una aplicación el nombre del fichero
que arrastremos hacia el icono que representa a esa aplicación. Como estoy seguro que se ha
liado, vamos con un ejemplo.

Si Vd. hace un editor de textos (Editor.EXE) que soporta un formato determinado (por ejemplo
el RichTextFormat RTF), para ejecutar su programa y meterle como parámetro el nombre del
fichero Carta.RTF de forma que al arrancar lea directamente el fichero Carta.RTF, basta con ir
al Explorador de Windows, abrir la carpeta que contenga Carta.RTF, arrastrar el nombre de
ese fichero y llevarlo al icono que representa a Editor.EXE, que imaginemos que le ha
preparado un acceso directo. Suelte el botón del ratón y su editor se ejecutará, y además, le
meterá como parámetro el nombre del fichero Carta.RTF (con su Path correspondiente) Si Ud.
había previsto la captura del Command tal como se explicó mas atrás, y ha preparado su
aplicación para que tome el contenido de Command y entienda que tiene que abrir y cargar
ese fichero, su aplicación Editor.EXE cargará automáticamente ese fichero. Observe que esta
es la forma de trabajar de los procesadores de texto usados normalmente (Word, WordPerfect,
Write, etc.)

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 6


La Función DoEvents
Cede el control de la ejecución al sistema operativo, para que éste pueda procesar otros
eventos. También nos permite conocer el número de formularios abiertos en una aplicación.

Sintaxis DoEvents
Cede el control al sistema operativo

Sintaxis variable=DoEvents
variable contendrá un número indicando el número de formularios abiertos en
este momento.

La función DoEvents es una instrucción obligada en todos los bucles por condición para evitar
que, en caso de meterse en un bucle infinito, podamos salir de el aunque sea teniendo que
pulsar las teclas Ctrl-Alt-Sup. Si no lleva esa línea DoEvents, es posible que tenga que
resetaear el ordenador. El siguiente bucle se pone para esperar a que el programa envíe un
mensaje a través del control de comunicaciones. Este, una vez terminada la comunicación,
pone la variable Transmitido a True. Imagínese que se corta la comunicación y Transmitido
nunca llega a ser True.

Do Until Transmitido = True


Rem Si Transmitido no llega nunca a ser true, nunca podrá salir del bucle
DoEvents ‘Esta función devuelve el control al sistema operativo cada vez que se ejecuta
‘y puede comprobar si se han pulsado las teclas Ctrl-Alt-Sup
Loop

La función DoEvents devuelve también el número de formularios abiertos por una versión
única de Visual Basic, como la versión estándar de Visual Basic. DoEvents devuelve 0 en el
resto de las aplicaciones.
El control no se devuelve hasta que el sistema operativo haya terminado de procesar los
eventos en cola y que (sólo para Microsoft Windows) se hayan enviado todas las teclas en la
cola SendKeys.
Si partes de su código consumen demasiado tiempo de procesamiento, use periódicamente
DoEvents para ceder el control al sistema operativo, de manera que eventos como la entrada
por el teclado o los clics del mouse (ratón) se puedan procesar sin grandes retrasos. Utilice
esta función sobre todo, cuando tenga bucles demasiado largos que puedan interrumpir la
entrada de datos por teclado o ratón.

Precaución Asegúrese de que el procedimiento que ha cedido el control con DoEvents no se


ejecute de nuevo desde una parte diferente del código antes de que regrese la primera
llamada a DoEvents. Esto podría causar resultados impredecibles. Además, no use DoEvents
si existe la posibilidad de que otras aplicaciones interactúen con el procedimiento, de formas
imprevistas, durante el tiempo en éste ha cedido el control.

EJEMPLO

Para explicar la función DoEvents se ha preparado un pequeño ejercicio con un formulario


principal (Form1) y dos formularios auxiliares, estos últimos solamente a efectos de contar,
mediante DoEvents el número de formularios abiertos.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 7


Se declara la variable PARAR como booleana en las declaraciones del Form1

El botón COMENZAR introduce un bucle que no pararía nunca. También pone Label1 de color
Verde.

Private Sub Command1_Click()


Label1.BackColor = RGB(0, 255, 0)
Do While PARAR = False
N=N+1
If N = 1000 Then 'Cada vez que N=1000 ejecuta la función DoEvents.
DoEvents
N=0
End If
Loop
End Sub

En el formulario Form1, al que previamente le hemos puesto la propiedad KeyPreview a True,


se le ha puesto este código en su procedimiento KeyPress:

Private Sub Form_KeyPress(KeyAscii As Integer)


PARAR = True
Label1.BackColor = RGB(255, 255, 0)
End Sub

Si no hubiésemos puesto DoEvents en una parte del bucle del contador, nunca se podría
acceder al Procedimiento KeyPress del formulario, pues el programa lo único que haría será
dar vueltas en el bucle indefinidamente.

El botón ROJO tiene este código:

Private Sub Command2_Click()


PARAR = True
Label1.Caption = DoEvents 'Aquí comprobamos los Formularios que tenemos
Label1.BackColor = RGB(255, 0, 0) 'abiertos en este momento.
End Sub

Lo mismo ocurriría con el botón ROJO. Al estar el programa haciendo el bucle continuamente,
nunca podríamos entrar el Procedimiento Click de este botón.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 8


Los botones FORM2, cierra Form2, FORM3, cierra Form3, lo único que hacen es mostrar u
ocultar Form2 y Form3 a efectos de poder comprobar cuantos formularios tenemos abiertos.

Private Sub Command4_Click()


Form2.Show
End Sub

Private Sub Command6_Click()


Form2.Hide
End Sub

Private Sub Command5_Click()


Form3.Show
End Sub

Private Sub Command7_Click()


Form3.Hide
End Sub

Por último SALI nos saca del programa. Observe que si no hubiésemos puesto DoEvents en
el medio del bucle, tampoco podríamos salir del programa, puesto que el sistema operativo no
podría comprobar que hemos hecho Click en este botón.

Private Sub Command3_Click()


End
End Sub

Realice esta pequeña práctica con la línea DoEvents del botón COMENZAR activada y
desactivada (Con una comilla simple). Prepárese para, en este último caso, detener la
aplicación pulsando Ctr-Pausa, pues de otra forma no la podrá detener.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 9


LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 10
Presentación Modal de formularios. Ventana modal
(Este tema ha sido tomado parcialmente de las páginas de Mundo Visual - Visual Basic.)

Se dice que un Formulario o cualquier tipo de ventana se presenta de forma Modal cuando un
elemento de ese formulario o ventana toma el foco en el momento de mostrarse, y exige que
se realice alguna gestión sobre ella antes de permitir que otra parte de la aplicación tome de
nuevo el foco. La actuación que generalmente exige un formulario o ventana es ocultarse.

Para ver esto, cree una aplicación con dos formularios. El primero (Form1) puede ser el
formulario donde se realizan todas las operaciones de la aplicación. El segundo (Form2) puede
ser el típico formulario donde se presenta la información del fabricante de la aplicación, al que
se accede normalmente desde el menú, con la palabra Acerca de...

Cree un menú en el primer formulario con esa palabra y ponga este formulario como
formulario inicial de la aplicación. En el procedimiento click de este menú ponga el siguiente
código :

Form2.Show 1

El 1 detrás de la expresión Show indica que el formulario Form2 debe mostrarse de forma
Modal, lo que significa que no se podrá volver a operar con ningún elemento de Form1 hasta
que se oculte o descargue el formulario Form2. Ponga en este Form2 el típico botón de
Aceptar, cuyo código puede ser simplemente :

Me.Hide

Ejecute la aplicación y comprobará como se comporta un formulario mostrado como Modal.

Lo dicho para un formulario puede aplicarse para otro tipo de ventanas. El MessageBox y la
ventana del CommonDialog son dos ejemplos de ventanas modales. Veamos la primera :

La caja de Mensajes. MessageBox o MsgBox


Las cajas de mensajes o MessageBox, tienen una función clara, que es la de mostrar una
determinada información, aviso, o pregunta para que el usuario tenga conocimiento de ella y
actúe.

Hay 2 formas diferentes de mostrar información:

1 - El aviso es sí, que tiene por objetivo mostrar una información de interés.

2 - El aviso con espera de respuesta, que muestra una información esperando que el usuario
seleccione una de las respuestas posibles para que el programa la trate.

Una caja de mensaje, puede ser por ejemplo, la instrucción MsgBox "Hola". Por defecto, la
caja de mensaje será similar a esta:

Debe darse cuenta de algunas cosas:


En primer lugar el mensaje, "Hola" que se escribe a continuación de la palabra MsgBox,
también debe darse cuenta del botón Aceptar que tiene el Focus de la ventana activa y que
sólo hay ese botón, y por último el título de la ventana.
Podemos modificar estos parámetros para alcanzar nuestros objetivos, por eso, vamos a
escribir ahora este código: MsgBox "Hola", ,"Ejemplo" .

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 11


El resultado es:

Como podemos apreciar en el código, la caja de mensaje posee un título Ejemplo y el


mensaje, pero es posible que deseemos escribir un mensaje en varias líneas con salto de
párrafo. Nada tan fácil como este código por ejemplo: MsgBox "Hola" & vbCrLf & "Esto es un
ejemplo.", , "Ejemplo".
El resultado es:

Habrá observado en la expresión anterior que se ha utilizado vbCrLf (Visual Basic Carriage
Return Line Feed, VB retorno de carro y avance de línea) Vea mas adelante la aclaración de
esta expresión. Con ella logramos introducir un salto de línea.

Supongo que se habrá percatado de que entre el mensaje y el título de la ventana, hemos
escrito dos comas, esto es porque entre las comas, debe ir un número que representará el
icono a mostrar. Existen cuatro iconos diferentes además de la posibilidad de no mostrar
ninguno. Los iconos son:

Estos iconos corresponden a los siguientes mensajes:


Mensaje crítico.
Mensaje de pregunta.
Mensaje exclamativo.
Mensaje de información.

(Sólo en W32. En Windows 3.xx dispone de otros diferentes, aunque con el mismo significado)

Para mostrar el icono en cuestión o para que Visual Basic lo entienda, es necesario escribir lo
siguiente:

Mensaje crítico. VbCritical ó 16


Mensaje de pregunta. VbQuestion ó 32
Mensaje exclamativo. VbExcalamqtion ó 48
Mensaje de información. VbInformation ó 64

Note que es lo mismo insertar VbCritical o 16.

Vamos a ver un ejemplo añadiendo un icono al último ejemplo:


MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion , "Ejemplo"

El resultado es:

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 12


Ahora bien, es posible que queramos mostrar algún otro botón que o bien no sea el de Aceptar
o que además del botón de Aceptar haya más botones. Para este propósito, tenemos los
siguientes parámetros:

Aceptar vbOKOnly ó 0
Aceptar y Cancelar vbOKCancel ó 1
Anular, Reintentar, Ignorar vbAbortRetryIgnore ó 2
Sí, No y Cancelar vbYesNoCancel ó 3
Sí y No vbYesNo ó 4
Reintentar y Cancelar vbRetryCancel ó 5
Aplicación modal vbApplicationModal ó 0 (Es la caja de mensaje sin
icono)

La forma de hacer esto es sumar al parámetro del icono que queremos mostrar el valor de los
botones que deseamos que aparezcan.
Así por ejemplo:
MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo , "Ejemplo"
El resultado es:

Aún así, es posible que deseemos que el Focus lo adquiera otro un botón determinado. Por
ejemplo, en este caso el Focus lo tiene el botón Sí, pero es posible que deseemos que lo tenga
el botón No por ejemplo. Esto se consigue con los siguientes parámetros:
Primer botón predeterminado vbDefaultButton1 ó 0
Segundo botón predeterminadovbDefaultButton2 ó 256
Tercer botón predeterminado vbDefaultButton3 ó 512

Por ejemplo: MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo +
vbDefaultButton2, "Ejemplo"

El resultado es:

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 13


Si no se señala el botón predeterminado, Visual Basic seleccionará el primer botón. En caso
de seleccionar como predeterminado un botón que no existe, (por ejemplo el tercero), Visual
Basic seleccionará el primero.

Ahora bien, si decidimos mostrar un mensaje esperando una respuesta, o queremos saber que
botón ha pulsado el usuario, esto lo podemos conseguir mediante el siguiente código de
respuestas:
Aceptar vbOK ó 1
Cancelar vbCancel ó 2
Anular vbAbort ó 3
Reintentar vbRetry ó 4
Ignorar vbIgnore ó 5
Sí vbYes ó 6
No vbNo ó 7

Así por ejemplo, el siguiente código:

Dim Resp As Integer


Resp = MsgBox("Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo +
vbDefaultButton2, "Ejemplo")

If Resp = 6 Then
MsgBox "Ha pulsado SI"
Else
MsgBox "Ha pulsado NO"
End If

Tiene el resultado siguiente:

Si pulsamos el botón Sí obtendremos una acción, y si pulsamos el otro botón otra acción.

Ahora bien, para elegir o seleccionar un evento o acción, el usuario debe saber combinar los
códigos, sabiendo que un MsgBox posee la siguiente sintaxis principal:
MsgBox Mensaje, Botones, Título de la ventana

InputBox

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 14


El InputBox o caja de entrada es otra de las partes más utilizadas para la interacción del
usuario con la aplicación. Es importante que el usuario interactúe con la aplicación para ser el
protagonista de esta.

El InputBox nos permite sacar una caja donde el usuario pasará un parámetro, valor o dato
para que el programa lo trate y lo ejecute.

El mensaje que quiere que aparezca se realiza de forma casi idéntica al MessageBox. Puede
escribirse varias líneas de texto seguidas por la constante de Visual Basic vbCrLf o salto de
línea o párrafo.

La sentencia es: Val = InputBox (Mensaje, Titulo, ValorPredeterminado)

Val almacenará el texto escrito por el usuario, que puede ser una cantidad, cadena string, …
etc.

Por ejemplo:
Dim Val As String

Val = InputBox("Deme su nombre", "Ejemplo")


MsgBox "Su nombre es: " & Val

Tiene como resultado:

(El usuario teclea el nombre - Mundo Visual - y hace click en Aceptar. A continuación se
muestra el MsgBox - 2ª línea del código anterior )

Ahora bien, podemos determinar un texto predeterminado a la caja de entrada, como por
ejemplo:

Dim Val As String

Val = InputBox("Deme su nombre", "Ejemplo", "Mundo Visual")


MsgBox "Su nombre es: " & Val
Obtendremos como resultado:

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 15


Es importante determinar que si el usuario elige el botón Cancelar, el programa devolverá una
cadena de caracteres igual a 0, es decir, Val ="".

La caja de entrada puede ser sin embargo más personalizada mediante dos parámetros como
son la posición de la ventana de entrada de datos en la pantalla. Estos parámetros se ponen a
continuación del ValorPredeterminado.
Por ejemplo:

Dim Val As String


Val = InputBox("Deme su nombre", "Ejemplo", "Mundo Visual", 1200, 1400)
Situará la ventana en el eje de las X a 1200 Twips (posición horizontal) y la Y a 1400 twips
(posición vertical).

Reitero mi agradecimiento a Mundo Visual


http://www.ciudadfutura.com/visualbasic/

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 16


El Objeto App
El objeto App representa a la aplicación. Es el objeto Visual Basic que contiene diversas
informaciones acerca de la Aplicación.

Alguna de estas informaciones se le pueden introducir al proyecto en tiempo de diseño, en el


cuadro de Opciones. Para ello basta con ir, en la Barra de Menú de Visual Basic a
Herramientas | Proyecto | Opciones y hacer click en Proyecto. Otra parte donde se
introducen es en el cuadro de diálogo Opciones de EXE. Para ver este cuadro proceda de la
misma forma que si fuese a crear un archivo .EXE de la Aplicación, Haga click en Archivo |
Crear Archivo EXE de la Barra de Menú, y una vez que le aparezca el cuadro de diálogo para
introducir el nombre, haga click en OPCIONES.

Estas informaciones son las Propiedades del objeto App. Este objeto no tiene Métodos ni
Eventos.

Comments (Propiedad)

Devuelve o establece una cadena que contiene comentarios sobre la aplicación en ejecución.
Es de sólo lectura en tiempo de ejecución.

Sintaxis MiVariable = App.Comments

Se establece esta propiedad en tiempo de diseño usando el cuadro Opciones de EXE.

CompanyName (Propiedad)

Devuelve o establece un valor de tipo String que contiene el nombre de la empresa o del
creador de la aplicación en ejecución. Es de sólo lectura en tiempo de ejecución.

Sintaxis Mivariable = App.CompanyName

Se establece esta propiedad en tiempo de diseño usando el cuadro de Opciones de EXE.


Visual Basic toma por defecto el nombre de la compañía con que se cargó VB.

EXEName (Propiedad)

Devuelve el nombre raíz (sin la extensión) del archivo ejecutable que se está ejecutando
actualmente. Si se utiliza en el entorno de desarrollo, devuelve el nombre del proyecto.

Sintaxis MiVariable = App.EXEName

Esta propiedad se establece bien en el cuadro de Opciones, bien al guardar el archivo .EXE

FileDescription (Propiedad)

Devuelve o establece un valor de tipo String que contiene información de los archivo de la
aplicación en ejecución. Es de sólo lectura en tiempo de ejecución.

Sintaxis Mivariable = App.FileDescription

Se establece esta propiedad en tiempo de diseño usando el cuadro Opciones de EXE.

HelpFile (Propiedad)

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 17


Ya comentada mas atrás. Especifica el nombre (con su Path) del fichero de ayuda. Se
introduce en tiempo de diseño en el cuadro de Opciones. Puede cambiarse en tiempo de
ejecución.

hInstance (Propiedad)

Devuelve el controlador de la instancia de la aplicación. Es un Long

Sintaxis VariableLong = App.hInstance

Cuando se trabaja en un proyecto dentro del entorno de desarrollo de Visual Basic, la


propiedad hInstance devuelve el controlador de la instancia de Visual Basic.

El valor de esta propiedad lo pone directamente Windows.

LegalCopyright (Propiedad)

Devuelve o establece un valor de tipo String que contiene información de derechos de autor
sobre la aplicación en ejecución. Es de sólo lectura en tiempo de ejecución.

Sintaxis Mivariable = App.LegalCopyright

Esta propiedad se establece en el cuadro de diálogo Opciones de EXE.

LegalTrademarks (Propiedad)

Devuelve o establece un valor de tipo String que contiene información de marca registrada
sobre la aplicación en ejecución. Es de sólo lectura en tiempo de ejecución.

Sintaxis MiVariable = App.LegalTrademarks

Establezca esta propiedad en tiempo de diseño usando el cuadro de diálogo Opciones de EXE.

Major Minor (Propiedades)

Devuelven o establecen el número mayor (menor) de la versión del proyecto. Es de sólo


lectura en tiempo de ejecución.

Sintaxis MiVariable = App.Major MiVariable = App.Minor

El valor de estas propiedades están dentro del rango 0 a 9999.


Proporcionan información sobre la versión de la aplicación en ejecución. Se establecen en
tiempo de diseño usando el cuadro de diálogo Opciones de EXE.

Revision (Propiedad)

Devuelve o establece el número de revisión de la versión del proyecto. Es de sólo lectura en


tiempo de ejecución.

Sintaxis MiVariable = App.Revision

Mediante las propiedades Major, Minor y Revision obtenemos la versión del programa. Es muy
util conocer la version del programa para saber si lo hay que actualizar. Por ejemplo, la
instrucción:

MiVariable = App.Major & “.” & App.Minor & “.” & App.Revision

Puede devolver un dato parecido a este:

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 18


MiVariable = 2.1.4

Así conocemos que la versión del programa es la 2.1.4. Estos datos de Major, Minor y
Versión hay que introducirlos en el programa durante el tiempo de diseño. Se usa para ello la
caja de Propiedades del Proyecto

Path (Propiedad)

Especifica la ruta de acceso del archivo .VBP de proyecto cuando se ejecuta la aplicación
desde el entorno de desarrollo o la ruta de acceso del archivo .EXE cuando se ejecuta la
aplicación como un archivo ejecutable.

Esta propiedad es sumamente útil. Cuando se realiza una aplicación, no es prudente obligar al
usuario a meterla dentro de un determinado directorio impuesto por el programador. Si no es
así, no sabremos en qué directorio está el ejecutable, y es muy conveniente saberlo, sobre
todo cuando se utilizan ficheros auxiliares de inicialización, que deberían estar en el mismo
directorio de la aplicación. Si queremos abrir el fichero MiAplicacion.Cfg que estará
obligatoriamente en el mismo directorio de la aplicación (aunque no conocemos su nombre),
solamente tenemos que poner la línea de código : Open App.Path & “\MiAplicacion.ICfg” For
Input as # 1, sin importarnos cual es el nombre real de ese directorio.

PrevInstance (Propiedad)

Devuelve un valor booleano que indica si hay ya en ejecución una instancia anterior de una
aplicación. Es muy utilo saber que hay una instancia del programa en ejecución para impedir
que se vuelva a abrir otra.

Sintaxis VariableBooleana = App.PrevInstance

Puede utilizar esta propiedad en un procedimiento de evento Load para determinar si el


usuario ya está ejecutando una instancia de una aplicación. Dependiendo de la aplicación,
puede ser conveniente que sólo haya una instancia de la misma en ejecución al mismo tiempo
en el entorno operativo Microsoft Windows.

ProductName (Propiedad)

Devuelve o establece un valor de tipo String que contiene el nombre de producto de la


aplicación en ejecución. Es de sólo lectura en tiempo de ejecución.

Sintaxis MiVariable = App.ProductName

Establezca esta propiedad en tiempo de diseño usando el cuadro de diálogo Opciones de EXE.

El valor de la propiedad Revision está dentro del rango 0 a 9999.Esta propiedad proporciona
información sobre la versión de la aplicación en ejecución. Esta propiedad se establece en
tiempo de diseño usando el cuadro de diálogo Opciones de EXE.

StartMode (Propiedad)

Devuelve o establece un valor que determina si una aplicación se inicia como proyecto
independiente o como servidor de automatización OLE. De sólo lectura en tiempo de
ejecución.

Sintaxis VariableLong =App.StartMode

Donde Valor es un número o una constante que determina la forma de inicio :

Constante Valor Descripción

vbSModeStandalone 0 (Predeterminado) La aplicación se inicia como proyecto

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 19


independiente.
vbSModeAutomation 1 La aplicación se inicia como servidor de automatización OLE.

TaskVisible (Propiedad)

Devuelve o establece un valor que determina si la aplicación aparece en la lista de tareas de


Windows.

Sintaxis VariableBooleana = App.TaskVisible

Donde booleano puede tomar los valores True o False :

True (Predeterminado) La aplicación aparece en la lista de tareas de Windows.


False La aplicación no aparece en la lista de tareas de Windows.

La propiedad TaskVisible sólo puede establecerse a False en aplicaciones que no presenten


interfaz, como servidores OLE que no contengan o presenten objetos Form. Mientras la
aplicación disponga de interfaz gráfica, la propiedad TaskVisible se establece automáticamente
a True.

Title (Propiedad)

Devuelve o establece el título de la aplicación que aparecen en la Lista de tareas de Microsoft


Windows. Si se modifica en tiempo de ejecución, los cambios no se guardarán con la
aplicación.

Sintaxis App.Title = “Esto es lo que va a figurar en la barra de Titulo”

Valor será una expresión de cadena que especifica el título de la aplicación. La longitud
máxima de valor es 40 caracteres.

Esta propiedad está disponible en tiempo de diseño en el cuadro de diálogo del comando
Crear EXE del menú Archivo.

Todos estos datos figuran en el archivo de proyecto (.VBP). Puede verse editándolo con el
Block de Notas de Windows, e incluso pueden modificarse estas propiedades directamente
sobre ese archivo.

LSB Visual Basic - Guía del Estudiante Capítulo 8 Página 20