Mundo Visual - Visual Basic - Tema 4

10
Programación profesional Vamos a programar a partir de ahora nuestras propias aplicaciones. Es mejor practicar que llenar este curso de palabras y teoría. Para aprender a programar es fundamental practicar, practicar y practicar. De momento y en las tres lecciones anteriores, hemos dado buena cuenta de práctica mezclada con teoría, porque es indispensable conocer antes el entorno de trabajo donde nos moveremos, para no perdernos más tarde por él. Las aplicaciones que tratemos a partir de ahora, constituirán el uso de lo visto ya con nuevos controles, código y técnicas. La programación en Visual Basic es una programación orientada a eventos, es decir, no posee código estructurado claro, sino dentro de los eventos, siendo uno el comienzo y otro el final, pero puede haber varios (más de uno) finales en nuestros programas (p. ej.: error grave detectado en la ejecución de una sentencia que no nos permita continuar para no degradar el programa o el resultado de este). Ejemplo 1. (Parte 1) Editor de texto Vamos a escribir un programa que tenga las funciones básicas de un editor de texto. Para ello, deberemos pensar cuáles son los objetivos del programa para utilizar los controles justos. - Deseamos hacer un editor de texto que permita leer archivos en formato Txt, Wri, Me, BBS y *.* (todos). - Añadiremos a nuestro formulario un control CommonDialog que nos permitirá abrir la ventana de grabación y apertura de archivos (nos ahorrará mucho trabajo). - Utilizaremos un TextBox, y crearemos un menú de opciones para abrir un fichero, salvar un fichero y salir de la aplicación. Pongámonos manos a la obra. Haga click en el formulario una vez y pulse las teclas Ctrl+E. Escriba lo siguiente: Caption: &Abrir Name: mnuAbrir Pulse el botón Siguiente. Caption: &Guardar Name: mnuGuardar Pulse el botón Siguiente. Caption: &Salir Name: mnuSalir Ponga un TextBox en el formulario y escriba las siguientes propiedades: Text: "" Multiline: True

Transcript of Mundo Visual - Visual Basic - Tema 4

Page 1: Mundo Visual - Visual Basic - Tema 4

Programación profesional

Vamos a programar a partir de ahora nuestras propias aplicaciones.Es mejor practicar que llenar este curso de palabras y teoría. Para aprender a programar es fundamental practicar, practicar y practicar. De momento y en las tres lecciones anteriores, hemos dado buena cuenta de práctica mezclada con teoría, porque es indispensable conocer antes el entorno de trabajo donde nos moveremos, para no perdernos más tarde por él.

Las aplicaciones que tratemos a partir de ahora, constituirán el uso de lo visto ya con nuevos controles, código y técnicas.

La programación en Visual Basic es una programación orientada a eventos, es decir, no posee código estructurado claro, sino dentro de los eventos, siendo uno el comienzo y otro el final, pero puede haber varios (más de uno) finales en nuestros programas (p. ej.: error grave detectado en la ejecución de una sentencia que no nos permita continuar para no degradar el programa o el resultado de este).

Ejemplo 1. (Parte 1) Editor de texto

Vamos a escribir un programa que tenga las funciones básicas de un editor de texto.Para ello, deberemos pensar cuáles son los objetivos del programa para utilizar los controles justos.- Deseamos hacer un editor de texto que permita leer archivos en formato Txt, Wri, Me, BBS y *.*

(todos).- Añadiremos a nuestro formulario un control CommonDialog que nos permitirá abrir la ventana de

grabación y apertura de archivos (nos ahorrará mucho trabajo).- Utilizaremos un TextBox, y crearemos un menú de opciones para abrir un fichero, salvar un fichero y

salir de la aplicación.Pongámonos manos a la obra.

Haga click en el formulario una vez y pulse las teclas Ctrl+E.Escriba lo siguiente:Caption: &AbrirName: mnuAbrirPulse el botón Siguiente.Caption: &GuardarName: mnuGuardarPulse el botón Siguiente.Caption: &SalirName: mnuSalir

Ponga un TextBox en el formulario y escriba las siguientes propiedades:Text: ""Multiline: TrueScrollBars: Vertical

Escriba el título de nuestro formulario:Caption: Editor

En el control CommonDialog escriba:InitDir: C:\CancelError: True (checked)

Ahora ajustaremos el tamaño del TextBox al tamaño del formulario, para darle una vista más atractiva.Para ello escribimos el siguiente texto:Private Sub Form_Resize()        Text1.Left = 0        Text1.Top = 0        Text1.Height = Form1.ScaleHeight        Text1.Width = Form1.ScaleWidthEnd Sub

Page 2: Mundo Visual - Visual Basic - Tema 4

Con este evento logramos que cada vez que cambiemos el tamaño de nuestra ventana (maximizar, minimizar, … etc), el control TextBox se ajuste en tamaño con este a la vez.

Ahora añadimos la propiedad WindowState del formulario a valor 2-Maximized.

El resultado obtenido es algo parecido a este:

Aún, nos queda el código más importante, ya que de momento le hemos dado el aspecto GUI deseado a nuestro programa. Es indispensable que nuestro programa realice bien su trabajo y por tanto nos quedará por escribir todas las instrucciones necesarias para ello.

Añada el siguiente código:

' Menu: SalirPrivate Sub mnuSalir_Click()        Dim Respuesta As Integer        Respuesta = MsgBox("¿Desea salir del editor?", 36, "Editor")

        If Respuesta = 6 Then                Unload Form1        End IfEnd Sub

'Menu AbrirPrivate Sub mnuAbrir_Click()        Dim nLen, nCanal As Integer        On Error GoTo error        CommonDialog1.DialogTitle = "Abrir archivo"        CommonDialog1.Filter = "Archivos de Texto (*.txt;*.wri;*.me;*.bbs)|*.txt;*.wri;*.me;*.bbs|Todos los ficheros(*.*)|*.*"        CommonDialog1.ShowOpen        nCanal = FreeFile        Open CommonDialog1.filename For Binary As #nCanal                nLen = LOF(nCanal)                Texto$ = Space$(nLen)                Get #nCanal, , Texto$                Text1.Text = RTrim$(Texto$)        Close #nCanal        Exit Suberror:        'Escribe o gestiona el error aquí si quieres        Exit SubEnd Sub

'Menu GuardarPrivate Sub mnuGuardar_Click()        Dim nCanal As Integer        On Error GoTo error        CommonDialog1.DialogTitle = "Guardar archivo"        CommonDialog1.Filter = "Archivos de Texto (*.txt;*.wri;*.me;*.bbs)|*.txt;*.wri;*.me;*.bbs|Todos los ficheros(*.*)|*.*"        CommonDialog1.ShowSave        nCanal = FreeFile        Open CommonDialog1.filename For Output As nCanal                Print #nCanal, Text1.Text

Page 3: Mundo Visual - Visual Basic - Tema 4

        Close #nCanal        Exit Suberror:        'Escribe o gestiona el error aquí si quieres        Close #nCanal        Exit SubEnd Sub

Con este código, nuestro programa abre y graba un archivo de texto.Aún, así, nuestra aplicación carece del aspecto profesional que se merece, por lo que es necesario mejorar algunas opciones para realizar un editor de texto más profesional, además de hacer uso de algunos controles y llamadas a las API de Windows.

Manos a la obra.

Para darle un aspecto más propio de un editor profesional, incluiremos en nuestro proyecto un control llamado StatusBar, el cual nos permite mostrar varios aspectos de interés al usuario.Seleccione el control StatusBar de nuestra caja de herramientas e insértelo en el formulario extendiéndolo.

Pinche con el botón derecho del ratón sobre la barra de estado, y seleccione Propiedades.Dentro de la ventana de propiedades del control StatusBar, pinche sobre la solapa Paneles, y una vez que esté situado sobre esta, siga estos pasos:

Index: 1Text: Mundo Visual - 1997ToolTip Text: ejemplo de StatusBarAlignment: 1 - sbrCenterStyle: 0 - sbrTextBevel: 2 - sbrRaisedAutoSize: 1 - sbrSpring

Pulse sobre el botón Insert Panel y escriba:

Index: 2Minimun Width: 600Alignment: 1 - sbrCenterStyle: 2 - sbrNumBevel: 1 - sbrInsetAutoSize: 2 - sbrContent

Pulse sobre el botón Insert Panel y escriba:

Index: 3Minimun Width: 600Alignment: 1 - sbrCenterStyle: 1 - sbrCapsBevel: 1 - sbrInsetAutoSize: 2 - sbrContent

Pulse sobre el botón Insert Panel y escriba:

Index: 3Minimun Width: 600Alignment: 1 - sbrCenterStyle: 3 - sbrInsBevel: 1 - sbrInsetAutoSize: 2 - sbrContent

Pulse sobre el botón Insert Panel y escriba:

Page 4: Mundo Visual - Visual Basic - Tema 4

Index: 4Minimun Width: 600Alignment: 1 - sbrCenterStyle: 4 - sbrScrlBevel: 1 - sbrInsetAutoSize: 2 - sbrContent

Pulse F5 y sitúe el icono del ratón sobre el texto de la barra de estado, podrá ver que el texto " ejemplo de StatusBar" aparece junto a la barra de estado. Aquí puede poner cualquier referencia que    desee o dejarlo en blanco. Es útil para mostrar información adicional del programa como "Programa Shareware", una dirección de e-mail, etc.

El resultado parcial es aproximadamente este:

Hasta aquí, todo va resultando sencillo, y con pocas líneas hemos dado una apariencia más

profesional a nuestra aplicación. Todo sin hacer un gran esfuerzo.

Ahora bien, es posible que deseemos dar mayor funcionalidad a nuestra aplicación.Debemos tener en cuenta, que nuestra aplicación posee un error de programación muy importante y habitual a los programadores de Visual Basic. Este error es producido cuando deseamos cerrar nuestra aplicación. Si pulsamos en el menú sobre la palabra Salir, el programa nos pregunta si deseamos o no salir de la aplicación, pero si pulsamos sobre el aspa de la ventana:

el programa no nos preguntará si deseamos acabar, es decir, concluirá directamente nuestra aplicación. Ahora bien, puede ser que deseemos realizar dos cosas cuando se pulse sobre el aspa de la ventana:1) Preguntar si se desea concluir la aplicación.2) Ignorar el evento.Veámoslo son sendos ejemplo, para que usted elija el que crea más oportuno:

Ejemplo 1:

' Menu: SalirPrivate Sub mnuSalir_Click()            Unload Form1End Sub

Private Sub Form_Unload(Cancel As Integer)        Dim Respuesta As Integer

Page 5: Mundo Visual - Visual Basic - Tema 4

        Respuesta = MsgBox("¿Desea salir del editor?", 36, "Editor")        If Respuesta = 6 Then                Unload Form1        Else                Cancel = True        End IfEnd Sub

Ejemplo 2:

'En General              declaraciones, escriba:Private Pasa

'Inicializamos el valor de la variable Pasa:Private Sub Form_Load()        Pasa = FalseEnd Sub

' Menu: SalirPrivate Sub mnuSalir_Click()        Dim Respuesta As Integer        Respuesta = MsgBox("¿Desea salir del editor?", 36, "Editor")        If Respuesta = 6 Then                Pasa = True                Unload Form1        End IfEnd Sub

Private Sub Form_Unload(Cancel As Integer)        If Pasa = False Then                Cancel = True        End IfEnd Sub

Con esta segunda forma, mantenemos un control de ignorar cuando el usuario pulsa sobre el aspa de la ventana, obligando al usuario a pulsar la opción del menú Salir.

Pulsamos Ctrl+E y pinchamos una vez con el ratón sobre &Salir y pulsamos el botón Insertar.Escribimos las siguientes propiedades:

Caption: &EditorName: mnuEditorPinche otra vez con el ratón sobre &Salir y pulsamos el botón Insertar.Pulse ahora sobre el botón con la punta de flecha hacia la derecha: -->Caption: &Seleccionar TodoName: mnuSeltodo

Pinche otra vez con el ratón sobre &Salir y pulsamos el botón Insertar.Pulse ahora sobre el botón con la punta de flecha hacia la derecha: -->Caption: &Copiar textoName: mnuCopiar

Pinche otra vez con el ratón sobre &Salir y pulsamos el botón Insertar.Pulse ahora sobre el botón con la punta de flecha hacia la derecha: -->Caption: &Pegar textoName: mnuPegar

Pinche otra vez con el ratón sobre &Salir y pulsamos el botón Insertar.

Page 6: Mundo Visual - Visual Basic - Tema 4

Pulse ahora sobre el botón con la punta de flecha hacia la derecha: -->Caption: C&ortar textoName: mnuCortar

Añada el siguiente código en General          declaraciones:Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

Y las siguientes líneas:

Private Sub mnuSeltodo_Click()        Text1.SetFocus        Text1.SelStart = 0        Text1.SelLength = Len(Text1.Text)End Sub

Private Sub mnuCopiar_Click()        Clipboard.Clear        Clipboard.SetText Text1.SelText        Text1.SetFocusEnd Sub

Private Sub mnuPegar_Click()        Text1.SelText = Clipboard.GetText()        Text1.SetFocusEnd Sub

Private Sub mnuCortar_Click()        Clipboard.SetText Text1.SelText        Text1.SelText = ""        Text1.SetFocusEnd Sub

Private Sub mnuUndo_Click()        UndoResultado = SendMessage(Text1.hwnd, &HC7, 0&, 0&)        If UndoResultado = -1 Then                Beep                MsgBox "Error al intentar recuperar.", 20, "Undo"        End IfEnd Sub

Private Sub Form_Resize()        Text1.Left = 0        Text1.Top = 0        Text1.Height = Form1.ScaleHeight - StatusBar1.Height        Text1.Width = Form1.ScaleWidthEnd Sub

Pulse F5. Que duda cabe que este no es el mejor aspecto o el aspecto más profesional de este ejemplo, pero eso ya lo dejo a gusto del programador que es el encargado de distribuir los menús como él quiera.El resultado parcial de la aplicación es:

Page 7: Mundo Visual - Visual Basic - Tema 4

Antes me gustaría hacer alusión a los menús

subdivididos, es decir, aquellos menús que están separados mediante una pequeña barra horizontal que separa por ejemplo dentro de un menú llamado Fichero a unos submenús llamados Abrir, Guardar, y dividido mediante una pequeña barra horizontal el submenú Salir.El aspecto debería ser algo así:

La barra separadora se obtiene, de la forma:

Dentro del submenú, escribimos:

Caption: -Name: A1 (por ejemplo)

Es bastante recomendable que los nombres a los separadores sean códigos o palabras poco utilizados para no caer en la repetición de los nombres de las variables.

Por ahora, nuestra aplicación, posee las características más usuales de un editor de texto de carácter lo más parecido a la profesionalidad de una aplicación.Todo programa puede ser mejorado, ampliado, modificado, ... pero no está mal para empezar.

En Windows 95 y Windows NT, si pulsamos con el botón derecho sobre una caja de texto, aparece un menú de selección como este:

Puede ser que no deseemos que aparezca este menú, y sí que aparezca el menú Editor que nosotros mismos hemos programado. Para que esto suceda, deberemos escribir lo siguiente en el evento correcto:(En este caso, haremos uso de un truco de programación para que Windows no nos muestre la pantalla antes mencionada. Con este truco engañaremos a Windows para ocultar esta pantalla y mostrar la que nosotros queremos).

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)        ' Button=1 --> botón izquierdo        ' Button=4 --> botón central        ' Button=2 --> botón derecho

        If Button = 2 Then                Text1.Enabled = False                Text1.Enabled = True

Page 8: Mundo Visual - Visual Basic - Tema 4

                PopupMenu mnuEditor                Text1.SetFocus        End IfEnd Sub

Cabe destacar, que en el truco de programación, antecede la línea:PopupMenu mnuEditor

a la línea:Text1.Enabled = True

Con esto conseguimos que el texto aparezca en background (color gris) mientras que aparece el menú de selección nuestro.Es decir, con un ejemplo:

Sin embargo, con esta modificación, presentamos el texto correctamente, y "engañamos" a Windows haciéndole creer que el texto no está en modo escritura, para luego pasarlo a modo escritura y mostrar nuestro menú, dejando las letras de fondo de forma normal sin que el usuario aprecie lo que hemos realizado. Esto es, con un ejemplo así:

Este es el resultado final de nuestra aplicación mostrando el menú que nosotros queremos.

Este tema más o menos ha concluido.En los siguientes mejoraremos nuestro editor realizando un editor de texto mucho más profesional.Poco a poco veremos los cambios insertando más controles que nos permitan un mejor aspecto a nuestra aplicación.

En resumen podríamos decir que hemos visto como insertar menús, separadores dentro de un submenú, ajuste de un control (TextBox y StatusBar) al formulario cuando redimensionamos la ventana de nuestra aplicación.Hemos aprendido a mostrar menús PopUps dentro de un control (hemos visto como ejemplo dentro de un TextBox). Veremos más adelante como mostrar menús inexistentes u ocultos.Hemos visto funciones básicas del control StatusBar, y funciones básicas de un editor de texto simple, así como el uso de una función API de Windows para deshacer los cambios realizados sobre el control TextBox.