Visual Basic - Guía del Estudiante Cap. 10 Procedimientos y funciones en VB CORRECCION DE ERRORES Y DEPURACION DE PROGRAMAS - EL OBJE TO ERROR LA AYUDA DE WINDOWS
Procedimientos Un Procedimiento en Visual Basic es un tr ozo de código que realiza una determinada tarea. Un procedimiento es el código que asociamos a un evento de un control (CommandButton_Click, Form_Load, ...). Un control puede tener por lo tanto, muchos procedimientos procedimientos asociados. asociados. Uno a cada uno de sus eventos. Si queremos realizar una determinada tarea en un programa, y esta tarea se repite muchas veces en ese programa, programa, podemos, podemos, por ejemplo, ejemplo, repetir el código código tantas veces como sea necesario en los puntos del programa que así lo pidan. Esto nos llevaría a escribir líneas y líneas repetidas en nuestras aplicaciones, con el consiguiente incremento de trabajo y del volumen de la aplicación. Podemos hacer otra cosa mas práctica y elegante. Escribir ese código una sola vez, creando con él un Procedimiento. Este Procedimiento tendrá un nombre, y cada vez que queramos que se ejecute ese código bastará con nombrar por ese nombre al Procedimiento. Un proc proced edimi imien ento to pued puede e inse inserta rtars rse e en un Módu Módulo lo o en Formu Formula lario rio.. Para Para crear crear un Procedimiento basta con hacer click en la Barra de Menú de VB en Insertar | Procedimiento. Observará que la palabra Procedimiento del Menú desplegable está deshabilitada si no está abierta ninguna ventana de código. Para habilitarla, abra la ventana de código del Formulario o Módulo donde quiere insertar el nuevo Procedimiento. Una vez hecho Click en Insertar | Procedimiento le aparecerá esta ventana :
En esta ventana debe teclear el nombre que quiere dar al Procedimiento. En tipo debe elegir la opción Procedimiento (Veremos mas adelante la Función y en otro capítulo las opciones Propiedad y Evento) y en el Ambito debe elegir Public o Private dependiendo dependiendo del ámbito que quiera darle :
Public . Se podrá acceder acceder a él desde desde cualquier Formulario o Módulo del programa. Dependi Dependiend endo o de donde donde se haya insertad insertado o el Procedimie Procedimiento nto (Formulario (Formulario o Módulo), Módulo), debe citarse de la siguiente forma : Si se ha insertado en un Módulo, puede citarse solamente por su nombre. Puede citarse también por el nombre del módulo seguido por el nombre del procedimiento, separando ambos
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 1
por un punto. Si el procedimiento tiene por nombre NombreProcedimiento y se ha insertado en el Módulo1 puede citarse de las dos formas siguientes en cualquier parte del programa:
NombreProcedimiento Modulo1.NombreProcedimiento Si se ha insertado en un Formulario, desde ese Formulario basta con citarle por su nombre. Desde otro Formulario o Módulo, hay que citarlo mediante el nombre del Formulario donde está insertado, seguido del nombre del procedimiento, separados por un punto.
Private. Si elige este ámbito, sólo se podrá acceder a ese Procedimiento desde el Formulario o Módulo donde se haya insertado. La caja de opción (Check) que pone Todas las variables locales como estáticas nos va a poner todas las variables declaradas dentro del procedimiento como estáticas (No ponen a cero o nulo su valor cuando salimos y volvemos a entrar en ese procedimiento). Puede ahorrarnos un poco de código. El código de los Procedimientos Procedimi entos se guarda guarda en el General del Formulario o Módulo donde donde se han insertado :
Para llamar a un procedimiento desde cualquier parte del código basta con escribir en una línea el nombre del procedimiento. fpublico Muchos programadores anteponen la palabra Call Call fpublico No hace falta poner Call, aunque Visual Basic lo admite. Algunos programadores programadores me dicen que al poner Call, siempre se enteran mejor de que están llamando a un procedimiento. Me parece muy bien, y creo que es una buena razón. Pero no existe otra razón para ello. Los datos que se puedan generar en un procedimiento debe extraerlos de ese procedimiento mediante variables. Verá Verá que con las funciones funciones es distinto.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 2
Cuando se se llama a un procedimiento, se lle va a ese procedimiento la condición de tratamiento de errores que existe en el procedimiento desde desde el que se l lamó. Por ejemplo: Private Sub Boton1_Click() On Error GoTo RutErr Lineas de código de este procedimiento ‘Llamada al Procedimiento Calcula_Dietas Calcula_Dietas Mas líneas de código de este procedimiento RutErr: End Sub Si al ejecutarse el procedimiento Calcula_Dietas ocurre un error, al detectarse ese error interceptable, el programa salta a ejecutar la línea RutErr del procedimiento Boton1_Click. Esto puede producirse serios problemas a la hora de depurar su programa. Para evitar que suceda eso, y que se pare la ejecución del programa en la línea del procedimiento Calcula_Dietas en la que se produjo el error, inicie este procedimiento con una instrucción que anule la condición de tratamiento de errores: Public Sub Calcula_Dietas() On Error Goto 0 ……………. Ens Sub
Funciones Una Una funci función ón es una una forma forma espe especia ciall de reali realiza zarr un proc proced edimi imien ento to.. En reali realida dad d es un procedimiento al que le pasamos una o varios parámetros con los que realizará una operación (cualquier (cualquier operación, operación, no tiene tiene porqué porqué ser matemática) matemática) y obtendrá obtendrá un resultado resultado de esos esos parámetros. Este resultado puede leerse desde otra parte de la aplicación en una variable que tienen el mismo nombre que la función. La forma de obtener los los datos de la función es llamar directamente a esa función, como verá un poco más adelante. adelante. Para Para insert insertar ar una una Funci Función ón se proce procede de de igual igual forma forma que que para para un Proced Procedimie imiento nto,, pero pero marcando el botón de opción Tipo Función en la caja de d iálogo de la figura anterior. anterior. El ámbito de una Función es el mismo que el un Procedimiento. Si se declara Pública puede usarse en toda la aplicación. Si se declara Privada, solamente en el Formulario o Módulo donde se haya insertado. Para Para llama llamarr a una una Funci Función ón son son válido válidos s igua igualme lment nte e los los crite criterio rios s expue expuest stos os para para los los Procedimientos en cuanto a la sentencia Call.
Parámetros de una Función Se dijo anteriormente que a una Función se le pasan uno o varios parámetros con los que va a realizar alguna operación. Al declarar la Función, hay que decirle el nombre de los parámetros que se le van a pasar, pasar, de que tipo son (String, Integer, Integer, Boolean, ...) y cómo se le van a pasar (ByVal, ByRef , ParamArray ). Esto hay que introducírselo en la propia declaración Public Function MiFuncion(ByVal Variable1 as String, ByVal Variable2 as Integer) End Function
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 3
La función MiFuncion sabe que debe recibir dos parámetros, y que el primero será una cadena de caracteres y el segundo un integer. Los nombres Variable1 y Variable2 son los nombres que usa la Función Función internamente internamente.. No t ienen ienen porqué porqué coincidir con los nombres nombres que tengan tengan las variables que contienen esos valores en otras partes del programa. Una función siempre da un resultado. Este resultado se le introduce en una variable que tiene el mismo nombre que la función. Esta variable no hace hace falta declararla, ya que que la declaración de la función lleva implícito que exista una variable con ese nombre. Imagine Imaginemo mos s que que lo que que va a hacer hacer la función función de este este ejempl ejemplo o es tomar una cadena cadena de caracteres (Variable1) y obtener de ella otra cadena con los caracteres iniciales de la primera, tantos caracteres como nos indique la segunda variable (Variable2) Si, por ejemplo, le pasásemos pasásemos los valores : Variable1 = Guía del Estudiante Variable2 = 14 Obtendríamos como resultado la cadena
Guía del Estud
Ya se habrá dado cuenta de que debemos emplear Left para obtener los caracteres iniciales de una cadena. cadena. Nuestra función quedará de la f orma : Public Function MiFuncion(ByVal Variable1 as String, ByVal Variable2 as Integer) As String MiFuncion =Left (Variable1, Variable2) End Function (Observe que hemos añadido la expresión As String al final de la declaración. Esto quiere significa que le estamos diciendo a la función que su resultado es un String,) Donde MiFuncion es una variable que se ve en todo el ámbito de la función. Para llamar a la función, basta con citarla por su nombre y ponerle los parámetros necesarios. Cuando esté tecleando el código, Visual Basic le invitará a introducir los parámetros citándole su nombre. (En nuestro ejemplo, ByVal Variable1 as String, ByVal Variable2 as Integer En cualquier parte del programa podemos poner : Label1.Caption Label1.Caption = MiFuncion Mi Funcion (Guía del Estudiante, 14) y Label1 tomará como Caption la cadena Guía del Estud Pruebe esto con una pequeña aplicación. En un formulario, ponga un TextBox (Text1) donde va a introducir la cadena original, otro TextBox TextBox donde va a introducir el número de caracteres a tomar tomar,, y un Label Label (Lab (Label1 el1)) dond donde e va a ver el resulta resultado do.. Pong Ponga a un Botón Botón de comand comando o (Command1) donde llamará a la función. Inserte una función (MiFuncion) en ese formulario :
Private Sub Command1_Click() Label1.Caption = MiFuncion(Text1.Text, Val(Text2.Text)) End Sub Public Function MiFuncion(ByVal MiFuncion(ByVal Variable1 As String, ByVal ByVal Variable2 As Integer) As String MiFuncion = Left(Variable1, Variable2) End Function Puede pensar que para hacer esta cosa tan elemental no merece la pena hacer una función. Efectivamente. Efecti vamente. Bastaría con poner en el botón Command1_Click Command1_Click el siguiente código : Label1.Caption = Left(Text1.Text, Val(Text2.Text))
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 4
y funcionaría igual. Lógicamente, una función debe introducirse cuando vaya a realizar un código un poco mas complejo, y sobre todo, cuando cuando se va a repetir en muchos procedimientos. Hemos visto que los parámetros de la función pueden pasarse Por Valor ( ByVal), caso del ejemplo anterior, anterior, y Por Referencia Referencia ( ByRef ). ). ¿Cuál es es la diferencia ? La diferencia es que si le pasa un valor por valor (ByVal) ese valor, aunque lo cambie la función internamente, ese cambio no se manifiesta fuera de ella. Si se pasa por referencia (ByRef), y la función cambia el valor de esa variable, ese cambio se mantiene fuera de la función. Veamos esto de una forma muy sencilla : Vamos a hacer una función que multiplica dos números. Pero dentro de la función va mos a cambiar uno de esos números, sumándole 2. Una vez realizada la operación presentamos el valor de los dos factores en dos Label a ver si ha cambiado. Insertemos dos funciones, MultiplicaA y MultiplicaB. En MultiplicaA le introducimos los datos Por Valor y en MultiplicaB por Referencia. Public Function MultiplicaA(ByVal X1 As Integer, ByVal X2 As Integer) As Integer x1 = x1 + 2 MultiplicaA = x1 * x2 End Function Public Function MultiplicaB(ByRef Multipl icaB(ByRef X1 As Integer, ByRef X2 As Integer) As Integer x1 = x1 + 2 MultiplicaB = x1 * x2 End Function Las dos funciones son idénticas, excepto en la forma de pasarle los parámetros. Pongamos un Botón Botón de Coman Comando do para para multipli multiplicarl carlo o con con Multipl MultiplicaA icaA y otro otro con con Multipli MultiplicaB caB.. Al final final del del procedimiento click de cada uno de ellos presentamos las dos variables que se pasan a la funci función ón en send sendos os Labe Label. l. Cuan Cuando do se usa usa Multi Multipl plica icaA A el valor valor de X1 ( pepe en el CommandButton) se mantiene. En MultiplicaB cambia al v alor pepe+2 Private Sub Command1_Click() Dim pepe As Integer Dim juan As Integer pepe = Val(Text1) juan = Val(Text2) Label1 = MultiplicaA(pepe, juan) Label2 = pepe Label3 = juan End Sub Tras esto, se pone en Lable2 el valor pepe Private Sub Command2_Click() Dim pepe As Integer Dim juan As Integer pepe = Val(Text1) juan = Val(Text2) Label1 = MultiplicaB(pepe, juan) Label2 = pepe Label3 = juan End Sub Tras Tras esto, se pone pone en Label2 el valor pepe + 2 función MultiplicaB x1 = x1 + 2
(se mantienen mantienen el cambio realizado realizado en la
No queda ahí la cosa. Un valor puede pasarse también por ParamArray . En principio parece que esto ya es para nota. No es para tanto. Vamos a ver que sucede cuando queremos realizar una suma. La suma de los importes de varios productos de un ticket de compra. En principio no sabemos cuantos productos va a
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 5
comprar comprar un cliente, cliente, por lo tanto no sabemos sabemos a priori cuantos cuantos parámetro parámetros s le tenemos tenemos que pasar pasar.. Para pode pasar pasar un número número indetermina indeterminado do de parámetro parámetros s se los pasamos pasamos como PamArray : Public Sub sumacifras(ParamArray cifra()) Dim I As Integer Dim suma As Integer For I = LBound(cifra) To To UBound(cifra) suma = suma + CInt(cifra(I)) Next I Label1.Caption Label1.Caption = suma End Sub Private Sub Command2_Click() sumacifras 1, 2, 3, 4, 5, 6, 7, 8 End Sub Este código nos suma las cifras 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 La variable que se pasa con ParamArray debe ser Variant Existe otra f orma de pasar parámetros : Optional Cuando se declara una función con un determinado número de parámetros, es necesario pasárselos pasárselos todos. Si no se hace así, VB nos dará un error. error. Pero puede que que algún parámetro no exista siempre. Cuando uno o varios de los parámetros que se pasan a una función son opcionales, se le pueden pasar como Optional . Se pueden pasar pasar uno o mas parámetros como Optional. Las condiciones condiciones para los parámetros opcionales es que ocupen los últimos lugares y que sean del tipo Variant Hagamos un ejemplo en el que vamos a poner en un TextBox (TB4) el nombre y apellidos de una persona. El segundo apellido se lo pasamos como Opcional. La declaración de la función será :
Public Function SUMANOMBRES(NOMBRE As String, APE1 As String, Optional APE2 _ As Variant) ‘ Debemos detectar si se le ha pasado el parámetro opcional. Usamos para ello IsMissing If IsMissing (APE2) Then TB4.Text TB4.Text = NOMBRE & " " & APE1 Else TB4.Text TB4.Text = NOMBRE & " " & APE1 & " " & APE2 End If End Function Los parámetros los tomamos de tres TextBox (TB1, TB2 y TB3, siendo este último el que es opcional. En un botón de comando ponemos este código : Private Sub Command1_Click() If TB3 <> "" Then SUMANOMBRES TB1, TB2, TB3 Else SUMANOMBRES TB1, TB2
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 6
End If End Sub
Salir de una función La forma natural de salir de una función es cuando se ejecuta todo su código. Al final siempre tiene la sentencia End Function Se pued puede e salir salir de una una funci función ón ante antes s de que que termi termine ne.. Por Por ejem ejemplo plo,, si se cump cumple le una una determinada condición, se puede salir de la función m ediante la sentencia Exit Function
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 7
CORRECCION DE ERRORES Y DEPURACION DE PROGRAMAS EL OBJETO ERROR Una vez que conocemos gran parte del Visual Basic, y que seguramente habremos hecho alguna aplicación, es momento de pararnos en una de las cosas que un programador nunca debe olvidar: Un programa no solo debe funcionar, sino que debe funcionar bien. Parece que esta afirmación carece de sentido o que al menos es una afirmación gratuita. Sin embargo es un defecto muy común entre programadores noveles, quizás por la alegría que da trabajo terminado terminado, olvidarse de algo tan fundamental como la calidad del programa, y el trabajo perder por ello la alegría que da el trabajo bien hecho. Cuan Cuando do termina terminamos mos un progra programa, ma, lo normal normal es que que no funcio funcione ne bien. bien. Mucho Mucho antes antes de terminarlo ya habremos tenido la sorpresa de que Visual Basic ha detectado un error y detiene la ejecución del programa. Iremos corrigiendo los errores elementales que van apareciendo, errores de sintaxis, ficheros que ya estaban abiertos, End If que nos faltaban, etc. Y el programa parece que ya puede funcionar hasta el final. El programa debe entrar entonces en la fase de corrección de errores y optimización.
Corrección de Errores. Errores. Denominamos Corrección de errores al proceso de la programación en la que se analizan y corrigen los errores existentes en el código o en el funcionamiento del programa. Podemos por tanto dividir los errores en errores de código y errores de funcionamiento. Es un error de código, por ejemplo, la siguiente línea de programa: Open A:\MiFicher.Txt A:\MiFicher.Txt For Input as #1 Habrá notado el error de bulto consistente en que A:\MiFicher.Txt debe ir entre comillas dobles. Este tipo de error se detecta generalmente al ejecutar el código. En este caso, Visual Basic nos dará el mensaje de error “Error de Sintaxis” nada mas terminar de escribir la línea. Errores como este, o el típico If sin End If seguro que se los ha encontrado repetidas veces y no vamos a ahondar mas en ellos. Se corrige el error sintáctico en el momento y el problema queda resuelto. resuelto. Pero vol vamos a la línea lí nea de código anterior, anterior, esta vez ya bien escrita:
Open “A:\MiFicher.Txt” For Input as #1 Al estar escrita correctamente, esta línea no nos puede dar error de sintaxis. Pero, ¿Que ocurre cuando estamos ejecutando el programa que contiene esa línea, y en el momento de ejecutarla ejecutarla no tenemos tenemos metido un disquete disquete en la unidad A:? A:? O piense lo que ocurriría ocurriría si tenemos un disquete disquete en A:, pero no existe en él el fichero MiFicher.Txt. No existe ningún error de sintaxis. El programa puede funcionar correctamente si, en el momento de la ejecución de esa línea, tenemos un disco en la unidad A: y éste contiene un fichero llamado MiFicher.Txt. Sin embargo no puede funcionar si no tenemos metido el disquete, o si este no tiene el mencionado fichero. En cualquiera de estos dos últimos casos se produce un Error de Ejecución . Existen dos tipos de errores de ejecución: Errores Interceptables y Errores que no se pueden interceptar. Los errores interceptables son aquellos que Visual Basic conoce. Los dos errores anteriores son de este tipo. Son errores no interceptables, aquellos que Visual Basic no puede detectar. No porque no los conozca, sino porque el propio error deja sin trabajar a Visual Basic o incluso al sistema operativo. Afortunadamente el sistema operativo está muy protegido, pero no por ello dejan de ocurrir estos errores. ¿Recuerda la frase “El programa xxx ha causado un error de protección general general en el el Módulo..... “ Bueno, acaba acaba de producir producir un error No Interceptable.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 8
No solam solament ente e existe existen n esto estos s errore errores, s, tambié también n hay hay errore errores s no catalo cataloga gado dos s y aplica aplicable bles s solamente al programador. Piense en un bucle infinito. Un bucle infinito es una secuencia de instrucciones tal como: Do While n < 2000 n=n+1 If n = 1000 then n = 0 Loop Podrá advertir que este bucle no se termina nunca, ya que n no podrá alcanzar nunca el valor 2000 ya que cada vez que llega a 1000 le cambiamos su valor a 0. Este tipo de error, más normal de lo que parece, ni lo detecta VB ni produce una caída del sistema operativo. Sin embargo es un error, pero en este caso será el propio programador quien se tenga que dar cuenta de él, ya que VB no puede ayudarnos debido a que el código, línea a línea, está perfectamente escrito. Vemos por tanto que VB solamente nos ayudará en los errores de sintaxis, durante el tiempo de diseño, diseño, y los errores interceptables interceptables en tiempo de ejecución. ejecución.
Errores Interceptables. Veamos lo que dice la ayuda de VB para este tema: Los errores interceptables interceptables pueden producirse cuando está ejecutando una aplicación, aplicación , tanto en el entorno de Visual Visual Basic como en modo autónomo. autónomo. Algunos de estos errores pueden pueden compilación . ocurrir también en tiempo de diseño o en durante la compilación. Un error interceptable es, como decíamos anteriormente, un error que Visual Basic conoce. Para conocerlos, VB dispone dispone de un objeto que vamos a ver a continuación. El Objeto Error
Objeto Error Contiene información sobre errores en tiempo de ejecución. El Objeto Error tiene Propiedades y Métodos. Las propiedades del objeto Error las establece quien genera el error. Por ejemplo, si el error se genera durante la ejecución, será VB quien genera las propiedades propiedades del objeto Error. Pero puede ser también el programador quien genere el error. Lo veremos mas adelante Al objeto Error se le designa por Err Las propiedades del Objeto Error son: Description, HelpContext, HelpFile, LastDLLError, LastDLLError, Number, Source
Propiedad Description Devuelve o establece una cadena cadena descriptiva asociada a un error. Sintaxis
Variable = Err.Description Err.Description = Cadena descriptiva descriptiva del error
Veremos un ejemplo mas adelante.
Propiedad HelpContext
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 9
Devuelve o establece el identificador de contexto de un tema para un archivo de Ayuda de Microsoft Windows. Sintaxis
Err.HelpContext [= id_contexto] Variable = Err.HelpContext
Esta propiedad y la siguiente le permiten presentar automáticamente la ayuda cuando se produce un error.
Propiedad HelpFile HelpFile Devuelve o establece la ruta completa del archivo de Ayuda de Microsoft Windows que debe mostrarse al producirse el error. Sintaxis
Err.HelpFile = “C:\MiCarpeta\MiFicherodeAyud “C:\MiCarpeta\MiFicherodeAyuda.Hlp” a.Hlp”
También puede leer el valor de esta propiedad: Variable = Err.HelpFile Cuando se especifica un archivo de Ayuda de Microsoft Windows en HelpFile, se le llama automáticamente cuando el usuario presiona el botón Ayuda (o la tecla F1) del cuadro de diálog diálogo o del mensa mensaje je de error error.. Si la propie propieda dad d HelpCo HelpConte ntext xt contie contiene ne un identifi identificad cador or de cont context exto o válido válido para para el arch archivo ivo espe especifi cifica cado do,, se most mostra rará rá auto automá mátic ticam amen ente te el tema tema corre corresp spon ondie diente nte.. Si no se espe especific cifica a nada nada en HelpFil HelpFile, e, apar aparece ecerá rá el archivo archivo de Ayuda Ayuda completo.
Propiedad LastDLLError Devuelve Devuelve un código código de error error de sistema sistema produ producid cido o por por una una llamad llamada a a una una biblio bibliotec teca a de vínculos dinámicos (DLL). Esto ocurre cuando cuando falla la ejecución de una función API.
Propiedad Number Esta es la propiedad mas importante del Objeto Error. Por ello es la propiedad predeterminada. predeterminada. Permite conocer el número del error producido. También nos permite establecer el número de error, cuando nos nos interesa provocar un error mediante código, con el método Raise
¡¡¡ Number es una variable tipo Long !!! Sintaxis
Variable = Err.Number
Al ser la propiedad predeterminada, no es necesario poner Number. La siguiente línea es operativamente igual a la anterior: Variable = Err
Source Devue Devuelve lve o esta establ blec ece e el nomb nombre re del del obje objeto to o aplic aplicac ació ión n que que ha gener enerad ado o el erro error r originariamente. Sintaxis
Variable = Err.Source Err.Source = expresión_cadena
Vea en en la ayuda de VB la explicac ión (muy ilustrati va) de esta propiedad.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 10
El Objeto Error Er ror tiene solamente dos métodos:
Método Clear Borra los valores de todas las propiedades del objeto Err. Err.Clear
Sintaxis
Puede utilizar Clear para borrar explícitamente el objeto Err una vez que se ha tratado un error. Visual Basic llama al método Clear automáticamente siempre que se ejecuta alguna de las instrucciones siguientes: Cualquier tipo de instrucción Resume Exit Sub, Exit Function , Exit Property Cualquier instrucción On Error De aquí se desprende que un error no “sale” del procedimiento en el que se generó. Para salir de un un procedimiento el programa debe pasar necesariamente por una instrucción Exit Sub. En ese momento, desaparecen todas las propiedades del Objeto Error.
Método Raise Genera un error en tiempo de ejecución. Err.Raise(Número, Origen, Descripción, ArchivoAyuda, ContextAyuda) ContextAyuda)
Sintaxis
Los argumentos de Raise se describen a continuación. Requerido. Entero de t ipo Long que identifica la naturaleza del error. Número Requerido. Origen Opcional. Expresión de cadena que indica el objeto o aplicación que ha generado originariamente el error. Descripción Opcional. Expresión de cadena que describe el error. ArchivoAyuda Opcional. Ruta del archivo de Ayuda de Microsoft Windows en el que se encuentra la información sobre el error. Opcional. al. Identifi Identificad cador or de context contexto o que que espe especific cifica a el tema tema del archivo archivo ContextoAyuda Opcion indicado en ArchivoAyuda que contiene la in formación de ayuda del error. Todos odos los argumentos argumentos son opcional opcionales, es, excepto Número. Sin embargo, embargo, si utiliza Raise sin especificar algunos argumentos, y si los valores de las propiedades del objeto Err no se han borrado, tales valores se conservarán para el error actual. Decíamos al principio del Objeto Error que sus propiedades las establece quien las generó. Con el Método Raise se genera un error. Y vea que se pueden establecer sus propiedades.
Control de los errores Ya sabemos que herramienta usa Visual Basic para detectar errores. Vamos a ver ahora como usarla. Pero veamos previamente lo que es en Visual Basic una Rutina. No se extrañe extrañe si alguien le llama Label o Etiqueta . En otros lenguajes se llama así, incluso en Q-Basic, donde no existían los controles Visual Basic llamados etiquetas, se usaba esta denominación. En Visual Basic no podemos usarla, para no confundirla con el control. Una Rutina es un trozo de código escrito escrito en un procedimie procedimiento, nto, que tiene un nombre. nombre. El nombre de la Rutina puede puede ser cualquiera, y debe debe terminar con el carácter dos puntos (:) Por ejemplo: RutinaErrores: El nombre de la rutina debe ocupar él solo una línea. Se accede directamente a la rutina cuando citamos su nombre en el código del procedimiento donde está la Rutina.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 11
Para citarla, debemos debemos usar ese nombre, nombre, quitando quitando el carácter carácter dos puntos puntos final. Podemos Podemos llamarla mediante la sentencia GoTo . Veamos un pequeño ejemplo. Es un botón de comando, y un TextBox. extBox. Si el TextBox extBox (Text1 (Text1)) mantie mantiene ne su texto texto origin original al (Text1 (Text1)) hacem hacemos os que que el programa pase por la rutina. Si lo hemos variado, hacemos que no pase: pase: Private Sub Command1_Click() If Text1 = "Text1" Then GoTo GoTo Rutina Rut ina Else MsgBox "No pasa por la Rutina" End If Exit Sub Rutina: MsgBox "Sí pasó por la Rutina" End Sub La rutina es en realidad un trozo de código del procedimiento que se ejecutará, bien porque hayamos dirigido allí la ejecución del programa (mediante GoTo) o bien porque el programa pase por la rutina al ejecutarse. Observe el Exit Sub que tiene en la línea inmediatamente anterior a la Rutina. Si no lo ponemos, el programa pasará por la rutina una vez ejecutada la sentenci sentencia a condicio condicional nal If - Else - End If, igual que si se tratase tratase de cualquier cualquier otra otra parte parte del del programa. Para evitar que pase por ella, ponemos ese Exit Sub que hará que el programa salga del procedimiento sin llegar al final. En el ejemplo anterior, la condición para que pasase por la rutina era que se cumpliese una determinada condición en Text1. Para que pase por una rutina, al darse la condición de que ha ocurrido un error, usaremos la instrucción On Error GoTo
Importante. Cuidado con GoTo Hay un dicho entre los programadores de Visual Basic. Los programadores se dividen en tres grupos. Los que nunca usan GoTo. Los que usan GoTo sin saber usarla y los que usan GoTo sabiendo usarla, pero dicen que de estos últimos hay muy pocos.
Instrucción On Error GoTo Activa una rutina de tratamiento de errores y especifica la ubicación de la misma en un procedimiento. También También puede utilizarse para desactivar una rutina de trata miento de errores. Sintaxis a
On Error GoTo Rutina ‘Va a la Rutina especificada On Err Erro or Re Resume ume Nex Nextt ‘Pa ‘Pasa del err erro or y cont contin inú úa en en la lín línea sig sigui uie ente nte ‘la que provocó el error On Error GoTo 0 ‘Desacti va todo el tratamiento de errores que ‘haya activado en el procedimiento actual.
Veamos el ejemplo anterior, con la instrucción On error GoTo. Private Sub Command1_Click() On Error Resume Next ‘Con la línea anterior le decimos que se olvide del error y siga en la línea siguiente ‘a la que provocó el error If Text1 = "Text1" Then GoTo GoTo Rutina Rut ina Else On Error GoTo 0 ‘La línea anterior desactiva el tratamiento de errores generado en la línea segunda (On ‘Error Resume Next). Pruebe a quitar y poner esta línea (On error GoTo 0) Err.Raise 53 ‘En la línea anterior generamos “artificialmente” el error 53 MsgBox "No pasa por la Rutina"
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 12
Exit Sub End If Rutina: MsgBox "Sí pasó por la Rutina" End Sub Cuando insertamos la línea On Error GoTo Rutina , el programa sabe que nada mas producirse un error, error, debe ir a la rutina señalada. señalada. En esa rutina tomaremos tomar emos las medidas adecuadas para que se subsane el error producido. Así por ejemplo, si en una línea le decimos al programa que vaya a leer un f ichero de la unidad A:, puede ocurrir que la unidad no tenga metido el disco. O que lo tenga metido pero que no exista el fichero en ese disco. La rutina de corrección de errores debe contemplar cada uno de esos dos casos, y actuar de forma distinta en uno y en otro. Hagamos un ejemplo donde al pulsar un botón (Command2) se busca el fichero Mi ficher.Txt en el disco A: y el contenido de ese fichero se coloca en Label1 Private Sub Command2_Click() Dim Variable As String Open "A:\Mificher.Txt" For Input As #1 Line Input #1, Variable label1.Caption = Variable Close #1 End Sub Si no está metido el disco en la unidad A nos dará el siguiente error: Se ha producido el Error ‘71’ de tiempo de ejecución. El disco no está listo Si estuviese metido el disco, pero no tuviera un fichero llamado Mificher.Txt, daría este error: Se ha producido el Error ‘53’ de tiempo de ejecución. No se ha encontrado el archivo En realidad estos errores no son de programa, sino de una utilización incorrecta del programa, ya que debería estar metido el disco, y que contuviese un fichero llamado Mificher.Txt. Pero en progra programa mación ción hay hay que que prever prever esta estas s eventu eventualid alidad ades. es. Y lo lógico lógico sería sería pone ponerr un aviso aviso diciéndole al usuario que la unidad A: no está preparada (caso 1) o que el disco no contiene el fichero buscado (caso 2)
Instrucción Resume Hemos visto en el apartado anterior la sentencia On Error Resume Next, de la que decíamos que “pasaba” “pasaba” del error y continúa en la línea siguiente a la que provocó el error. error. Es así ya que que la Instrucción Resume hace desaparecer el error mediante código (Pone Err.Numbber = 0). Si le añadimos Next el programa sigue ejecutándose en la línea siguiente a la que generó el error. La Instrucción Resume puede tener las siguientes sintaxis: Sintaxis
Resume [0] Resume Next Resume Rutina
Resume [0] Si el error se ha producido en el procedimiento que contiene el controlador de errores, la ejecución continúa con la instrucción que lo causó. Puede ocurrir que el error no se haya producido en el mismo procedimiento que contiene la rutina de tratamiento de errores, sino en otro al que se le ha llamado desde este. En este caso,
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 13
la ejecución continúa en la instrucción del procedimiento que contiene la rutina de tratamiento de errores desde la que se llamó a otro procedim iento.
Resume Next Si el error se ha producido en el procedimiento que contiene el controlador de errores, la ejecución continúa con la instrucción inmediatamente posterior a la que lo causó. Si el error se ha producido en un procedimiento llamado, la ejecución continúa en la instrucción del procedimiento que contiene la rutina de tratamiento de errores (o la instrucción On Error Resume Next) inmediatamente posterior a aquélla desde la que se llamó a otro procedimiento. Resume Rutina La ejecución continúa en la rutina citada en la instrucción. La rutina debe encontrarse en el mismo procedimiento que el controlador de errores. Ya que conocemos las instrucciones On Error GoTo y Resume, veamos en el ejemplo anterior como resolvemos el problema de que no exista disco en la unidad A: o que en el disco no exista el f ichero buscado: buscado:
EJEMPLO Activemos la detección de errores e introduzcamos una una rutina que detecte detecte el error ocurrido y que haga lo que tenga que hacer en cada caso: Private Sub Command2_Click() On Error GoTo RutinaErrores Dim Variable As String Open "A:\Mificher.Txt" For Input As #1 Line Input #1, Variable Label1.Caption = Variable Close #1 RutinaErrores: If Err Err.N .Num umbe berr = 71 71 Then Then ‘No ‘No hac hace e fal falta ta pone ponerr Err Err.N .Num umbe berr. Bas Basta ta con con Err Err MsgBox "La Unidad A no tiene ningún disco. Introduzca uno" Resume ‘Al poner Resume (sin mas) el programa seguirá ejecutándose ‘en la misma línea que provocó el error. Como hemos ‘intercalado un MsgBox, MsgBox, que lleva implícita una espera espera a que se ‘le haga click clic k en su botón, durante esa espera el usuario puede ‘cambiar el disco y al reiniciarse el programa en esa línea, ya ‘puede tener un disco para que no se repita el error. End If If Err = 53 Then ‘Aquí hemos puesto solamente Err MsgBox "El disco A no tiene ningún ningún fichero llamado Mif icher.Txt. Ponga el disco correcto" Resume End If End Sub
Ventana de Depuración. El Objeto Objet o Debug Es momento ahora de hablar de la ventana de depuración. Esta ventana permite que Visual Basic se comunique con nosotros en tiempo de ejecución. Es la ventana de Debug. No está presente normalmente en la pantalla, pero se presenta haciendo click en Ver | Ventana de Depu Depurac ración ión de la barra barra de menú menú de Visual Visual Basic. Basic. En esta esta ventan ventana a se presen presenta ta lo que que escribamos en un objeto preparado para ayudarnos en la corrección de errores, que se llama precisamente Objeto Debug : Este objeto no tiene propiedades y tiene solamente un método: el Método Print En esta ventana podemos presentar otro tipo de datos, por ejemplo el valor de una variable en un determinado momento:
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 14
Debug.Print MiVariable MiVariable Veremos en el ejemplo de este capítulo una aplicación de la ventana de depuración que le dejará claras las ideas. Si queremos que cuando se produzca un error se nos presente en esa ventana, basta con insertar esta línea de código en la Rutina de Error: Debug.Print Err.Number Debug.Print Err
o simplemente
Hemos Hemos visto la forma forma de detecta detectarr un error y tomar tomar las medidas medidas oportun oportunas as para que el programa siga funcionando. Aquí lo hemos hecho solicitándole una operación al usuario. En otro otros s caso casos s nos nos inte intere resa sará rá que que el prog progra rama ma “pas “pase” e” del del erro errorr, en otra otras s que que repi repita ta un procedimie procedimiento... nto... El programad programador or deberá deberá ver en cada cada caso la respues respuesta ta que que debe debe dar el programa a un determinado error. Un progra programa ma perfe perfecto cto es aque aquell que que contem contempla pla todas todas las posibilid posibilidad ades es de error y les da solución a todas. Esto quiere decir, que un programa debería tener en cada procedimiento una llamada a la detección de errores errores (On error GoTo GoTo ... ) y una rutina de corrección. El trabajo es grande. La recompensa también. Pero un error muy común entre programadores es autocomprobar sus errores. Realiza un programa y comienza a ejecutarlo intentando descubrir los errores en los que puede caer. Le recomiendo que esa labor la realice un compañero. La persona que realizó el programa sabe perfectamente lo que debe hacer. Y aún queriendo, le cuesta mucho trabajo cometer errores. Una persona que nunca haya trabajado con el programa, lo que le cuesta trabajo es no cometerlos.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 15
LA AYUDA DE WINDOWS NOTA sobre las ayudas de los programas Windows Hasta Hasta ahora ahora era normal normal presenta presentarr las ayudas ayudas en el f ormato cásico de fichero .Hlp. Sin embargo, dado el auge que ha tomado el formato Html (sobre todo desde que Microsoft lo incluyó como una parte más de W indows), indows), actualmente se está usando más el formato .Html que el .Hlp. Las razones razones son bastante bastante obvias. La edición de un fichero Html es mucho mas sencilla que la de un Hlp (Y si no se lo cree, léase este capítulo) Pese a todo, se sigue incluyendo este tema, ya que el formato Hlp sigue siendo actual. Eso sí, este capítulo no se ha actu actual aliz izad ado, o, y cuan cuand do se habl habla a del del HC.E HC.Exe xe debe deberí ríam amos os estar star habl hablan ando do del HelpWor HelpWorkSh kShop op (HWC.Exe) (HWC.Exe),, un progra programa ma que que funcion funciona a en Windows Windows,, y para para el que que es aplicable todo lo descrito aque de los fichero .Hpj. Toda aplicación bien terminada debe tener una ayuda. Cualquier aplicación realizada en Visual Basic puede tenerla, tenerla , usando para para ello los recursos que brida Windows. Windo ws. La presentación de la ayuda podría hacerse mediante un formulario, donde se presentan distintos ficheros según las necesidades del usuario. Sin embargo esta forma de presentar la ayuda nunca llegará a ser tan completa como la que brinda Windows, y el trabajo a desarrollar para igualar la presentación de Windows sería laborioso. Solución : utilizar los recursos de Windows. El recurso de Windows es un programa capaz de presentar ficheros de ayuda. Estos ficheros son un poco poco especial especiales es y solamen solamente te se pueden pueden presen presentar tar mediante mediante ese presentador de ficheros de ayuda. Ese es el programa WinHelp.Exe para las versiones de 16 bits y las primeras versiones de Windows 95, y el WinHlp32.Exe para Windows 98 y Windows NT4. Como en todas las aplicaciones de Microsoft (MS) tienen compatibilidad hacia arriba. Por lo tanto no se extrañe que una ayuda que le abre perfectamente el WinHlp32.Exe, si la pretende abrir con el W inHelp.exe (que es más antiguo) le diga que no se trata de un fichero de ayuda. ayuda. Windows dispone dispone de otra utilidad, el programa programa HC.EXE ( Help Compiler) que puede adaptar el fichero fichero .RTF dond donde e escri escribirá birá la ayud ayuda, a, a un formato formato capaz capaz de ser interp interpret retad ado o por por el WINHELP.EXE WI NHELP.EXE Lo vamos vam os viendo vien do todo paso a paso. Antes de comenzar a explicar como se realiza una ayuda Windows vamos a comentar el formato de archivos RTF. Este formato posiblemente le sea familiar debido a que el control RichTextBox pued puede e guar guarda darr y leer leer fiche fichero ros s en ese ese forma formato to.. Las Las sigl siglas as RTF RTF viene vienen n precisamente de Rich Text Format , en castellano, Formato de Texto Enriquecido. Cuando se edita un texto mediante un procesador de textos, el fichero resultante se guarda don un formato distinto para cada procesador. De esta forma, un texto editado en WP no es compatible compatible con el P.T. .T. AmiPro, con Word o con cualquier cualquier otro. Los fabricantes fabricantes de estos estos procesadores procesadores de textos han tenido que incluir una herramienta capaz de convertir un formato a otro para poder alcanzar alcanzar la compatibil idad entre ellos que el mercado exigía. El Formato de Texto Enriquecido pretende ser un nexo de unión entre todos los procesadores de texto, para poder intercambiar ficheros editados en uno u otro. De hecho, las últimas versiones de los mas importantes procesadores de textos incluyen la posibilidad de guardar y buscar el texto en este formato. ( WP, Word) Este formato consiste en guardar mediante caracteres ASCII plenamente legibles tanto el texto escrito como los tipos de letra, tamaño, saltos de carro, etc. Veamos un ejemplo comparativo del mismo texto escrito en Word, guardado en RTF y en ASCII ASCII : Texto1 Este texto está escrito en Word. Observe que podemos poner letra negrita, letra cursiva, cursiva, letra subrayada. Podemos cambiar el color de las letras, rojo rojo,, verde verde,, azul azul.. Podemos cambiar el tamaño de las letras a tamaño mas grande , mas pequeño, etc.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 16
Fin Texto 1 El mismo texto en ASCII puro : Texto1 Este texto est escrito en Word. Observe Observe que podemos podemos poner poner letra negrita, letra cursiva, letra subrayada. Podemos cambiar el color de las letras, rojo, verde, azul. Podemos cambiar el tamaño de las letras a tamaño mas grande, mas pequeño, etc.
Fin Texto 1 Y ahora el mismo texto en formato RTF. En este formato hubo que seccionar las líneas para pode poderr mostra mostrarla rlas s en una hoja, hoja, ya que que RTF RTF utiliza utiliza línea líneas s sin retorno retornos s de carro. Se han han seccionado las líneas terminándolas con un guión bajo y comenzando en la línea siguiente también con un guión bajo. {\rtf1\ansi \deff5\def lang1033{\fonttbl{\f5\fswiss\fcharset0\fprq2 lang1033{\fonttbl{\f5\fswiss\fcharset0\fprq2 Arial;}}_ _{\colortbl;\red0\green0\blue0;\red0\gre _{\colortbl;\red0\green 0\blue0;\red0\green0\blue2 en0\blue255;\red0\gree 55;\red0\green255\blue n255\blue255;_ 255;_ _\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0; \red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\_ _green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\_ blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue_ _192;}{\stylesheet{\widctlpar \f5\fs20\lang1034 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}_ _}{\info{\author LUIS SUAREZ BERNALDO}{\operator LUIS SUAREZ BERNALDO}_ _{\creatim\yr1997\mo3\dy9\hr11\min8}{\revtim _{\creatim\yr1997\mo3\dy9\hr1 1\min8}{\revtim \yr1997\mo3\dy9\hr11 \yr1997\mo3\dy9\hr11\min9}_ \min9}_ _{\version1}{\edmins1}{\nofpages1} {\nofwords38}{\nofchars22 {\nofwords38}{\nofchars220}{\*\company 0}{\*\company }{\vern57431}}\margl1 }{\vern57431}}\margl1701\margr1701 701\margr1701\_ \_ _ margt1417\margb1417 margt1417\margb1417 \deftab708\widowctrl\ftnbj\aenddoc\hyphho \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\formshade_ tz425\formshade_ _ \fet0\sectd \ fet0\sectd \l inex0\headery709\footery709\colsx70 inex0\headery709\footery709\colsx709\endnh 9\endnhere ere {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\p \pnucrm\pnstart1\pnin dent720\pnhang{ nhang{\pntxta \pntxta .}}{\*\pnseclvl2\pnucltr\pnstar_ _ t1\pnindent720\pnh t1\pnindent720\pnhang{\pn ang{\pntxta txta .}}{\*\pnseclvl3\pndec\pnstart1\pninden .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\_ t720\_ _pnhang{\pntxta _pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent7 .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnha 20\pnhang{\pntxta ng{\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pninden \pndec\pnstart1\pnindent720\pnha t720\pnhang{\pntxtb ng{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcl_ _tr\pnstart1\pnindent720\pn _tr\pnstart1\pnindent720\pnhang{\pn hang{\pntxtb txtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\_ _pnstart1\pnindent72 _pnstart1\pnindent720\pnhan 0\pnhang{\pntxtb g{\pntxtb (}{\pntxta )}}{\*\pnseclvl )}}{\*\pnseclvl8\pnlcltr\pn_ 8\pnlcltr\pn_ _start1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pninden )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnha t720\pnhang{_ ng{_ _\pntxtb (}{\pntxta )}}\pard\plain \qj\widctlpar \ f5\fs20\lang1034 Texto1 Texto1 \par \par Este texto est\'e1 escrito en Word. Observe que podemos podemos poner letra _ _{\b negrita}, letra {\i cursiva}, letra {\ul subrayada}. subrayada}. Podemos cambiar_ _ el color de las letras, {\cf6 rojo}, {\cf4 verde}, {\cf2 azul}. Podemos _ _cambiar el tama\'f1o de las let ras a { \fs24 tama\'f1o mas grande}, {\fs16 mas peque\'f1o}, etc. \par \par \par Fin Texto 1 \par \pard \widctlpar \par } Como puede observar, el RTF incluye el texto escrito casi en ASCII, pero añadiendo una serie de datos respecto respecto al tipo de letra, codif ica los acentos, las eñes, y hasta incluye, to mándolo del ordenador, el nombre del operador que lo ha escrito. Estas informaciones también se guardan cuando se archiva un texto en el formato propio del procesador de textos, pero lo hace en binario, por lo que no lo podemos visualizar. El formato RTF, dentro de que mete toda esa información adicional, lo archiva con caracteres ASCII.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 17
La utilidad que tiene Windows para presentar las ayudas utiliza precisamente este formato RTF. Por ello, debemos disponer de un procesador de textos que pueda guardar el texto escrito escrito en este formato. (Word, WP5, WP6 y otros) otros) Los Los ejemplos ejemplos de estos apunte apuntes s se han realizado en Word. Antes de decidirnos a escribir el fichero de ayuda debemos pensar muy bien lo que vamos a poner poner en él. Pensemos Pensemos ante todo a que persona personas s va dirigida dirigida la aplicación, aplicación, sus posibles posibles conocimientos de informática y de otros temas que estarán relacionados con la aplicación. Es decir, planifiquemos la ayuda antes de comenzar a hacerla. Para acceder a la ayuda, Windows ofrece la posibilidad de pulsar F1 . Nuestras aplicaciones debe deben n sacar sacar la ayuda ayuda pulsa pulsand ndo o F1. Lo podr podrán án hacer hacer median mediante te otros otros proced procedimie imiento ntos. s. Comencemos por lo mas sencillo, una ayuda de una única página. Escriba el texto de ayuda con Word y guárdelo en formato RTF, en cualquier directorio, pero preferentemente en uno que no se mezcle con otros ficheros para poder localizarlo mejor. Cree si es necesario un directorio exclusivo para la ayuda. Imaginemos que lo creamos y es el C :\DIRAYUDA, donde guardamos el fichero de ayuda con el nombre AYUDA1.RTF Este Este archivo archivo no lo pued puede e utiliza utilizarr directam directamen ente te el programa programa WINHELP.EX WINHELP.EXE. E. Hay que compilarlo. Para ello utilizamos el compil ador HC.EXE. Este compilador no es una herramienta Windows, por lo que tendrá que ir al DOS y ejecutarlo. El programa HC.EXE se encuentra en el directorio C :\ ..... \VB\HC Pero al compilador HC.EXE hay que suministrarle la información para que pueda trabajar. Esa información se la damos en un fichero que le pasaremos como parámetro, que debe tener extensión .HPJ y que meteremos en el mismo directorio donde tengamos el fichero de ayuda AYUDA1.RTF Este fichero estará editado en ASCII puro. Puede editarlo con el EDIT de MS-DOS o con el Block de Notas de Windows. Imaginemos Imaginemos que lo vamos a llamar FICHAYUD.HPJ FICHAYUD.HPJ y como se dijo, se meterá meterá en el mismo directorio directorio donde donde está está el fichero de de ayuda. ayuda. (C :\DIRA :\DIRAYUDA) YUDA) El nombre que decida para este fichero con extensión .HPJ será el que tenga el fichero de ayuda (Que se obtendrá de la compilación y tendrá por extensión .HLP) Tendrá, de momento, dos líneas. [FILES] AYUDA1.RTF Vayamos al directorio directorio C :\ ...... \VB\HC (en MS-DOS) y tecleemos HC C:\DIRA C:\ DIRAYUDA\ YUDA\ FICHAYUD.HPJ FICHAYUD.HPJ La compilación no suele dar problemas sobre todo en un fichero de ayuda tan simple de una única página. Al compilar, obtenemos un fichero con el mismo nombre que el fichero .HPJ y extensión extensión .HLP, .HLP, (FICHAYUD.H (FICHAYUD.HLP LP en nuestro nuestro caso) caso) que lo dejará dejará en el directorio directorio donde donde estuviera el programa HC.EXE. (Posiblemente el C :\VB\HC) Debe moverlo a otro directorio dond donde e no esto estorbe rbe y lo podam podamos os localiz localizar ar sin proble problemas mas.. Movámo Movámoslo slo al C :\DIRA :\DIRAYUD YUDA A Vayamos a nuestra aplicación VB y abramos el menú de Herramientas | Opciones para sacar el cuadro de Opciones. Vaya a la pestaña de Proyecto y busque el directorio y nombre del fichero .HLP haciendo click sobre el cuadrado con tres puntos (...) que está a la derecha del TextBox de Archivo de Ayuda. Ayuda. Se le abrirá un CommonDialog para buscarlo. NOTA : Para evitar liarse con los directorios, es medida siempre prudente llevarse el compilador de ayudas HC.EXE al directorio donde tengamos el fichero .RTF y el .HPJ.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 18
Haga click en Aceptar y ejecute la aplicación. Pulse F1. ¡SORPRESA ! Tenemos en en pantalla la ventana de ayuda ayuda de Windows Windows con el f ichero ichero que habíamos habíamos escrito. escrito. F1 ha invocado a WINHELP.EXE y este programa presentó el fichero de ayuda asociado con el proyecto. Observe que el texto se adapta a las dimensiones de la ventana. Y si supera en vertical las dimensiones dimensiones de la ventana, aparecen barras barras de scroll verticales. Puede de esta esta forma recorrer todo el fichero f ichero de ayuda. Sin embargo este procedimiento no sería el mas indicado para una información de ayuda extensa. Deberemos poner varias páginas. Si lo hacemos así, al pulsar F1 siempre aparecerá la página 1. Si aparece siempre la página página 1, pongamos en en esta primera página el índice de temas, y en las páginas sucesivas cada uno de los temas. Ya veremos como acceder a cada una de las páginas haciendo click sobre la línea del índice que contiene el título del tema deseado. Tal y como lo hace con cualquier aplicación Windows. Volvamos al editor Word y abramos el fichero que habíamos creado de una página, y añádale mas páginas introduciendo introduciendo avances de página página manuales (Se introducen con Control + Intro) Imaginemos que tenemos esta configuración del fichero :
INDICE 1 - Introducción a la aplicación 2 - Acceso a la Base de Datos 3 - Introducción de datos 4 - Lectura de datos - - - - - - - - -- - - - - -
salto de página manual manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Introducción a la Aplicación Esta aplicación está realizada para . . . . . . . . . . - - - - - - - - -- - - - -
salto de página manual manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Acceso a la Base de Datos
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 19
Para abrir la Base de de datos datos . . . . . . . . . - - - - - - - - -- - - - -
salto de página manual manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Introducción de datos Para introducir datos datos . . . . . . . . . . . . - - - - - - - - -- - - - -
salto de página manual manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Lectura de datos Para leer los los datos . . . . . . . . . . . . . . . .
Ya tenemos hecho un fichero de ayuda con varias páginas. No es suficiente esto, ya que WINHELP.EXE WINHELP.EXE , pulsando pulsando F1, solamente nos mostrará la página 1. Debemos hacer algo para, una vez en la página 1, que nos estará mostrando el índice, poder acceder a cada una de las páginas haciendo haciendo click sobre la línea del índice que contiene el tema de interés. Para ello debemos poner un identificador a cada una de las páginas. Este identificador debe ser único, es decir, no pueden existir dos páginas con el mismo identificador. Para Para introd introduci ucirr un identific identificad ador or en una págin página, a, una una vez que que tenga tenga el fichero fichero de ayuda ayuda terminado, sitúese con el cursor al comienzo del título de la primera página (después del índice), justamente al lado de Introducción a la Aplicación . Inserte en ese punto una Nota al aparecerá esta ventana : pié (Abra el Menú Insertar | Nota al Pié del Word) Le aparecerá
Introduzca una almohadilla (#) en el TextBox TextBox Marca personal. Haga click sobre Aceptar. Aceptar. Le aparecerá en la parte inferior de la pantalla un cuadro para introducir el identificador de esa página. Repita el proceso para todas las páginas insertándoles una Nota al pié a cada una. Al final obtendrá obtendrá este resultado : INDICE 1 - Introducción a la aplicación 2 - Acceso a la Base de Datos 3 - Introducción de datos 4 - Lectura de datos - - - - - - - - - - - - - - - - - - - - - salto de página manual - - - - - - - - - - - - - - - - - - - - - - - # Introducción a la Aplicación Esta aplicación está realizada para . . . . . . . . . .
#
Introducción
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 20
- - - - - - - - - - - - - - - - - - - - - salto de página manual # Acceso a la Base de Datos
- - - -- - - -- - - -- - -- - - -- - - -
Para abrir la Base de de datos datos . . . . . . . . . - - - - - - - - - - - - - - - - - - - - - salto de página manual - - - - - - - - - - - - - - - - - - - - - - - # Introducción de datos Para introducir datos datos . . . . . . . . . . . . - -- -- -- -- -- -- -- -- -- # Lectura de datos
salto de página manual
- -- -- -- -- -- -- -- -- -- -- --
Para leer los los datos . . . . . . . . . . . . . . . . EN ESTA PARTE PARTE DE LA PAGINA PAGINA VERA UNA SEPARACI SEPARACION ON QUE PONE, A LA IZQUIERDA IZQUI ERDA Todas las notas al pie #
Introducción Acceso # Meterdatos # Leerdatos #
(Observe que estamos simulando simulando la ventana de Word. Donde ve - - salto de página página manual - entienda que estamos estamos simulando lo que Vd. ve en la ventana real) En la parte inferior puede ver los identificadores que se han asociado a cada página. ¿Qué podemos hacer para asociar estos identificadores a las líneas correspondientes del índice ? Muy sencillo, y es el siguiente paso que debe hacer : Volvamos a la pri mera página del documento Word, donde tenemos el índice. INDICE 1 - Introducción a la aplicación 2 - Acceso a la Base de Datos 3 - Introducción de datos 4 - Lectura de datos Habrá observado en las aplicaciones Windows que para seleccionar un tema hay que poner el puntero del ratón sobre la línea deseada, que está en color verde, y en ese momento el puntero se convierte en una mano. En nuestra aplicación ocurrirá lo mismo. Seleccione todas las líneas que quiere asociar a cada uno de los identificadores (Una a una o todas a la vez, Formato o | Fuentes Fuentes . Le depe dependi ndien endo do de como como las tenga tenga dispu dispuest estas) as),, y vaya al menú menú Format aparecerá el cuadro de diálogo. Vaya al TextBox Subrayado de ese cuadro de diálogo y elija Doble.
#
Acceso Meterdatos # Leerdatos #
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 21
Al ponerles doble subrayado, le aparecerán en la ayuda de color verde, y el puntero se le transformará transformará en una mano cuando cuando lo ponga ponga encima de una de esas líneas. líneas. Pero todavía queda asociarlas a cada uno de los identificadores. Para ello tiene que llevar el puntero del ratón justamente al final de cada una de las líneas. Al hacer click el puntero de escritura se colo coloca ca en ese ese punt punto. o. Tien Tiene e que que escri escribir bir a cont contin inua uació ción n de cada cada línea línea el nomb nombre re del del identificador que corresponda. Pero lógicamente no querrá que se vea en la pantalla de ayuda. Por lo tanto debe hacerlo invisible. Para escribir un texto invisible en Word hay que pulsar las teclas Control + Mayúsculas Mayúsculas + O. Pulse las tres al mismo tiempo y a continuación escriba el nombre nombre del del identific identificad ador or que que corres correspo pond nda. a. No verá lo que que escri escribe be pues pues para para eso eso está está escribiendo con texto invisible. Puede visuali zarlo mediante el botón
del editor W ord. Verá también todos los caracteres caracteres de control control del documento. documento. Si lo prefiere, prefiere, vaya al menú Herramientas | Opciones y sobre la pestaña Ver seleccione Texto oculto ocult o. Proceda de igual forma con todas las líneas del índice. Cuando termine, guarde el documento en formato RTF y compílelo de la forma explicada mas atrás. Posiblemente ahora le salgan errore errores s de compila compilación ción,, pues pues el compila compilador dor compru comprueb eba a que que todos todos los identifi identificad cadore ores s se corresponden en el índice y en las páginas. Si le falta algún pie de página o un salto de carro manual le dará error. También También le dará un error, mejor dicho una observación, indicándole que hay párrafos ocultos. Es lógico, ha detectado los textos ocultos que contiene el fichero. Ni caso. Le habrá creado el archivo .HLP y le sugiero que lo pruebe, moviéndolo al directorio C :\DIRAYUDA y ejecutando la aplicación. Pulse F1 y le saldrá la página con el índice y las líneas del índice en verde. Si lo ha hecho todo perfectamente, al seleccionar una y otra línea le aparecerá la página correspondiente. ¡ Ya tenemos una ayuda de varias páginas !
Ventanas Emergentes Es posible que dentro de la información presentada en cualquiera de las páginas anteriores, exista una palabra o frase que quisiera explicar con mas detalles. Habrá observado en las ayudas de Windows que algunas frases dentro de las páginas de ayuda están en verde, y al
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 22
acercar el puntero del ratón a ellas se convierte en una mano. Para poder hacer lo mismo en nuestra ayuda, ayuda, vol vamos al documento Word. INDICE 1 - Introducción a la aplicación 2 - Acceso a la Base de Datos 3 - Introducción de datos 4 - Lectura de datos - - - - - - - - - - - - - - - - - - - - - salto de página manual - - - - - - - - - - - - - - - - - - - - - - - # Introducción a la Aplicación Esta aplicación está realizada para . . . . . . . . . . - - - - - - - - - - - - - - - - - - - - - salto de página manual # Acceso a la Base de Datos
- - - -- - - -- - - -- - -- - - -- - - -
Para abrir la Base de de datos datos . . . . . . . . . - - - - - - - - - - - - - - - - - - - - - salto de página manual - - - - - - - - - - - - - - - - - - - - - - - # Introducción de datos Para introducir datos datos . . . . . . . . . . . . - -- -- -- -- -- -- -- -- -- # Lectura de datos
salto de página manual
- -- -- -- -- -- -- -- -- -- -- --
Para leer los los datos . . . . . . . . . . . . . . . .
Observe Observe unas unas palabra palabras s que están subraya subrayadas das.. Imagínese Imagínese que esas palabras palabras tienen un significado que queremos explicar con mayor detalle. Puestos en nuestro caso, queremos explicar con mas detalle lo que es una aplicación, aplicación , una Base de Datos, Datos, introducir y introducir y leer . Pretendemos que, al hacer click sobre una de estas palabras se abra, dentro de la ventana de ayuda ayuda,, otra otra ventan ventana a con la explica explicació ción n de lo que que es esa palab palabra ra concre concreta. ta. Por Por lo tanto, tanto, debemos introducir esas informaciones a base de introducir nuevas páginas en el documento Word donde editamos el fichero de ayuda. Añádalas de la misma forma insertándoles un pie de página y el identificador deseado, de la misma forma que se explicó mas atrás. Recuerde que el identificador debe ser único. Una vez terminado de introducir todas las nuevas páginas, vaya a las palabras o frases que quiere explicar con el texto de esas páginas, selecciónelas y deles el atributo de subrayado simi lar a cuando hizo lo del subrayado doble, pero esta vez SIMPLE) simple (Hágalo de forma similar Introduzca inmediatamente después de la palabra o frase un texto oculto con el nombre del identificador seleccionado para la página deseada deseada en esa palabra. Guarde el documento W ord y vuelva a compilar como anteriormente. Ejecute la aplicación y compruebe como vamos avanzando en el tema de las ayudas de Windows. Si repasamo repasamos s las propiedade propiedades s de los controle controles, s, seguro seguro que se acuerda de la propied propiedad ad HelpContextID que tenían la mayoría de de los controles VB. En aquel momento momento decíamos que esa propiedad que establece un número de contexto asociado para este control. Este número se aplica para determinar determinar la ayuda interactiva interactiva asociada a este control. control. Ha llegado el momento de sacarle partido a esa propiedad.
#
Introducción Acceso # Meterdatos # Leerdatos #
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 23
Podemos usar la tecla F1 para acceder al índice de la ayuda de una aplicación y movernos a lo largo de la ayuda seleccionando seleccionando una u otra información. A veces resulta práctico seleccionar directamen directamente te la ayuda correspo correspondie ndiente nte a la función de un control. control. Para poder poder hacer esto, asociaremos una de las páginas del documento Word anterior al número que figura en la propiedad HelpContextID. Cuando ese control tenga el foco, al pulsar F1 saldrá como página por defecto la página asociada asociada mediante la propiedad propiedad HelpContextID. Para establecer esta relación vayamos al fic hero con extensión .HPJ que servía para introducir los datos datos al Help Help Compile Compilerr. En nuestr nuestro o caso caso se llamaba llamaba FICHAYUD FICHAYUD.HPJ .HPJ y tenía tenía por el momento, solamente solamente dos líneas. [FILES] AYUDA1.RTF En estas dos líneas le introducíamos el nombre del fichero de ayuda [FILE]. Añadamos ahora en otro apartado [MAP] la relación entre los identificadores de página y los números de contexto de la propiedad HelpContextID de cada uno de los controles que la tengan activada (valor distinto a 0). Se escribirá el nombre del identificador de página, y separado por un espacio o un tabulador, el número de contexto : [MAP] Ide Identif ntific ica ador1 or1 Ide Identif ntific ica ador2 or2 Ide Identif ntific ica ador3 or3 Ide Identif ntific ica ador4 or4
1 2 3 4
En este caso, cuando un control que t iene en su propiedad HelpContextID HelpContextID el número 3 tiene el foco, al pulsar F1 aparecerá como página por defecto la correspondiente a la explicación con identificador nombre Identificador3. Lo mismo ocurrirá con el resto de los identificadores. Añada a su aplicación 4 TextBox y asígneles los valores 1, 2, 3 y 4 a sus propiedades HelpContextID. Vuelva a compilar la ayuda y ejecute la aplicación. Vaya pasando el foco de uno a otro TextBox y comprobándolo. Puede que las ayudas que quiera aportar a cada uno de los controles sea muy breve, caso por ejemplo de la que puede introducir en los TextBox para indicar al usuario lo que se va a hacer con el dato concreto que se va a meter en ese TextBox. Y que esas ayudas breves sean muy numerosas numerosas y tal vez cambiantes de un usuario usuario a otro. Esto complicaría su fichero de ayuda ayuda original, original, al que debería introducir introducir muchas muchas páginas páginas nuevas. Puede editar editar estas estas pequeñ pequeñas as ayud ayudas as en otro otro docu docume ment nto o Word, Word, de la misma misma forma forma que que se ha desc descrit rito, o, y darle darle un determinado nombre nombre (AYUDA2.RTF (AYUDA2.RTF para nuestro nuestro ejemplo) y añadirlo como otro fichero en la lista [FILES]. Colóquelo tras tras el fichero anterior, anterior, pues el que que lleva el índice debe ser el primero que figure en la lista. Debe añadir añadir la relación relación entre los nombres nombres de identificador identificador que haya puesto en ese nuevo fichero y los números de contexto de cada control. El fichero f ichero FICHAYUD.HPJ FICHAYUD.HPJ queda de momento con la siguiente forma : [FILES] AYUDA1.RTF AYUDA2.RTF [MAP] Ide Identif ntific ica ador1 or1 Ide Identif ntific ica ador2 or2 Ide Identif ntific ica ador3 or3 Ide Identif ntific ica ador4 or4
1 2 3 4
Este procedimiento de acudir rápidamente a la ayuda de un determinado control puede que no sea el ideal, ya que en una aplicación, siempre tiene el foco algún control. Si ese control que ahora mismo tiene el foco tiene activado el HelpContextID, y el usuario pulsa F1, con la
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 24
intención de ir a ver cualquier cosa no relacionada con el control que tiene actualmente el foco, se verá sorprendido con que aparece una información que nada tiene que ver con la esperad esperada a (índice). En cualquier cualquier caso, siempre siempre podrá ir al índice índice haciendo haciendo click en el botón CONTENIDO de la ventana de ayuda, pero en principio no está bien que le aparezca en pantalla una información no esperada. Tiene solución , incluya en el menú (palabra Ayuda) o en un control Image con el símbolo ? una llamada al programa WINHELP.EXE, WINHELP.EXE, pasándole pasándole como parámetro el nombre del del fichero de ayuda. ayuda. Esto lo podemos podemos hacer hacer mediante la función SHELL SHELL “WINHELP.EXE C:\DIRAYUDA\FICHAYUD.HLP “, 1 (Vea función Shell. No se olvide del 1 final, pues si no lo pone la ayuda le saldrá minimizada. Puede poner también un 4) También puede utilizar para este fin el CommonDialog. Introduzca un CommonDialog en su aplicación y ponga en su propiedad HelpFile el nombre del fichero de de ayuda. ayuda. La propiedad propiedad HelpCommand de este CommonDialog debe estar puesta a 3 para que comience mostrando el índice de la ayuda. En estas condiciones, condiciones, en vez de acudir a la función Shell para ejecutar el WINHELP.EXE, ejecute CommonDialog.ShowHelp . Vea con mas detalles detalles las propiedad propiedades es del CommonDialog, pues le permite presentar presentar otras funciones de la ayuda de Windows (Ayuda de la Ayuda, etc.)
Titulo de la ventana de Ayuda Ayuda Habrá observado que la ventana de ayuda tiene, en la barra de título el siguiente texto : Ayuda de Windows. Si deseamos personalizarlo y poner el nombre de nuestra aplicación, basta con añadi añadirr un par par de línea líneas s al fichero fichero FICHA FICHAYUD.HP YUD.HPJ. J. Las Las corre corresp spon ondi dient entes es al apart apartad ado o [OPTIONS]. [OPTIONS]. Este aparta apartado do debe debe ir en primer lugar del fichero, fichero, y puede puede llevar la información información de la barra de título y el CopyRight. Estos dos parámetros parámetros se introducen de la siguiente forma : [OPTIONS] TITLE= Nuestra Aplicación VB - Fichero de Ayuda Ayuda COPYRIGHT= Nombre del Autor(a) [FILES] AYUDA1.RTF AYUDA2.RTF [MAP] Ide Identif ntific ica ador1 or1 Ide Identif ntific ica ador2 or2 Ide Identif ntific ica ador3 or3 Ide Identif ntific ica ador4 or4
1 2 3 4
El dato introducido en la línea COPYRIGHT sale en el menú de la pantalla de ayuda, en Ayuda | Versión.
Gráficos en la ventana de Ayuda. Ayuda. Si necesita introducir un gráfico en la ventana de ayudas puede puede hacerlo de dos formas : - Introducirlo en el f ichero Word. Esta opción es recomendable si el gráfico es muy pequeño. - Introd Introduci ucirlo rlo directam directament ente e desd desde e un fichero fichero .BMP .BMP ó .WMF (Metar (Metarchiv chivo). o). Recom Recomen enda dable ble cuando el gráfico es grande. Este método se denomina de referencia a un gráfico. Para introducirlo por el primer procedimiento, inserte el gráfico en el texto Word y proceda como siempre.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 25
Para introducirlo por el segundo método, tiene tres posibilidades : Introducir el gráfico en el centro de la ventana de ayuda, introducirlo a la izquierda con texto a su derecha o a la derecha con texto a su izquierda. Se supo supone ne que que el gráfico gráfico está está en un fichero fichero llamado llamado GRAFICO1 GRAFICO1.BMP .BMP en el direct directorio orio C:\DIRAYUDA. Vayamos al documento Word, y en el sitio donde desee introducir el gráfico inserte la(s) línea(s) :
{bmc c:\dirayuda\grafico1.bmp} Le colocará este gráfico en medio de la ventana de ayuda, y este texto inmediatamente debajo del gráfico. o
{bml c:\dirayuda\grafico1.bmp} Le colocará este gráfico a la izquierda de la ventana de ayuda, y este texto a la derecha del gráfico. o
{bmr c:\dirayuda\grafico1.bmp} Le colocará este gráfico a la derecha de la ventana de ayuda, y este texto a la izquierda del gráfico. Se han resaltado en negrita las tres opciones. Recuerde la llaves donde se encierra la posición y el nombre (y path) del gráfico. Debe tener cuidado al introducir gráficos, ya que el compilador (HC.EXE) trabaja en DOS, y me da la impresión de que no utiliza mas que los primeros 640 Ks. de memoria. Con un gráfico de 470 Ks. usado en la preparación de estos apuntes fue incapaz de compilarlo, dando error de memoria insufic iente. (Y no es que el Ordenador Ordenador no tenga RAM suficiente)
Historial La Ayuda de Windows nos permite recordar todas las páginas sobre las que se hizo una consu consulta lta.. Esto Esto puede puede ser muy útil, útil, pues pues tenemo tenemos s muy accesi accesible ble los los temas temas que que hemos hemos consultado, consultado, para poder realizar una nueva lectura de los mis mos si fuese necesario. Para obtener la ventana de historial, basta con hacer click en la barra de menú de la ventana de Ayuda en Opciones | Mostrar Ventana de Historial . Pero para que se pueda mostrar el historial, es necesario darle un nombre a las páginas, y será será ese ese nombre nombre el que que figure figure en la ventan ventana a de historial historial.. Ese nombre nombre es distinto distinto del del identificador de página, aunque no hay ningún problema porque sea el mismo. Ponga como nombre de la página una palabra que identifique esa página de una forma única. Para poner el nombre a la página, vaya al comienzo de cada página e introduzca una nota al pié de la misma forma que cuando ponía el identificador. En este caso el símbolo a introducir en la Marca personal es el $. Proceda a introducir el nombre en la parte de abajo de la pantalla de Word
Palabras Clave La Ayuda de Windows nos permite accede a una página usando como criterio de búsqueda ciertas palabras que ponemos como clave. Por ejemplo, si queremos que aparezca nuestra página de ejemplo que habla de Acceso a la Base de Datos, cuando el usuario busca una de las siguientes palabras palabras : Tablas, Tablas, Base, Registro, y a la de Lectura de Datos cuando busque busque Obtener, Leer y Visualizar Volvamos al editor Word, a las dos páginas nombradas y al lado de las notas al pié anteriores, introduzca otra, esta con la Marca personal personal K. En la parte inferior de la pantalla, donde pone el nombre nombre de la nota nota al pie, pie, pong ponga a introd introduzc uzca a las palabra palabras s clave clave para para cada cada una una de ellas, ellas, separadas con una coma. Salve el fichero RTF y vuelva a compilar. Ejecute la aplicación y
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 26
saque la Ayuda. Observará que el botón Búsqueda de la ventana de ayuda está habilitado. Haga click en este botón y verá que esas palabras ya figuran en la lista.
Usar los Gráficos de la Ayuda como enlaces a páginas Lo mismo que hacíamos con las palabras, bien las del índice, a las que con un subrayado doble les introducíamos un enlace a una página, o con cualquier palabra o frase de una págin página, a, que que median mediante te un subr subraya ayado do simple simple les introd introducí ucíamo amos s un enlac enlace e a una una ventan ventana a emergente, lo mismo podemos hacer con la referencia a un gráfico. (Vea un poco mas arriba, las referencias a los gráficos del tipo {bmc c:\dirayuda\grafico1.bmp} ) Si seleccionamos seleccionamos esa referencia y le ponemos el atributo de doble subrayado, al acercar el puntero del ratón a ese gráfico (en la ayuda) nos mostrará una mano, y haciendo click sobre el gráfico sacará la página página correspo correspondie ndiente. nte. Si le ponemos ponemos el atributo atributo de subraya subrayado do simple, simple, nos sacará sacará una ventana emergente. Eso sí, en cualquiera de los dos casos, deberemos poner, a continuación de la referencia al gráfico, con texto invisible, el indicador de página que especifique la página o ventana emergente que queremos mostrar.
Páginas en secuencia Si tenemos una ayuda muy larga y la queremos leer toda, con lo que sabemos deberíamos ir al índice y desde allí acceder a la página 1, leerla, volver al índice, acceder a la página 2, leerla, volver al índice .... Para evitar este proceso, y acceder secuencialmente a cada una de las páginas, podemos asignar a cada una de las páginas un código de secuencia, que podrá estar formado por caracteres alfanuméricos. Este código de secuencia será el que marque el orden de aparición de las páginas. Pero el orden de aparición será según el código ASCII de los caracteres que formen ese código, comenzando por la izquierda. Por lo tanto puede ocurrirle la paradoja de que aparezca primero la página 100 que la 65. Es decir, si los códigos están formados por número números s apare aparecer cerán án primer primero o todas todas las págin páginas as que que comien comiencen cen por por 1, aunq aunque ue el valor valor numérico de una de ellas sea superior superior a otra que comience por 2, 3, 4, ... Para asignar este código de secuencia deberemos deberemos introducir otra nota al pié para cada página, en este caso con con la marca personal + (signo mas). También También deberemos deberemos indicarle al WinHelp que deseam deseamos os sacar sacar los botone botones s (<<) y (>>) para despla desplazarn zarnos os por las las páginas. páginas. Esto se se consigue añadiendo una nueva sección al archivo .HPJ que se denomina [CONFIG] y le introduciremos en esta sección la expresión BrowseButtons() El fichero f ichero FICHAYUD.HPJ FICHAYUD.HPJ quedará de la siguiente forma :
[OPTIONS] TITLE= Nuestra Aplicación VB - Fichero de Ayuda Ayuda COPYRIGHT= Nombre del Autor(a) [FILES] AYUDA1.RTF AYUDA2.RTF [MAP] Ide Identif ntific ica ador1 or1 Ide Identif ntific ica ador2 or2 Ide Identif ntific ica ador3 or3 Ide Identif ntific ica ador4 or4
1 2 3 4
[CONFIG] BrowseButtons()
Encabezado de páginas
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 27
Habrá observado en la ayuda de Visual basic que una o dos líneas en la parte superior de la ventana ventana de ayuda ayuda se conservan conservan allí continuam continuamente ente aunque aunque nos desplacemo desplacemos s hacia abajo mediante los cursores de desplazamiento. Esas líneas son el Encabezado de página . Para conse consegui guirr esto esto en nues nuestra tra ayuda ayuda debe deberem remos os escri escribir bir las línea líneas s que que quera queramos mos que que se conserven como encabezado de página al principio de cada página, seleccionarlas con el Formato | Párraf Párrafo o (Se supone que está utilizando el cursor cursor del ratón ratón y abrir abrir el menú menú Formato procesa procesador dor de texto Microsoft Microsoft Word) donde donde le aparecerá aparecerá un cuadro cuadro de diálogo con dos dos solapas, Sangría y Espacio y Presentación. Presentación. Elija Presentación y dentro de esta solapa, active la casilla Conservar con el Siguiente . Las líneas que hubiera seleccionado se le conservarán como Encabezado de página.
VENTANAS MULTIPLES Con frecuencia es útil emplear varias ventanas para mostrar la información de una aplicación. El ejemplo que tenemos mas a mano es el de la Ayuda de Visual Basic. Cuando tenemos seleccion seleccionada ada la ayuda de un control, se pueden pueden observar al menos dos palabras palabras que que nos llevan a una segunda segunda ventana ventana : Propieda Propiedades des y Eventos. Eventos. Cuando Cuando elegimos una de estas informacione informaciones s aparece aparece una segund segunda a ventana ventana que nos muestra muestra la información información pedida, pedida, sin perder la información que tenemos en la primera ventana. Esta segunda ventana se comporta de manera idéntica a la primera, en cuanto a llamadas a otras páginas o a menús emergentes. Para poder presentar esta segunda ventana es necesario primero definirla. Para ello volvamos a nuestro fichero .HPJ y le añadiremos un nuevo apartado : WINDOWS, donde introduciremos el nombre de la nueva ventana, el título de la misma (El título que aparecerá en su parte superior), y, entre paréntesis, su posición y dimensiones. El fichero f ichero .HPJ quedará de la siguiente forma, tras introducirle dos nuevas ventanas : [OPTIONS] TITLE= Nuestra Aplicación VB - Fichero de Ayuda Ayuda COPYRIGHT= Nombre del Autor(a) [FILES] AYUDA1.RTF AYUDA2.RTF [MAP]
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 28
Ide Identif ntific ica ador1 or1 Ide Identif ntific ica ador2 or2 Ide Identif ntific ica ador3 or3 Ide Identif ntific ica ador4 or4
1 2 3 4
[CONFIG] BrowseButtons() [WINDOWS] Ventana2 = “Titulo de esta Ventana”, (PosiciónX, PosiciónY, DimensiónX, DimensiónY) Ventana3 = “Titulo de esta Ventana”, (PosiciónX, PosiciónY, DimensiónX, DimensiónY) Para llevar la información información a una de estas estas ventanas, ventanas, en vez de a la ventana principal, principal, se añadirá tras el identificador de la página que queremos enviar a la nueva ventana el símbolo > y a continuación el nombre de la ventana.
El Objeto App Introducimos aquí un nuevo objeto Visual Basic. El objeto App es un objeto global al que se accede con la palabra clave App. (No se líe. El objeto App no es ni mas ni menos que un conjunto de datos acerca de la aplicación) Determina o especifica información sobre el título de la aplicación, la ruta de acceso de su archivo ejecutable y los archivos de Ayuda, y si está ejecutándose una instancia anterior de la aplicación. Este objeto tiene solamente propiedades. No tiene ni Eventos ni Métodos. Una de sus propiedades es HelpFile , propiedad que es de lectur lectura a y escrit escritura ura.. Es decir decir,, podem podemos os obten obtener er el nombr nombre e del fichero fichero de ayuda ayuda de una una aplicación consultando el valor de esa propiedad del Objeto App. En el ejemplo siguiente introducimos el nombre del fichero de ayuda en el Label1 Label1.caption= App.HelpFile Como la propieda propiedad d HelpFile tambié también n es de escrit escritura ura,, se pued puede e cambia cambiarr en tiempo tiempo de ejecución el fichero de ayuda. Piense lo útil que puede resultar esto para cambiar el idioma de la ayuda de una aplicación. Para ello basta con imponer el nombre (con su Path) del nuevo fichero de ayuda : nuevaayuda.hlp" App.HelpFile = "C:\ ..... \ ..... \ nuevaayuda.hlp" (Vea un poco mas adelante mas información sobre el Objeto App)
Otros Compiladores Compilad ores de Ayuda (HCP.EXE, (HCP.EXE, HCW.EXE, ...) . ..) En este capítulo hemos citado como compilador del f ichero de ayuda al programa HC.EXE que habitualme habitualmente nte se se encue encuentra ntra en en el directo directorio rio C :\ . . . . \ VB\HC. VB\HC. Este compilador compilador trabaj trabaja a perfectamente con ficheros .RTF creados con las versiones primeras del Word. Si Ud. realiza los ficheros .RTF con el Word para Windows95 (Word 6.0), no habrá tenido ningú ningún n proble problema ma con con lo descri descrito to anter anterior iormen mente. te. Si tiene tiene Word de office9 office97 7 (W97) habrá habrá observado que al compilar la ayuda con el HC.EXE le sale un error. No se preocupe. Es que el fichero RTF creado por W97 es distinto del creado por W95, lo cual, aparte de dar una idea de como como se trabaj trabajan an los temas temas de compa compatibil tibilida idad d entre entre proce procesa sado dore res s que que debe debería rían n ser ser compatibles, nos obliga a buscar otro compilador de ayudas. No lo inten intente te con el HCP.EX HCP.EXE. E. Tamp Tampoco oco vale. Busq Busque ue por Intern Internet et un fichero fichero llamad llamado o HCW.EXE, compilador que tiene además la ventaja de que trabaja en Windows. Usa el mismo fichero .HPJ y acepta los ficheros .RTF creados con W95 y W97 El aspecto de este compilador de ayudas es el siguiente :
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 29
Aparte de este compilador, existen otros que funcionan de forma similar. No vamos a explicar cada uno de los compiladores que podamos encontrar, que como se dijo hay bastantes y ( creo que) que) shareware. shareware. Lo importante es que que todo lo dicho respecto respecto a la edición de los ficheros :RTF y .HPJ sigue sigue siendo siendo válida para para estos estos compilador compiladores. es. E xisten xisten algunos algunos compiladores compiladores que también crean el fichero .HPJ. Es comprensible no intentar examinar uno a uno en en esta Guía del Estudiante.
LSB
Visual Basic
-
Guía del Estudiante
Capítulo 10
Página 30