VBGECap08

Anuncio
Visual Basic - Guía del Estudiante Cap. 8
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
vbNormalFocus
0
1
vbMinimizedFocus
2
Se oculta la ventana y se pasa el foco a la ventana oculta.
La ventana recupera el foco y vuelve a su posición y tamaño
original.
La ventana se muestra como un icono con foco.
LSB
Visual Basic - Guía del Estudiante
Capítulo 8
Página 1
vbMaximizedFocus
vbNormalNoFocus
3
4
vbMinimizedNoFocus
6
La ventana se maximiza con foco.
La ventana vuelve al tamaño y posición más recientes. La
ventana activa actual permanece activa.
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.
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
LSB
Visual Basic - Guía del Estudiante
Capítulo 8
Página 5
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
Label1.BackColor = RGB(255, 0, 0)
End Sub
'Aquí comprobamos los Formularios que tenemos
'abiertos en este momento.
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.
Mensaje de pregunta.
Mensaje exclamativo.
Mensaje de información.
VbCritical
VbQuestion
VbExcalamqtion
VbInformation
ó
ó
ó
ó
16
32
48
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
Aceptar y Cancelar
Anular, Reintentar, Ignorar
Sí, No y Cancelar
Sí y No
Reintentar y Cancelar
Aplicación modal
vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel
vbApplicationModal
ó
ó
ó
ó
ó
ó
ó
0
1
2
3
4
5
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 predeterminado vbDefaultButton2
ó
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
independiente.
LSB
Visual Basic - Guía del Estudiante
Capítulo 8
Página 19
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
Documentos relacionados
Descargar