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