Visual Basic 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 función Shell Shell se utiliza utiliza para para ejecu ejecutar tar un progra programa ma ajeno ajeno a la aplica aplicación ció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 número telefónico telefónico que debe marcar como un parámetro. parámetro. Este parámetro parámetro se le introduce, introduce, supongamos, supongamos, añadiendo 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 va mos 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 parámetro el número a marcar. marcar. Resultad Resultado: o: el programa programa MARCADOR.EXE 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. Variable = Shell ( rutaDeAcceso [, estiloDeVentana] estiloDeVentana ] )
Sintaxis 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 mini mizado con enfoque. El argumento con nombre estiloDeVentana tiene estos valores: Constante
Valor
Descripción
vbHide vbNormalFocus tamaño
0
Se oculta la ventana y se pasa el foco a la ventana oculta. 1 La ventana recupera el foco y vuel ve a su posición y
vbMinimizedFocus
2
LSB
original. La ventana se muestra como un icono con foco.
Visual Basic - Guía del Estudiante
Capítulo 8
Página 1
vbMaximizedFocus vbN vbNorma rmalNo lNoFocus
3 4
vbMi vbMini nimi mize zedN dNoF oFoc ocus us 6
La ventana se se maximiza co con fo foco. La ven ventana vuelv uelve e al tamaño y po posici ición más recie cientes. La ventana activa actual permanece activa. La vent ventan ana a se mues muestr tra a como como un icon icono. o. La vent ventan ana a activ activa a 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 Long . Si la función Shell no puede iniciar el programa en ejecución. Este número debe ser un Long. nombrado, ocurrirá un error. error. Si desea conocer 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. código. - Observe que esta aplicación inicia la calculadora de Windows Private Sub cmbCalculadora_Click() Dim var iable As Long 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 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 paréntesis y la coma separadora separadora es distinto. El programa a ejecutar puede ser un programa programa W indows caso 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. Shell. Excepto Excepto en contada contadas s ocasion ocasiones, es, siempre siempre es necesario 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. 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, 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. 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 abierto para comprimir o descomprimir ha finalizado, finali zado, 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 lpW indowName indowName 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 Declare Function Function OpenPro OpenProces cess s Lib "kernel32 "kernel32"" (ByVal (ByVal dwDesire dwDesiredAcce dAccess ss As Long, Long, ByVal 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 constantes Public Const WM_CLOSE = &H10 Public Const STILL_ACTIVE = &H103 Public Const PROCESS_QUERY_INFORMA PROCESS_QUERY_INFORMATION TION = &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(ByV ExecCmdNoFocus(ByVal al CmdLine As Str ing) (CmdLine es el parámetro que le vamos a pasar 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 Dim Re RetVal As Lo Long 'Valor do donde la la fu funció ción Ge GetEx tExitC itCode co coloca el resultado Dim winHwnd As Long ' manipulador de la ventana que contenga el Caption ‘Finalizado - ARJ Dim RetValls RetValls As Long 'valor 'val or de de retorno de PostMessage Shell(CmdLine, _ hProcess = OpenProcess(PROCESS_QUERY OpenProcess(PROCESS_QUERY_INFORMA _INFORMATION, TION, False, Shell(CmdLine, vbMinimizedNoFocus)) Do GetExitCodeProcess hProcess, RetVal Sleep 100 'en este apartado comprueba comprueba si está abierta la ventana "Finalizado - ARJ" winHwnd winHwnd = FindW indow(vbNullString, "Finalizado - ARJ") If winHwnd winHwnd <> 0 Then RetValls = PostMessage(winHwnd, WM_CLOSE, 0&, 0&) End If Loop While RetVal = STILL_ACTIVE ST ILL_ACTIVE End Sub La ventana ventana DOS del ARJ tiene tiene el Captio Caption n Finalizado - ARJ cuando ya ha terminado el proceso proceso.. En el procedimie procedimiento nto ExecCmdNoFo ExecCmdNoFocus cus se analiza analiza si esa ventana está presen presente te (prueba de que ARJ ARJ ya ha terminado, pues antes de terminar tiene otro Caption). Para llamar a ese procedimiento hay que citarle por su nombre ( ExecCmdNoFocus) ExecCmdNoFocus) que como lo hemos declarado declarado Public en un Módulo, Módulo, podemos llamarle desde desde cualquier parte parte de la aplicación. aplicación. Debemos Debemos pasarle pasarle el parámetro parámetro CmdLine, CmdLine, que será el programa que vamos a ejecutar con Shell y los parámetros adicionales que este programa necesite (En este caso, el nombre re del del archi archivo vo ya programa programa es ARJ.EXE y a contin continuac uació ión n debe debe indicá indicárse rsele le el nomb comprimido, comprimido, a continuación a para que añada añada mas ficheros f icheros 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 resp respue uesta sta debe debe ser ser SI. Usare Usaremo mos s para para ello la función función Command. Command. Esta Esta funció función n nos nos devuelve el parámetro parámetro introducido introducido tras el nombre nombre del ejecutable ejecutable realizado en VB, cuando 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 sigue a /CMD se pasa al al programa como un argumento argumento de la línea de comandos. comandos. En el siguiente ejemplo, cmdlineargs representa representa la información de argumento devuelta por la f unción Command. VB /CMD cmdlineargs En las aplica aplicacio cione nes s desa desarro rrolla llada das s con con Visua Visuall Basic Basic y compila compilada das s en un archivo archivo .EXE, .EXE, Command devuelve los argumentos que aparezcan aparezcan en la línea de comandos tras el nombre de la aplicación. Por ejemplo: MyApp cmdlineargs En la ventan ventana a Códig Código, o, pued puede e uste usted d cambiar cambiar el texto texto devuel devuelto to por por Comman Command d eligie eligiend ndo o 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á paráme metr tro o tras tras el nomb nombre re de la aplic aplicaci ación ón.. La aplic aplicac ació ión n ya comp compila ilada da se llama llamará rá MARCADOR.EX MARCADOR.EXE. E. Para marcar marcar un número número debemos debemos poner, poner, en la línea de Comando 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 pequ pequeñ eña a aplic aplicac ació ión n tend tendrá rá sola solame ment nte e un Labe Labell llama llamado do FRMA FRMARC RCAD ADOR ORL1 L1 dond donde e pres presen enta tare remo mos s el núme número ro a marca marcarr. Todo odo el códi código go nece necesa sario rio se lo mete metemo mos s en el procedimiento Activate del formulario: Private Sub Form_Activate() FRMARCADORL1.Caption FRMARCADORL1.Caption = Command End Sub También podemos pasar parámetros a un ejecutable, mediante el Drag & Drop de Window Wi ndows. s.
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 util iza 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 esa aplicación. 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 ese fichero fichero y llevarlo llevarlo al icono icono que que repres represen enta ta a Editor Editor.EX .EXE, E, que que imagin imaginemo emos s que 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 Path correspondiente) 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 Editor.EXE cargará automáticamente automáticamente ese fichero. Observe que esta es la forma de trabajar de los procesadores procesadores de texto usados normalmente 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 También nos permite conocer el número de f ormularios abiertos en una aplicación.
Sintaxis
DoEvents Cede el control al sistema operativo
Sintaxis
variable= variable =DoEvents variable contendrá contendrá un número indicando el número de f ormularios 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 pulsar las teclas Ctrl-Alt-Sup. Ctrl-Alt-Sup. Si no lleva esa línea línea DoEvents, DoEvents, es posible posible que tenga tenga que resetaear resetaear el ordenador. ordenador. El siguiente bucle se pone para esperar esperar a que el programa envíe un mensaje a través del control de comunicaciones. Este, una una vez terminada la comunicación, pone la variable Transmitido Transmitido a True. Imagínese que que se corta la comunicación y Transmitido Transmitido nunca llega a ser True. Do Until Transmitido = True Rem Si Transmitido no llega nunca a ser true, nunca podrá salir del bucle DoEve DoEvents nts ‘Esta ‘Esta fun funció ción n devu devuelv elve e el el con contro troll al al sist sistema ema opera operativ tivo o cada cada vez vez que que se se eje ejecut cuta a ‘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. SendKeys. Si partes de su código consumen demasiado tiempo de procesamiento, use periódicamente DoEvents para ceder ceder el control al sistema operativo, operativo, de manera que que eventos como la entrada 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 Asegúrese de de que el procedimiento que ha ha cedido el control con con DoEvents no no se ejecute ejecute de nuevo desde desde una parte parte diferente diferente del código código antes antes de que regrese 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 ti empo 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 También pone Label1 de color Verde. Private Sub Command1_Click() Label1.BackColor Label1.BackColor = RGB(0, 255, 0) Do While PARAR = False N=N+1 If N = 10 1000 Then hen 'Cad 'Cada a vez vez qu que N= N=1000 eje ejecu cuta ta la func funció ión n DoEvents. 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 Form_KeyPress(KeyAscii As Integer) PARAR = True Label1.BackColor 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 el1.Captio tion = DoEve Events Label Label1.B 1.Back ackColo Colorr = RGB(25 RGB(255, 5, 0, 0) End Sub
'Aquí comp omprobamos los Formul rmula ario rios que tenemos 'abie 'abierto rtos s en en este este momento momento..
Lo mismo ocurriría con el botón ROJO. Al estar el programa haciendo el bucle continuamente, nunca podríamos 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 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 del botón botón COMENZ COMENZAR AR activad activada a y desa desactiva ctivada da (Con (Con una una comilla comilla simple) simple).. Prepá Prepáres rese e para para,, en este este último último caso, caso, deten detener er 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. f ormularios. Ventana Ventana modal (Este tema ha sido tomado parcialmente de las páginas de Mundo Visual - Visual Basic.) 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 generalmente exige un formulario o v entana es ocultarse. Para ver esto, esto, cree una aplicación aplicación con dos formularios. formularios. El primero (Form1) (Form1) puede puede ser el formulario donde se realizan todas las operaciones operaciones de la aplicación. El segundo 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 Cree un menú en el primer primer formular formulario io con esa palabra palabra y pong ponga a este este formula formulario rio como como formulario inicial de la aplicación. En el procedimiento click de este este menú ponga ponga el siguiente 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. 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 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" "Hola" . Por defecto, la caja de mensaje será similar a esta:
Debe darse cuenta de algunas cosas: En primer lugar el mensaje, "Hola" que "Hola" que se escribe a continuación de la palabra MsgBox , también debe darse cuenta del botón Aceptar botón Aceptar que que tiene el Focus de la ventana activa y que sólo hay ese botón, botón, y por últi mo el título títul o de la ventana. Podemos modificar estos parámetros para alcanzar nuestros objetivos, por eso, vamos a escribir ahora este código: MsgBox "Hola", ,"Ejemplo" . ,"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 observado en la expresión anterior anterior que se ha utilizado vbCrLf vbCrLf (Visual Basic Carriage Carriage Return Line Feed, Feed, VB retorno de carro y avance de línea) línea) Vea mas adelante adelante la aclaración 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 dispone de otros diferentes, aunque 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 exclamati vo. 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 de Aceptar haya 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 Apli plicació ción mod modal
vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbAp bApplic plicat atiionModal
ó ó ó ó ó ó ó
0 1 2 3 4 5 0 (Es la caja aja de men mensaje sin icono)
La forma de hacer esto es sumar al parámetro del icono que queremos mostrar mostrar el v alor 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 bo botón pr predeterminado vb vbDefaultButton2 ó 256 Tercer bo botón predeterminado vbDefaultButton3 ó 512 Por ejemplo: MsgBox "Hola" & v bCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo 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, 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 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í obtendremo Sí obtendremos s 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 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 = Val = InputBox (Mensaje, (Mensaje, Titulo, ValorPredeterminado) alorPredeterminado)
Val almacenará 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 Visual - y hace click en Aceptar. Aceptar. A continuación continuación se muestra el MsgBox - 2ª línea l ínea del código anterior )
Ahora bien, podemos determinar un texto predeterminado a la ca ja 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 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 las X a a 1200 Twips Twips (posición horizontal) y la Y a Y a 1400 twips (posición vertical).
Reitero mi agradecimiento a Mundo Visual 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 cuadro de Opciones. Opciones. Para Para ello ello bast basta a con con ir, ir, en la Barra Barra de Menú Menú de Visu Visual al Basic Basic a Herramienta Herramientas s | Proyecto Proyecto | Opciones y hacer click en Proyecto. Proyecto. Otra parte parte dond donde e se 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 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. 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 t iempo de ejecución. MiVariable MiVariable = App. App.Comments
Sintaxis
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 en tiempo de ejecución. Mi variable = App.CompanyName
Sintaxis
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 co mpañí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, desarrollo, devuelve el nombre del proyecto. MiVariable = App.EXEName
Sintaxis
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 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 comen comentad tada a mas atrás. atrás. Espe Especific cifica a el nombre nombre (con su Path) Path) del f ichero ichero de ayuda 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 VariableLong = App.hInstance
Sintaxis
Cuan Cuando do se trabaj trabaja a en un proyec proyecto to dentr dentro o del entor entorno no de desar desarroll rollo o de Visu Visual al Basic, Basic, la propiedad hInstance devuelve el controlador de la instancia de Visual Visual Basic. El va lor de esta propiedad lo pone directamente W indows. indows. 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. ejecución. Es de sólo lectura en en tiempo de ejecución. Mi variable = App.LegalCopyright
Sintaxis
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. ejecución. Es de sólo lectura en en tiempo de ejecución. MiVariable = App.LegalTrademarks
Sintaxis
Establezca esta propiedad en tiempo de diseño usando el cuadro de diálogo Opciones de EXE.
Major Minor (Propiedades) Devuelven o establec establecen en el número mayor (menor) (menor) de la versión del proyecto. proyecto. Es de sólo lectura en tiempo de ejecución. MiVariable = App.Major
Sintaxis
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 número de revisión de la versión del proyecto. Es de sólo sólo lectura en tiempo de ejecución. Sintaxis
MiVariable = App.Revision
Mediante las propiedades propiedades Major, Minor y Re vision 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 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í conocem conocemos os que que la versión versión del program programa a es la 2.1.4. 2.1.4. Estos Estos datos datos de Major 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 de un determinado directorio impuesto impuesto por el programador. 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 dire direct ctori orio o de la aplic aplicac ació ión. n. Si quer querem emos os abrir abrir el fiche fichero ro MiAp MiAplic licac acio ion. n.Cfg Cfg que que esta estará rá obligatoriamente en el mismo directorio de la aplicación (aunque no conocemos su nombre), solamente tenemos que poner la línea de código código : Open App.Path & “\MiAplicacion.ICfg” For Input as # 1, sin importarnos cual es el nombre nombre real de ese directorio. 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 hay una instancia instancia del programa en ejecución ejecución para impedir que se vuelva a abrir otra. VariableBooleana = App.PrevInstance
Sintaxis
Puede Puede utilizar esta esta propied propiedad ad en un procedimiento procedimiento de evento Load para determinar 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 instancia de la misma en ejecución al mismo tiempo t iempo en el entorno operativo Microsoft W indows. indows. 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 en tiempo de ejecución. MiVariable = App.ProductName
Sintaxis
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. ejecución. Esta propiedad propiedad se establece establece en tiempo de diseño usando el cuadro de diálogo Opciones de EXE. StartMode (Propiedad) Devuelve Devuelve o esta estable blece ce un valor valor que que determ determina ina si una una aplica aplicació ción n se inicia inicia como como proyec proyecto to indep indepen endie diente nte o como como servido servidorr de autom automatiz atizaci ación ón OLE. OLE. De sólo sólo lectur lectura a en tiempo tiempo de ejecución. VariableLong = App.StartMode
Sintaxis
Donde Valor es un número o una constante que determina la forma de inicio : Constante
Valor
Descripción
vbSM vbSMo odeStand tandal alo one
0
(Pr (Prede edeterm termiinad nado) La La apl aplic ica ació ción se se ini inici cia a com como o pro proye yect cto o
LSB
Visual Basic - Guía del Estudiante
Capítulo 8
Página 19
vbSM vbSMod odeA eAut utom omat atio ion n
1
independiente. La apli aplica caci ción ón se inic inicia ia como como servi servido dorr de autom utomat atiz izac ació ión n OLE. OLE.
TaskVisible (Propiedad) Devuelve o establece un valor que determina si la aplicación aparece en la lista de tareas de Windows. VariableBooleana = App.TaskVisible
Sintaxis
Donde booleano puede tomar los valores True o False : True False
(Predeterminado) La aplicación aparece aparece en la lista de tareas de de Windows. 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, interfaz, como servidores OLE OLE que no contengan contengan o presenten presenten objetos objetos Form. Mientras Mientras la aplicación disponga de interfaz gráfica, la propiedad TaskVisible 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 Windows.. Si se modifica modifica en tiempo tiempo de ejecuci ejecución, ón, los cambios cambios no se guarda guardarán rá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 estos datos figuran en el archivo de proyecto (.VBP). Puede verse editándolo 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