Curso sobre Visual Basic
por Jorge Serrano (Mundo Visual)

 

Tema Cuatro ( 9/Ago/97)

Baja el archivo en formato Word (tema4.zip 123 KB)


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

ScrollBars: 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.ScaleWidth

End Sub

 

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: Salir

Private Sub mnuSalir_Click()

Dim Respuesta As Integer

Respuesta = MsgBox("�Desea salir del editor?", 36, "Editor")

If Respuesta = 6 Then

Unload Form1

End If

End Sub

 

'Menu Abrir

Private 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 Sub

error:

'Escribe o gestiona el error aqu� si quieres

Exit Sub

End Sub

 

'Menu Guardar

Private 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

Close #nCanal

Exit Sub

error:

'Escribe o gestiona el error aqu� si quieres

Close #nCanal

Exit Sub

End 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: 1

Text: Mundo Visual - 1997

ToolTip Text: ejemplo de StatusBar

Alignment: 1 - sbrCenter

Style: 0 - sbrText

Bevel: 2 - sbrRaised

AutoSize: 1 - sbrSpring

 

Pulse sobre el bot�n Insert Panel y escriba:

 

Index: 2

Minimun Width: 600

Alignment: 1 - sbrCenter

Style: 2 - sbrNum

Bevel: 1 - sbrInset

AutoSize: 2 - sbrContent

 

Pulse sobre el bot�n Insert Panel y escriba:

 

Index: 3

Minimun Width: 600

Alignment: 1 - sbrCenter

Style: 1 - sbrCaps

Bevel: 1 - sbrInset

AutoSize: 2 - sbrContent

 

Pulse sobre el bot�n Insert Panel y escriba:

 

Index: 3

Minimun Width: 600

Alignment: 1 - sbrCenter

Style: 3 - sbrIns

Bevel: 1 - sbrInset

AutoSize: 2 - sbrContent

 

Pulse sobre el bot�n Insert Panel y escriba:

 

Index: 4

Minimun Width: 600

Alignment: 1 - sbrCenter

Style: 4 - sbrScrl

Bevel: 1 - sbrInset

AutoSize: 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: Salir

Private Sub mnuSalir_Click()

Unload Form1

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

Dim Respuesta As Integer

Respuesta = MsgBox("�Desea salir del editor?", 36, "Editor")

If Respuesta = 6 Then

Unload Form1

Else

Cancel = True

End If

End Sub

 

 

Ejemplo 2:

 

'En General declaraciones, escriba:

Private Pasa

 

'Inicializamos el valor de la variable Pasa:

Private Sub Form_Load()

Pasa = False

End Sub

 

' Menu: Salir

Private Sub mnuSalir_Click()

Dim Respuesta As Integer

Respuesta = MsgBox("�Desea salir del editor?", 36, "Editor")

If Respuesta = 6 Then

Pasa = True

Unload Form1

End If

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

If Pasa = False Then

Cancel = True

End If

End 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: &Editor

Name: mnuEditor

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: &Seleccionar Todo

Name: 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 texto

Name: 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 texto

Name: mnuPegar

 

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: C&ortar texto

Name: 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.SetFocus

End Sub

 

Private Sub mnuPegar_Click()

Text1.SelText = Clipboard.GetText()

Text1.SetFocus

End Sub

 

Private Sub mnuCortar_Click()

Clipboard.SetText Text1.SelText

Text1.SelText = ""

Text1.SetFocus

End 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 If

End Sub

 

Private Sub Form_Resize()

Text1.Left = 0

Text1.Top = 0

Text1.Height = Form1.ScaleHeight - StatusBar1.Height

Text1.Width = Form1.ScaleWidth

End 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:

 

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

PopupMenu mnuEditor

Text1.SetFocus

End If

End 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.


ir al índice