# Visual Basic

Visual Basic (VB) es un lenguaje de programación dirigido por eventos. Desarrollado por Alan Cooper para Microsoft, este lenguaje de programación es un dialecto de BASIC con importantes agregados. Su primera versión fue presentada en 1991, con la intención de simplificar la programación utilizando un ambiente de desarrollo.
La última versión fue la 6, liberada en 1998, para la que Microsoft extendió el soporte hasta marzo de 2009
En 2001 Microsoft propuso abandonar el desarrollo basado en la API Win32 y pasar a un framework o marco común de librerías, independiente de la versión del sistema operativo .NET Framework, a través de Visual Basic .NET (y otros lenguajes como C Sharp (C#) de fácil transición de código entre ellos); fue el sucesor de Visual Basic 6.
Aunque Visual Basic es de propósito general, también provee facilidades para el desarrollo de aplicaciones de bases de datos usando Data Access Objects, Remote Data Objects o ActiveX Data Objects.
Visual Basic contiene un entorno de desarrollo integrado o IDE que integra editor de textos para edición del código fuente, un depurador, un compilador (y enlazador) y un editor de interfaces gráficas o GUI.

## Historia

Todas las versiones de Visual Basic para Windows son muy conocidas, aunque la Microsoft Visual Basic 1.0 desarrollada para el sistema operativo MS-DOS (ediciones Profesional y Estándar), que data de 1992, fue menos difundida. Esta proveía un entorno que, aunque en modo texto, incluía un diseñador de formularios en el que se podían arrastrar y soltar distintos controles.
La última versión que únicamente generaba aplicaciones de 16 bits fue la 3.0 y no incluía una biblioteca detallada de componentes para toda clase de usos. Durante la transición de los sistemas Windows 3.11 a Windows 95, en 1995: hizo su aparición la versión 4.0 de Visual Basic; esta podía generar programas tanto de 16 como de 32 bits, a partir del mismo código fuente, aunque a costa de un gran aumento en el tamaño de los archivos necesarios en tiempo de ejecución ("runtime"). Además, se sustituyeron los controles denominados VBX por los nuevos OCX. Con la siguiente versión, la 5.0, se estuvo a punto de implementar por primera vez la posibilidad de compilar a código nativo, obteniendo una mejora de rendimiento considerable. Tanto esa como la sucesora 6.0 soportaban ciertas características propias de los lenguajes orientados a objetos, pero carecían de algunas importantes, tales como herencia y sobrecarga; pero, de hecho, no fue pensado como lenguaje orientado a objetos. La versión 6.0, que puede generar código ejecutable directo en 32 bits, todavía continúa utilizándose masivamente, y es compatible con las últimas versiones de los sistemas Windows, como Windows 7 y Windows 8.
Visual Basic evolucionó para integrar la plataforma .NET; allí perdió su propia identidad como lenguaje único adquirible, pasando a integrar un paquete de productos, llamado precisamente Microsoft .NET; dentro de ese paquete o framework se encuentra el nuevo y llamado Visual Basic .NET, que trabaja sobre el entorno Microsoft Visual Studio. Esta nueva versión del lenguaje posee profundas diferencias en la forma de programar respecto de Visual Basic 6, pero gran semejanza en su sintaxis básica.
Cabe mencionar que, aunque fue menos conocido, se desarrolló también una versión gratuita de Visual Basic 5.0, orientada al desarrollo de controles y componentes; su nombre específico era Microsoft Visual Basic 5.0 Control Creation Edition (Visual Basic 5 CCE). También hubo versiones orientadas al desarrollo de aplicaciones para dispositivos móviles basados en Windows CE y Pocket PC, conocidas como Embedded (Visual Basic).
* Versiones de Visual basic
* Visual Basic 1.0 para Windows se liberó en mayo de 1991.
* Visual Basic 1.0 para MS-DOS fue liberada en septiembre de 1992. Poco popular, este lenguaje no era compatible con Visual Basic para Windows, ya que constituía en realidad la siguiente versión de los compiladores BASIC vigentes para DOS, denominados QuickBASIC y BASIC PDS (Profesional Development System). Usaba una interfaz de texto, con caracteres ASCII extendidos que daban la apariencia de una interfaz gráfica.
* Visual Basic 2.0 Venía en versiones Standard y Professional. El entorno de programación era más fácil de usar que el anterior, y su velocidad de proceso fue mejorada. En particular, los formularios se convirtieron en objetos instanciables, sentando así los conceptos fundamentales para módulos de clase, que más tarde se ofrecerían en la versión 4.
* Visual Basic 3.0 salió al mercado en verano de 1993, en versiones Standard y Profesional. Incluía la versión 1.1 de Microsoft Jet Database Engine, que permitía acceso a bases de datos Access.
* Visual Basic 4.0, surgida en agosto de 1995, fue la primera versión que generaba aplicaciones tanto de 16 como de 32 bits para Windows. Había incompatibilidades entre las distintas realeases de esta versión que causaban fallas de instalación y problemas de operación. Mientras las anteriores utilizaban controles VBX, con la 4.0 se comenzaron a utilizar controles OLE en archivos OCX, que más tarde se llamarían controles ActiveX.
* En febrero de 1997, Microsoft lanzó Visual Basic 5.0, versión que generaba programas de 32 bits exclusivamente. Los programadores que todavía preferían desarrollar aplicaciones en 16 bits debían necesariamente utilizar VB 4.0, siendo transportables en código fuente a VB 5.0 y viceversa. En la versión 5 se tenía la posibilidad de crear controles personalizados; también permitía compilar a código ejecutable nativo de Windows, logrando con ello incrementar la velocidad de ejecución de los programas generados, más notablemente en los de cálculo.
* Visual Basic 6.0, salido a mediados de 1998, muy mejorado, incrementó el número de áreas e incluyó la posibilidad de crear aplicaciones basadas en Web. Microsoft retiró el soporte de VB6 en marzo de 2008, pero a pesar de ello las aplicaciones que genera son compatibles con plataformas más modernas, como Windows Vista, Windows Server 2008, Windows 7, Windows 8 y Windows 10.
El soporte estándar para Microsoft Visual Basic 6.0 finalizó el 31 de marzo de 2005, pero el extendido terminó en marzo de 2008.
La comunidad de usuarios de Visual Basic expresó su grave preocupación y se firmó una petición para mantener el producto vivo. Microsoft se ha negado hasta el momento a cambiar su posición sobre el asunto.
Irónicamente, en esa época (2005) se da a conocer que el software antiespía ofrecido por Microsoft, "Microsoft AntiSpyware" (parte de la GIANT Company Software), fue codificado en Visual Basic 6.0; su posterior sustituto, Windows Defender, fue reescrito en código C++.

## Características

Los compiladores de Visual Basic generan código que requiere una o más librerías de enlace dinámico para que funcione, conocidas comúnmente como DLL (sigla en inglés de Dynamic-Link Library); en algunos casos reside en el archivo llamado MSVBVMxy.DLL (siglas de "MicroSoft Visual Basic Virtual Machine x.y", donde x.y es la versión) y en otros en VBRUNXXX.DLL ("Visual Basic Runtime X.XX"). Estas bibliotecas DLL proveen las funciones básicas implementadas en el lenguaje, conteniendo rutinas en código ejecutable que son cargadas bajo demanda en tiempo de ejecución. Además de las esenciales, existe un gran número de bibliotecas del tipo DLL con variedad de funciones, tales como las que facilitan el acceso a la mayoría de las funciones del sistema operativo o las que proveen medios para la integración con otras aplicaciones.
Dentro del mismo Entorno de desarrollo integrado (IDE) de Visual Basic se puede ejecutar el programa que esté desarrollándose, es decir en modo intérprete (en realidad pseudo-compila el programa muy rápidamente y luego lo ejecuta, simulando la función de un intérprete puro). Desde ese entorno también se puede generar el archivo en código ejecutable (exe); ese programa así generado en disco puede luego ser ejecutado sin requerir del ambiente de programación (incluso en modo stand alone), aunque sí será necesario que las librerías DLL requeridas por la aplicación desarrollada se encuentren también instaladas en el sistema para posibilitar su ejecución.

### Entorno de desarrollo

Existe un único entorno de desarrollo para Visual Basic, desarrollado por Microsoft: Microsoft Visual Basic x.0, correspondientes a versiones desde la 2.0 hasta la 20.0, (con respectivas diferencias entre versiones del lenguaje).
El entorno de desarrollo es muy similar al de otros lenguajes. Realizando una instalación típica del producto, las características básicas se presentan de la siguiente forma:
* En la parte superior aparecen tres elementos, en este orden: la barra de título donde figura el nombre del proyecto en curso y su estado (diseño o ejecución); la barra de menú con 13 opciones desplegables y una barra de herramientas; esta última se puede personalizar, posibilitando la inclusión de prácticamente la totalidad de los comandos del IDE.
* En la parte central, cubriendo la franja de mayor área, se encuentra el espacio de trabajo. Este incluye y muestra las ventanas del proyecto, las vistas del código fuente de los módulos, los objetos y los controles que contienen las ventanas de la aplicación y el panel de controles.
** El panel de controles, que aunque es móvil normalmente está ubicado a la derecha, por defecto cuenta con los siguientes controles:
*** PictureBox: Caja de imágenes
*** Label: Etiqueta
*** TextBox: Caja de texto
*** Frame: Marco
*** CommandButton: Botón de comando
*** CheckBox: Casilla de verificación
*** OptionButton: Botón de opción
*** ComboBox: Lista desplegable
*** ListBox: Lista
*** HScrollBar: Barra de desplazamiento horizontal
*** VScrollBar: Barra de desplazamiento vertical
*** Timer: Temporizador
*** DriveListBox: Lista de unidades de disco
*** DirListBox: Lista de directorios
*** FileListBox: Lista de archivos
*** Shape: Figura
*** Line: Línea
*** Image: Imagen
*** Data: Conexión a origen de datos
*** OLE: Contenedor de documentos embebidos compatibles con Object Linking and Embedding
       Además de los listados, se pueden agregar todo tipo de controles de terceros, y hay una gran cantidad de ellos que se proveen con el propio Visual Basic 6.0. Los controles vienen embebidos dentro de archivos con extensión OCX.
   * Las ventanas de proyecto, aunque móviles, se encuentran en el panel lateral derecho y contienen dos vistas principales:
   ** El Explorador de proyectos, que muestra todos los elementos que componen el proyecto o grupos de proyectos (formularios, interfaz de controles, módulos de código, módulos de clase, etc.)
   ** El Panel de propiedades, donde se muestran todos los atributos de los objetos, controles, formularios, información de módulos clase, entre muchos otros.
* La Ventana inmediato, por defecto se encuentra en la parte inferior, aunque puede no estar visible (se presionan las teclas Ctrl+G, en ese caso, para mostrar la ventana). Esta ventana resulta una herramienta muy útil a la hora de depurar el programa o bien para realizar pruebas rápidas, ya que permite imprimir mensajes de texto desde el código y ejecutar sentencias y comandos simples inmediatamente (solamente sentencias que se puedan escribir en una sola línea). Por ejemplo, de la aplicación en curso, se puede consultar el valor de una variable o llamar a un método declarado en el módulo que se está depurando. Se puede ejecutar código "al vuelo", por ejemplo con sentencias como:
    ? sqr(2)
    siendo el signo ? un reemplazo natural del comando Print en Basic, al ejecutar la sentencia se mostraría por pantalla el valor de la raíz cuadrada de 2. También se pueden usar variables del propio programa, o sentencias de código tales como:
    MsgBox ("Prueba de cuadro de mensaje de error.", vbCritical, "Título del mensaje")
    A la hora de la depuración puede ser útil para consultar el valor de variables del programa, o el código de error como:
    ? Err.Number

## Objetos y eventos

Se designa como objeto cualquier elemento, por ejemplo, un formulario, una imagen, un control, tal como una caja de texto; a su vez, los objetos tienen propiedades, que en el caso de la caja de texto una es la propiedad "text" que se encarga de contener el texto que aparecerá en la caja. A los objetos se les puede asociar eventos. Un evento es la ocurrencia de un suceso, comúnmente la acción que realiza el usuario sobre el objeto, que como resultado puede, por ejemplo, provocar un cambio en alguna propiedad de un objeto. Por ejemplo: Visual Basic tiene un evento llamado KeyPress, que ocurre cuando el usuario presiona una tecla; ese evento se puede asociar a la caja de texto, y en él definirá (por programación) qué acción se tomará cuando se oprima una tecla.
En síntesis, un objeto posee propiedades, responde a eventos y puede ejecutar métodos asociados a él.
Para programar las acciones para los eventos de un objeto, en la creación del procedimiento se debe, a continuación de la sentencia Private Sub incluir el nombre del objeto/control (con excepción del Formulario en sí, pues en este caso se establece como Form) seguido por guion bajo(_), el nombre del evento y luego paréntesis para especificar los parámetros del procedimiento.
Algunos eventos comunes definidos en Visual Basic son:
* Click: ocurre cuando se presiona y suelta un botón del mouse sobre un objeto.
* DblClick: ocurre cuando se presiona y suelta dos veces un botón del mouse sobre un objeto.
* DragDrop: ocurre al arrastrar y soltar un determinado objeto con el mouse.
* DragOver: ocurre si una operación de arrastrar y soltar está en curso.
* GotFocus: ocurre cuando un objeto recibe el control o foco, ya sea mediante una acción del usuario como hacer clic en un objeto ventana, o cambiando el foco de objeto desde el programa, mediante el método SetFocus.
* LostFocus: contrario al anterior, este evento ocurre cuando el objeto pierde el enfoque, sea mediante acción del usuario o efectuado desde la aplicación.
* KeyDown: ocurre cuando el usuario mantiene presionada una tecla.
* KeyUp: ocurre cuando el usuario deja de presionar una tecla. Este evento sucede precisamente al terminar el evento KeyDown.
* KeyPress: ocurre como cuando se presiona y suelta una tecla.
* MouseDown: ocurre cuando el usuario presiona un botón del mouse.
* MouseUp: se produce cuando el usuario suelta el botón del mouse.
* MouseMove: este evento ocurre mientras el usuario mueve o desplaza el puntero del mouse sobre un objeto.

## Ejemplo de código

El siguiente fragmento de código muestra un cuadro de mensaje, en una ventana, que dice "¡Hola, mundo!":
Una alternativa es guardar el mensaje en una variable tipo String y luego incluir ésta como argumento para la función MsgBox:

## Ventajas

* Posee una curva de aprendizaje muy rápida.
* Integra el diseño e implementación de formularios de Windows.
* Permite usar con facilidad la plataforma de los sistemas Windows, dado que tiene acceso prácticamente total a la API de Windows, incluidas librerías actuales.
* Es uno de los lenguajes de uso más extendido, por lo que resulta fácil encontrar información, documentación y fuentes para los proyectos.
* Fácilmente extensible mediante librerías DLL y componentes ActiveX de otros lenguajes.
* Posibilita añadir soporte para ejecución de scripts, VBScript o JScript, en las aplicaciones mediante Microsoft Script Control.
* Tiene acceso a la API multimedia de DirectX (versiones 7 y 8). También está disponible, de forma no oficial, un componente para trabajar con OpenGL 1.1.
* Existe una versión, VBA, integrada en las aplicaciones de Microsoft Office, tanto Windows como Mac, que permite programar macros para extender y automatizar funcionalidades en documentos, hojas de cálculo y bases de datos (Access).
* Si bien permite desarrollar grandes y complejas aplicaciones, también provee un entorno adecuado para realizar pequeños prototipos rápidos.

## Desventajas

Las críticas hechas en las ediciones de Visual Basic anteriores a VB.NET son variadas; se citan entre ellas:
* Problema de versionado asociado con varias librerías runtime DLL, conocido como DLL Hell
* Soporte pobre para programación orientada a objetos
* Incapacidad para crear aplicaciones multihilo, sin tener que recurrir a llamadas de la API de Windows.
* Dependencia de complejas y frágiles entradas de registro COM
* La capacidad de utilizar controles en un único formulario es muy limitada en comparación a otras herramientas.

## Alternativas multiplataforma o externas a Windows

Existen múltiples alternativas dentro y fuera de Windows que intentan imitar este lenguaje y su mecánica de desarrollo. El más conocido y popular es Gambas:
* Gambas es un proyecto libre para implementar programación visual con Basic en GNU/Linux. Está derivado principalmente de Visual Basic, adaptándose a partir de su lenguaje y su entorno de desarrollo, para implementar su propia variante, parcialmente compatible con Visual Basic, aportando y enriqueciendo con las oportunidades que brinda GNU/Linux.
Otras opciones conocidas son Real Basic o PureBasic, que permiten desarrollar bajo Windows, Linux, Mac OS e independientemente. PureBasic permite desarrollar también para Amiga OS. A diferencia de Gambas, estas son soluciones comerciales y no son libres.