Estos objetos que tienen sus propiedades y métodos definidos como cualquier otro
objeto, son fundamentales para utilizarlos en tiempo de ejecución, y nos
permiten obtener información y realizar tareas específicas y variadas como por
ejemplo:
Trabajar con la pantalla (objeto Screen), obtener datos referentes a nuestra
aplicación ( objeto App), el objeto Clipboard ( para trabajar con el
portapapeles de windows) y algunos otros
El objeto App: Posee
una serie de propiedades para obtener información de nuestra aplicación.
Propiedad Path
Esta propiedad nos devuelve una cadena con la ruta donde se encuentra el
ejecutable de nuestro programa. Esta propiedad es de suma importancia, ya que
nosotros siempre debemos "programar las rutas" de nuestra aplicación de forma
relativa, es decir en donde realmente se encuentre nuestra aplicación,
ya que el usuario puede instalar nuestro programa en un directorio cualquiera y
de este modo si nosotros hemos puesto, por ejemplo de un archivo externo en una
ruta absoluta (por ejemplo "c:\Archivos de programa", puede darse el caso de que
la aplicación no encuentre dicho archivo ya que se ha instalado en otro
directorio, ejecutarse en otra plataforma, etc.
Para resolver estos problemas sobre las referencias a las rutas de archivos,
podemos utilizar el objeto
App.path, y lo que hace esta propiedad es devolvernos el path de
nuestra aplicación.
Ejemplo
ruta = App.Path & "\config.dat"
En el ejemplo anterior, si nuestra aplicación contiene un archivo de
configuración del programa, un gráfico o cualquier otro fichero, para poder
localizarlo lo hacemos mediante elobjeto App.path mas
el archivo que deseamos e interponiéndole la barra invertida.
Nota: lo que hay que tener en cuenta para que no se produzca un
error en tiempo de ejecución, es que el objeto App.path nos devuelve solo el
nombre de directorio de nuestra aplicación pero sin
la barra invertida al final, es decir que si deseamos por ejemplo hacer
referencia a un archivo de nuestra aplicación para trabajar con él, debemos
agregarlo nosotros.
Otro ejemplo podría ser el siguiente, supongamos que tenemos un programa que
carga una imagen en un formulario. Si nosotros hacemos una referencia al archivo
de imagen mediante una ruta absoluta estaremos cometiendo un error, lo correcto
sería
Dim Ruta As String
Ruta = App.Path & "\imagen.gif"
Me.Picture = LoadPicture(Ruta)
Propiedad PrevInstance del objeto App
Esta propiedad se utiliza para comprobar si nuestro programa ya está cargado en
memoria devolviéndonos un valor de tipo boolean,
True en caso correcto o False si no está abierto o cargado en memoria.
La propiedad PervInstance es
importante ya que un usuario, por error, puede abrir mas de una instancia
de la aplicación, algo que no tendría mucho sentido en la mayoría de
los casos.
De este modo si se intenta abrir el programa mas de una vez, podemos mostrar un
mensaje informativo y descargar la aplicación mediante la sentencia End, o no
mostrar nada y terminar la ejecución. Este ejemplo muestra un mensaje cuando se
intenta abrir mas de una ves, y luego de aceptar el mensaje se cierra con End.
Private Sub Form_Initialize()
If App.PrevInstance = True Then
MsgBox " La aplicación ya se encuentra cargada en memoria", vbInformation
' Finaliza el programa
End
End If
End Sub
Otras propiedades del objeto App
-
ExeName: Con ExeName podemos recuperar el nombre del
ejecutable de la aplicación en tiempo de ejecución
-
Hinstance: Esta propiedad nos retorna el handle o
manipulador de nuestra aplicación. Mediante esta propiedad y algunas Apis
relacionadas con este tema podemos controlar nuestra algunas cosas
-
Taskvisible: es una propiedad de tipo boolean que se
utiliza para determinar si nuestra aplicación aparecerá en la lista de
tareas. Esta propiedad solo funciona si nuestra aplicación tiene la
propiedad visible en false
Objeto Screen
Con el objeto Screen se
puede determinar y obtener información sobre las fuentes instaladas en el
sistema operativo, la resolución actual de la pantalla, el formulario y/o
control que está activo,
Un ejemplo para poder obtener la resolución del monitor:
Dim Ancho As Integer
Dim Alto As Integer
Ancho = (Screen.Width / Screen.TwipsPerPixelX)
Alto = (Screen.Height / Screen.TwipsPerPixelY)
MsgBox "La resolución en Pixeles del monitor es de: " & vbNewLine & _
"Ancho: " & Ancho & vbNewLine & _
"Alto: " & Alto, vbInformation
Para obtener el alto y el ancho en pixeles debemos hacer una simple conversión
ya que mediante las propiedades width y height obtenemos
el ancho y el alto del monitor pero expresado en twips,
para obtener ese valor en pixeles hay que dividirlo por la propiedad
TwipsPerPixelX y TwipsPerPixelY, que son propiedades que las podemos acceder
desde el objeto Screen
Ejemplo para poder obtener una lista de las fuentes instaladas en el sistema
El objeto screen posee un objeto o colección llamado Fonts que es un vector que
contiene las fuentes del sistema y una propiedad llamada FontCount para saber la
cantidad de fuentes.
Ejemplo para cargar las fuentes del sistema en un control ListBox
Dim La_Fuente As Integer
'Recorre las fuentes
For La_Fuente = 0 To Screen.FontCount - 1
'Añade el nombre de la fuente al control
List1.AddItem Screen.Fonts(La_Fuente)
Next La_Fuente
Mediante 4 líneas de código tenemos un control ListBox que muestra el nombre de
todas las fuentes del sistema.
Nota: Para poder
obntener las fuentes pero de una impersora, se realiza igual que en el paso
anterior , con la diferencia que en ves de usar el Objeto Screen, se usa el
Objeto Printer.
Por ejemplo
Colocar un ComboBox en el formulario donde se listarán las impresoras
instaladas, y en agregar un Control ListBox donde agregarán las fuentes

Código fuente en el formulario
Option Explicit
Private Sub Combo1_Click()
Ver_fuentes Combo1.ListIndex
End Sub
Private Sub Form_Load()
Dim ObjPrinter As Printer
' Recorre la lista de impresoras instaladas _
en el sistema y agrega el nombre en el combo
For Each ObjPrinter In Printers
Combo1.AddItem ObjPrinter.DeviceName
Next
End Sub
' Enumera las fuentes en el ListBox de la _
impresora seleccionada en el Combo
Sub Ver_fuentes(Impresora As String)
' Referencia a la impersora
Set Printer = Printers(Impresora)
Dim i As Integer
List1.Clear
' Lista las fuentes soportadas de la impresora
For i = 0 To Printer.FontCount - 1
List1.AddItem Printer.Fonts(i)
Next
End Sub
El objeto ClipBoard
Con ClipBoard podemos trabajar con el portapapeles de
windows, ya sea para establecer o recuperar datos del mismo.
Ejemplo:
Para recuperar el texto guardado en el portapapeles:
Dim cadena As String
cadena = Clipboard.GetText
MsgBox cadena
Con este otro ejemplo podemos grabar o asignar un texto en el portapapeles
Clipboard.SetText "cadena de texto a grabar o variable string"
Con el método Clear del
objeto ClipBoard podemos borrar el contenido del portapapeles (no requiere
ningún parámetro)
Clipboard.clear
Con la siguiente línea podemos copiar una imagen del portapapeles a un control
picture, si es que la hay, usando el método
Getdata del objeto Clipboard
Picture1.Picture = Clipboard.GetData
Lo siguiente copia una imagen cargada en un control de imagen al portapapeles,
es decir hacer lo contrario:
Clipboard.SetData Picture1.Picture
Menues en visual basic
Ejemplo para crear menúes y menúes contextuales o también llamados menú PopUp,
que son aquellos que se despliegan con el botón derecho del mouse.
Casi todas las aplicaciones por mas pequeñas que sean, poseen un acceso a
determinadas o casi todas las opciones de un programa por medio de un menú.
Si bien las opciones las podemos encontrar en la interface misma de la
aplicación, ya sea por medio de botones, barras de herramientas etc.., nunca
está demás que estén a mano por medio de un menú. Visual Basic incorpora una herramienta llamada editor
de menúes para poder
crearlos.
Nota: El editor de Manúes se encuentra en el menú
herramientas y solo está
disponible desde la vista diseño del formulario, es decir que si estás
visualizando la ventana de código o un módulo de código deberás cerrarlas y
dejar visible el formulario que estés diseñando para que la opción esté
habilitada.
Los menues de cabecera y submenues
Los menúes de cabecera son los menúes principales que contienen otros submenues.
Por ejemplo en el menú del internet explorer, el menú archivo es el menú de
cabecera o de primer nivel, y las opciones internas de este (abrir, guardar,
imprimir, cerrar, etc...) son los submenues que están en un nivel por debajo del
menú archivo.
Crear un menú
-
El primer paso es diseñar un buen diagrama que incluya la mayoría de las
opciones, para que el usuario las pueda tener a mano también en el menú.
-
Si observas otras aplicaciones, estas respetan el orden y ubicación de
sus menues, es decir que si estás creando un programa que tiene opciones
para imprimir una hoja, esta se encontrarán en la sección del menú archivo,
si tienes opciones de edición del documento como cortar copiar, pegar ,
seleccionar todo, etc..., las encontrarás en el menú "edición", si deseas
crear un formulario "acerca de..", lo ubicarás en el menú ayuda con el
"nombre acerca de...". esta forma de diseño y diagramación es fundamental
para que el programa sea estándar y aceptado por todos, por llamarlo de
alguna manera, ya que si bien nosotros recordamos el nombre y donde se
encuentra ubicada cada opción, un usuario o tercero debe resultarle lo mas
sencillo posible el acceso a las opciones del mismo.
Agregar elementos en un menú
El siguiente ejemplo consiste en un formulario que contiene solo un control
label que nos mostrará una leyenda con el texto del menú que seleccionamos o
presionamos.
El menú estará compuesto por 3 menues de cabecera, el primero llamado "Archivo",
el segundo "Edición" y el último "Ayuda". A su vez cada menú tendrá los
siguientes submenues:
-
Archivo :
Este menú contendrá los submenues " Abrir ", " Guardar ", " Imprimir " y "
Cerrar "
-
Edición: Contendrá los submenues " Cortar ", " Copiar
", " Pegar ", " Seleccionar todo "
-
Ayuda :
Tendrá los submenues " Ayuda " y " Acerca de.. "

El cuadro de diálogo del editor de menú de visual basic posee los siguientes
campos para rellenar. Algunos son opcionales y otros son obligatorios, como la
propiedad Caption y Name:
-
Caption: en este campo debemos colocar la leyenda que
mostrará el menú, es decir el texto que mostrará el mismo.
-
Name: en este campo debemos introducir un nombre para cada
menú. Este es obligatorio y no puede estar duplicado ya que por medio de
este nombre identificaremos al menú en el código.
-
Index: en este campo que es opcional podemos introducir un
número para formar vectores de menues o arreglos de menues, en este ejemplo
no se usa, por ejemplo para crear menues en forma dinámica en tiempo de
ejecución
-
helpcontextid: este campo opcional podemos introducir un n°
para el tópico de ayuda, por si el usuario presiona la tecla F1 justo cuando
está posicionado en el menú.
-
Shortcut: Podemos ingresar una tecla de acceso rápido al
menú para que se despliegue el mismo automáticamente, como por ejemplo Ctrl
+ a, Ctrl + b, etc...
-
Checked: este campo indica si el menú tendrá un tilde a la
izquierda o no. Si está en true lo muestra si está en False no. El campo es
de tipo opcional.
-
Enabled :
propiedad booleana que determina si el menú está habilitado o no. Esta
propiedad es exactamente igual a la propiedad Enabled de cualquier control
de visual basic. El campo por defecto, mejor dicho la propiedad está en True
-
Visible :
propiedad opcional y de tipo booleana que determina si el menú estará
visible o no. Esta propiedad es ideal para crear los menues contextuales o
PopUp (mas adelante hay un ejemplo de como crear uno).
Pasos a seguir:
-
Una vez abierto el editor de menú, hay que ingreasar los elementos que
componen el mismo. Para crear el menú "Archivo" que es un menú de cabecera o
de nivel superior, debemos ingresar en la propiedad Caption la cadena &Archivo.
Ahora le asignaremos un nombre en el campo Name.
G Generalmente se suele utilizar en este campo el mismo nombre del menú pero
con el prefijo mnu para luego poder distinguirlo fácilmente en el código.
Entonces ingresamos en este campo mnuarchivo
-
El segundo paso será ingresar los submenues que están por debajo del
menu archivo. Para ello presionamos el botón "siguiente" donde ingresaremos
el menú "Abrir". como este es un submenú debemos indicarlo con el botón que
tiene una flecha hacia la Derecha. Al presionarlo ahora el mismo se marca
con una doble comilla (""""), para indicarnos que este menú deriva o está
contenido en el menú de cabecera "Archivo". Ahora pasamos a ingresarle el
nombre y la leyenda del menú. En la propiedad Captioningresamos &Abrir y
en el campo Name : mnuabrir.
-
Ahora repetimos los pasos anteriores para ingresar los submenues
restantes del menú Archivo.
-
Si habrás observado los clásicos menues de las aplicaciones, los
submenues se agrupan en secciones. Por ejemplo en el menú archivo del
internet explorer, el submenú Salirestá
separado del resto por una línea. para lograr esto se debe crear un submenú
como cualquier otro justo arriba del menú que queremos que aparezca la línea
divisoria, y en la propiedad caption del
mismo le colocamos el caracter menos -
-
Ahora ingresaremos el código para que muestre la leyenda en el control
Label cada vez que presionemos un menú.
-
Como habrás notado, el menú se va incorporando al formulario en tiempo
de diseño como cualquier otro control de visual basic. Para ingresar el
código necesario diremos que cada menú responde a un evento llamado click y
que se dispara cuando presionamos el menú con el mouse o cuando le damos un
enter, para ingresar el código en el menú "Abrir" le damos un click en el
mismo menú desde la ventana de diseño. Una vez abierta la ventana de código
aparecerá una rutina como la siguiente:
Private Sub mnuabrir_click()
End Sub
Ahora dentro del evento Click del menú colocamos lo siguiente para que la
etiqueta muestre la propiedad caption del menu abrir al pulsar sobre el menú
Label1.Caption = mnuarchivo.Caption
Nota: cabe aclarar que estas rutinas las podemos invocar o
llamar como cualquier otra rutina de código , por ejemplo en el caso anterior,
por ejemplo si coloco esto en un botón se llamaría al procedimiento Click del
menú y se ejecutaría el código.
Call mnuabrir_click
Esto es útil si tenemos una barra de herramientas, ya que no tendremos que
escribir código 2 veces, y podemos usar un solo procedimiento haciendo una
simple llamada al mismo
Menues contextuales o popup menú
Los menues contextuales,
esos que se despliegan cuando presionamos el botón derecho del mouse, son
simples menues pero con la diferencia de que los mismos poseen la propiedad Visible en False,
y luego se visualizan utilizando el método PopUpMenu
El método PopUpMenu ,
se encuentra disponible solo para los formularios.
Los parámetros de este método son los siguientes:
Nombreformulario.PopUpMenu "Elmenu", "flags", x , y, opcion
-
Menu: este es el menú popup que debe estar en el
formulario, es decir el nombre
-
Flags: este parámetro indica la apariencia del menú en el
formulario. Acá podemos utilizar las siguientes constantes para ubicar el
menú:
vbpopupmenuleftalign ubica
el menú en el lado izquierdo con respecto a x.
vbpopupmenucentertalign alinea
en el centro de la coordenada x. vbpopupmenurightalign lo
alinea en el lado izquierdo. En la mayoría de los casos este parámetro no se
utiliza.
-
X e Y: podemos indicar, aunque no se suele utilizar, las
posiciones x e y donde debe desplegarce el menú.
-
opcion: en este parámetro opcional , podemos indicar el
nombre de un submenú para que aparezca resaltado en negrita.
Si bien el menú PopUp lo podemos llamar en cualquier momento, lo mas común es
utilizarlo y desplegarlo cuando el usuario presiona el botón derecho sobre un
control, formulario etc.
Sabiendo esto , para desplegarlo por ejemplo cuando el usuario presiona el botón
sobre un área del formulario, podemos utilizar el evento MouseUp o MouseDown del
mismo y consultar la variable Button del
procedimiento y mediante una estructura IF - Then comprobar si el botón que
presionamos es el derecho , utilizando las constantesVbRightButton, vbLeftButton
Ejemplo para crear un menú PopUp
Crear un menú llamado mnuContextual con la propiedad visible en False y pegar
esta rutina en el formulario:
Private Sub form_mouseup(button As Integer, shift As Integer, x As Single, y As Single)
' Consultamos si el botón presionado es el derecho
If button = vbRightButton Then
' Depliega el menú PopUP
Me.PopupMenu mnucontextual
End If
End Sub
|