Transcript
Page 1: Tutorial Embedded Visual Basic

1 Entrega

Hola a todos, hace mucho tiempo que quería hacer esto, pero por problemas de tiempo no lo había podido realizar. Pensando en que así como yo, muchos que apenas empiezan a entrar a trabajar con el sistema operativo Windows CE y con su variante Pocket PC y con la herramienta de desarrollo de Microsoft, para este Sistema Operativo Microsoft Embedded Visual Basic 3.0, no encuentran un manual de usuario claro y conciso, además de que toda la documentación esta en idioma ingles y nuestra lengua materna es español es difícil de aprender y la curva de desarrollo se hace a veces bastante alta.

Pensando en esto y gracias al apoyo de Cepolis, me decidí a publicar estas notas que ya tenia escritas de tiempo atrás y que ahora pasan a ser creo, y con mucha modestia (creando por favor -) el primer tutorial de este ambiente de desarrollo llamado Embedded Visual Basic 3.0.

Bueno empecemos ya... con un poco de historia patria.... este sistema de desarrollo para Pocket PC y para Windows CE en general, desciende de una herramienta que era un add-in en Visual Basic 6.0, era el Visual Basic 6.0 Toolkit for Windows CE, este add-in tenia un costo de alrededor de $200 dólares y tenia sus “gallitos” como decimos por acá, estos a su vez descendían de sus correspondientes versiones anteriores Visual Basic 5.0.

Embedded Visual Basic 3.0 (eVB) soluciona el inconveniente de que se necesitaba Visual Basic por lo menos en su versión Profesional, para empezar a desarrollar una aplicación para Windows CE. EVB aparece como un ambiente de desarrollo independiente de Visual Basic, con muchísimas correcciones a los bugs de su predecesor. Además de todo lo anterior, es que es GRATIS su adquisición, lo cual abre muchas posibilidades a pequeños programadores que no tenían acceso a este software de manera legal.

En esta primera entrega vamos a hacer un recorrido general y rápido por todo el ambiente de desarrollo o IDE (por sus siglas en ingles) de eVB.

El Principio

Embedded Visual Basic no genera programas ejecutables directamente (.exe), eVb genera archivos con la extensión .vb, estos archivos son una especie de script muy optimizado con los datos exactos para ser mostrados en la interfase grafica de Pocket PC, Handheld PC y PalmSize PC.

Estos archivos .vb son enlazados a un programa ejecutable (pvbload.exe) así como se enlazan los archivos .doc a word, por ejemplo. Este programa “pvbload.exe” se encarga de interpretar los comandos que se encuentran en el archivo .vb y traduce y ejecuta con ayuda de archivos dll para su correcta ejecución en Pocket PC.

El runtime de eVB esta presente en la ROM del sistema Windows CE que tengamos. Como los archivos .vb son enlazados a pvbload.exe, ellos heredan el icono de este

programa. Es por esto que todos los programas eVb tienen el mismo icono.

Page 2: Tutorial Embedded Visual Basic

Este icono no puede cambiarse como sucede en el PC, por lo menos no directamente desde eVB, con un sencillo programa en eVC se puede hacer esto, pero eso no es el tema de ahora.

ActiveSync

Activesync es el programa que permite sincronizar los datos de nuestro PDA o Pocket PC con el PC de escritorio, permite también instalar los programas en el Pocket. En este momento se encuentra en su versión 3.5 y se puede bajar de forma gratuita del sitio de Microsoft y viene en el CD que acompaña a los Pocket PC.

Instalación de las eVT.

Se puede instalar las eVT en Windows 98 SE, Windows NT 4 en sus versiones Servidor o Workstation, Windows 2000 y Windows XP. Si desea probar los programas directamente en su PC utilizando un emulador que viene con las eVT, debe obligatoriamente instalarlas en Windows NT Workstation como mínimo.

Ejecutar eVB

Para ejecutar eVB nos vamos al botón de Inicio -> Programas -> Microsoft Embedded

Visual Tools -> Embedded Visual Basic 3.0, o hacemos clic en el icono si lo tenemos en el escritorio del computador.

A continuación vemos la pantalla de inicio al ejecutar eVB:

Podemos apreciar en el panel de la parte inferior los diferentes tipos de proyectos que podemos desarrollar con eVB. Para este caso concreto existen 4 iconos, en los que se puede apreciar que podemos crear proyectos para Windows CE Palm-Size (Son PDA del mismo estilo de los Pocket PC, pero con sistema operativo Windows CE), Windows CE HPC Pro (Handheld PC Profesional, este tipo de dispositivos son los que tienen teclado un ejemplo de estos dispositivos son las Jornadas 720 de HP). Y proyectos de Windows Pocket PC 2002. La cantidad y tipo de estos iconos dependen de los SDK (Software Development Kit) que hayamos instalado en nuestro PC, en este momento existe una versión de SDK para Pocket PC 2000 y una versión del SDK para Pocket PC 2002 que es la ultima versión. Esto no es exacto, ya que ya salio al mercado el nuevo sistema operativo Windows CE .NET, para el cual también existe su correspondiente Compact FrameWork for Windows CE .NET (Entorno de desarrollo para Plataforma .NET), este esta en su versión beta y solo lo están probando las personas que son “betatesters” registrados en Microsoft. En su momento cuando los “mortales” tengamos acceso a el, hablaremos de ello también.

Page 3: Tutorial Embedded Visual Basic

En esta pantalla escogemos el tipo de proyecto a trabajar y presionamos el botón Open para abrir o crear el proyecto propiamente.

Como se puede apreciar aparecen dos “solapas”, Existing y Recent para abrir un proyecto que ya exista.

Nosotros escogeremos Windows CE for Pocket PC 2002 como tipo de proyecto, y se nos abrirá el ambiente para empezar con nuestro trabajo.

Voy a asumir que tenemos conocimientos en Visual Basic 5.0 o 6.0 y haré algunas analogías entre uno y otro. Como podemos apreciar en la grafica el ambiente de desarrollo es Visual Basic!!!! Pues esa es una de las grandes ventajas, no es extraño el ambiente ya que lo conocemos de Visual Basic para PC, tenemos la barra de herramientas a la izquierda, la del explorador de proyectos a la derecha y arriba y la de propiedades a la derecha y abajo. Al centro nuestra primera forma.

Los controles que aparecen en la barra de herramientas son los controles intrínsecos a eVB. Aquí en este punto cabe anotar que no podemos trabajar con clases en este ambiente, que los controles, a pesar de ser los mismos que para PC tienen restricciones en sus propiedades, métodos y eventos. Esto debido a que eVB es una mezcla de VBA y VBScript, sin embargo podemos desarrollar aplicaciones FUNCIONALES en este ambiente.

Page 4: Tutorial Embedded Visual Basic

Muy bien entonces:

Vamos a configurar nuestro proyecto: vamos al menú y en opción Project hacemos clic, y en el submenú escogemos la opción Properties..., allí nos va a mostrar la siguiente pantalla:

Aquí colocamos el nombre de nuestro proyecto, una descripción de lo que hace nuestro proyecto, en que directorio en el handheld va a quedar localizado.

Page 5: Tutorial Embedded Visual Basic

A medida que vayamos utilizando cada uno de los diferentes controles los iremos explicando en la mejor forma posible.

Muy bien... empecemos con nuestro primer proyecto:

Entremos a eVB, escogemos Windows CE for Pocket PC 2002 como tipo de proyecto, clic en el botón Open y nos aparecerá una forma en blanco para empezar.

Coloquemos dos controles TextBox en la forma un control CommandButton y un listbox, el la siguiente figura aparece como se vera nuestro proyecto en tiempo de diseño.

Hacemos clic sobre la barra de titulo de la forma y vamos a la ventana de Propiedades, en la parte derecha inferior de la pantalla, aquí buscamos la propiedad Name de la forma, que esta en la parte superior de las propiedades, aquí le vamos a poner nombre a nuestra forma, este nombre se reflejara dentro del proyecto y también en el nombre del archivo que se guarda en el disco. El nombre que le vamos a dar a nuestra forma es frmProg1.

Haga clic sobre el textbox denominado Text1, busquemos en la ventana de propiedades la propiedad Name y cambiémosla por txtNombre, luego busquemos la propiedad Text del mismo y borremos el “Text1” que aparece por defecto en esta propiedad. Esta propiedad es una de las últimas de la lista.

Igual vamos a hacer para el segundo TextBox, en donde el nombre será txtApellido.

Page 6: Tutorial Embedded Visual Basic

El botón los vamos a llamar cmdAgregar, para esto en su propiedad Name vamos a cambiarla, y en la propiedad Caption (o sea el mensaje a mostrar) vamos a colocar Agregar.

Ahora vamos a acceder al código de un evento, un evento ocurre después de una acción, esta acción puede ser el clic del mouse, el doble clic, etc.

Vamos a hacer clic sobre el botón cmdAgregar

Page 7: Tutorial Embedded Visual Basic

eVB nos va a mostrar la pantalla de código, por defecto el evento para un CommandButton es el evento CLIC, como podemos apreciar en la grafica, el combo que aparece en el circulo rojo muestra o lista todos los objetos (nuestros controles) que estén en la forma activa, y el combo del circulo azul mostrara todos los eventos que soporta ese objeto. El evento OKClick de la forma que aparece en la grafica es el botón OK de la parte superior derecha de la pantalla y con el cual cerramos o terminamos la aplicación.

Nuestro código quedara de la siguiente manera:

Private Sub cmdAgregar_Click() List1.AddItem txtNombre.Text & " " & txtApellido.Text End Sub

Aquí lo que estamos haciendo es agregando una nueva lista al control List que se llama List1.

Ahora ya hemos completado nuestro primer proyecto en eVB, algo sencillo pero un abrebocas de todo lo que podemos realizar con esta sencilla herramienta de desarrollo para Pocket PC. Solo nos queda ejecutar nuestro proyecto.

Antes verifiquemos el destino o target en donde se va a ejecutar nuestra aplicación, si tenemos un Pocket, debemos tenerlo sincronizado y verificar que la opción escogida de la lista que aparece en la grafica es la que dice “Default device”, si no entonces “Emulation” y se ejecutara en el emulador.

En la barra de herramientas que aparece en la grafica siguiente presionamos el botón de ejecución que se encuentra encerrado en un círculo rojo en la grafica.

Esto ejecutara nuestro proyecto en la pantalla:

A continuación vemos una captura de la aplicación ejecutándose en el emulador de Pocket PC 2002.

Page 8: Tutorial Embedded Visual Basic

Bueno eso es todo por hoy, nos vemos en la próxima entrega.

Un Saludo muy caluroso

Roberto.

2 Entrega

Hola a todos nuevamente, en esta nuestra Segunda entrega del Tutorial para Embedded Visual Basic 3.0 vamos a seguir con los controles intrínsicos del eVB, a la par de seguir con algo de teoría para que no se me aburran.

La barra de Herramientas (Tolva)

Page 9: Tutorial Embedded Visual Basic

A continuación vamos a explicar cada uno de los controles intrínsicos de eVB,

Pointer. Con este podemos cancelar cualquier otro comando que tengamos seleccionado, si nos arrepentimos de haber escogido un control TextBox, utilizamos a Pointer para anular o cancelar la selección.

Shape. Nos permite crear figuras geométricas en la forma.

Line. Permite dibujar una línea de diferentes anchos y colores en la forma.

Labels. Es uno de los controles mas usados, pues en ellos vamos a colocar el texto que deseamos aparezca en las formas para ayudar al usuario en la captura de los datos de una aplicación, por ejemplo. El texto de los labels no puede ser cambiado por el usuario.

TextBox. Es otro de los controles mas usados en nuestras aplicaciones, ya que en ellos podemos capturar o visualizar información de diferente índole para actualizar nuestras bases de datos en el Pocket PC.

Frames. Este control es un contenedor de controles, permite insertar en el, cualquier control de los que tenemos en la barra de herramientas. Este control particularmente lo utilizo mucho, para simular diferentes formas, debido al inconveniente de eVB que no permite descargar las formas de memoria.

Button. Permite crear botones para seleccionar diferentes opciones por ejemplo para guardar los datos o para cancelar la grabación de los mismos, para seleccionar una opción diferente, etc.

CheckBox. Nos permite seleccionar una o varias opciones referentes a un tema.

OptionButton. Nos permite seleccionar una opción entre varias. Este es excluyente.

ComboBox. Este control permite mostrar una lista de datos desplegable que se muestra y oculta cuando hacemos clic en el. Este control nos sirve para colocar en el la lista de ciudades, por ejemplo, para escoger una.

Page 10: Tutorial Embedded Visual Basic

ListBox. Este control es similar al ComboBox, la diferencia es que la lista no es desplegable como la del ComboBox. Este control lo podemos utilizar para por ejemplo mostrar los nombres de los empleados de una empresa. Como en el ejemplo de la entrega anterior

HScrollBar y VScrollBar. Estos dos controles lo usamos para simular un desplazamiento vertical u horizontal en la pantalla, por ejemplo.

Timer. Este control nos permite controlar la ejecución de un procedimiento cada determinado tiempo.

Muy bien ahora vamos a desarrollar una aplicación para ir utilizando cada uno de los diferentes controles, además de los controles Actives que aun no hemos visto.

La aplicación que vamos a desarrollar es: un teclado numérico controlado completamente desde eVB.

La intención de este pequeño proyecto, es porque para llegar al teclado numérico del SIP hay que realizar demasiados pasos, además que a mi parecer es más cómodo que el usuario tenga un teclado en la pantalla.

Una de las ventajas es que podemos acomodarlo como más nos guste, ya que lo hemos creado utilizando únicamente controles CommandButton.

En el proyecto tenemos dos Labels y dos TextBox para hacernos una idea de lo que debemos hacer.

La idea del teclado es esta: generalmente (por no utilizar siempre), se piden los datos en un TextBox, así que vamos a crear en nuestra forma una variable publica que sea de tipo TextBox y cada vez que un TextBox tenga el foco vamos a asignar a esa variable el TextBox en cuestión. Luego en el evento clic de cada uno de los botones del teclado numérico le asignamos el valor correspondiente del botón a través de nuestra variable publica de tipo TextBox.

Talvez lo único tedioso es que en el evento GotFocus de cada TextBox debemos colocar esto:

Set CajaTexto = Text1

Donde CajaTexto es nuestra variable publica tipo TextBox y Text1, es el TextBox en cuestión.

La verdad no es que sea difícil, pero mucho no sabemos por donde entrarle a la solución del problema. Así que aquí esta una muy modesta solución que he probado y me ha dado muy buenos resultados. Espero que la disfruten y les sirva de mucho a todos.

Aquí esta el código completo del proyecto

Option Explicit

Page 11: Tutorial Embedded Visual Basic

Public CajaTexto As TextBox

Private Sub Form_Load() Text7.Visible = True Text1.Visible = True End Sub

Private Sub Form_OKClick() App.End

End Sub

Private Sub cmdBorrar_Click() CajaTexto.Text = ""

End Sub

Private Sub cmdCero_Click() CajaTexto.Text = CajaTexto.Text & "0"

End Sub

Private Sub cmdCinco_Click() CajaTexto.Text = CajaTexto.Text & "5"

End Sub

Private Sub cmdCuatro_Click() CajaTexto.Text = CajaTexto.Text & "4"

End Sub

Private Sub cmdDos_Click() CajaTexto.Text = CajaTexto.Text & "2"

End Sub

Private Sub cmdEntrar_Click() 'Hago algo simulando en enter End Sub

Private Sub cmdNueve_Click() CajaTexto.Text = CajaTexto.Text & "9"

End Sub

Private Sub cmdOcho_Click() CajaTexto.Text = CajaTexto.Text & "8"

End Sub

Private Sub cmdRutero_Click() frmRutero.Show frmTomaLectura.Hide End Sub

Private Sub cmdSeis_Click()

Page 12: Tutorial Embedded Visual Basic

CajaTexto.Text = CajaTexto.Text & "6" End Sub

Private Sub cmdSiete_Click() CajaTexto.Text = CajaTexto.Text & "7"

End Sub

Private Sub cmdTres_Click() CajaTexto.Text = CajaTexto.Text & "3"

End Sub

Private Sub cmdUno_Click() CajaTexto.Text = CajaTexto.Text & "1"

End Sub

Private Sub Text1_GotFocus() Set CajaTexto = Text1 End Sub

Private Sub Text7_GotFocus() Set CajaTexto = Text7 End Sub

A continuación vemos una grafica de cómo se aprecia la aplicación en el handheld

A continuación les muestro la descripción de cada uno de los controles contenidos en la forma, esta es una forma (me parece a mi) mas clara, de mostrar los controles ya que gráficamente a veces no nos cuadran las imágenes. Aquí no aparecen todas las propiedades de los controles, solo las que necesitamos para este ejemplo. Luego les explico como pueden documentar sus manuales técnicos de esta manera.

Page 13: Tutorial Embedded Visual Basic

VERSION 5.00 Begin VB.Form Form1

Appearance = 0 'Flat BackColor = &H80000005& Caption = "Form1" ShowOK = -1 'True Begin VBCE.TextBox Text1 Height = 285 Left = 990 Top = 180 Visible = 0 'False

Width = 1425 BorderStyle = 1 Enabled = -1 'True Text = ""

End Begin VBCE.Label Label6 Height = 225 Left = 60 Top = 210

Width = 915 Caption = "LecAnterior:"

Alignment = 0 End Begin VBCE.Label Label7 Height = 225 Left = 60 Top = 480

Width = 915 Caption = "LecActual:" Enabled = -1 'True

Alignment = 0 End Begin VBCE.TextBox Text7 Height = 285 Left = 990 Top = 450 Visible = 0 'False

Width = 1425 BorderStyle = 1 Enabled = -1 'True Text = ""

Alignment = 0 End

Begin VBCE.CommandButton cmdUno Height = 285 Left = 2400 TabIndex = 11 Top = 3090

Width = 315

Page 14: Tutorial Embedded Visual Basic

Caption = "1" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdDos

Height = 285 Left = 2745 TabIndex = 10 Top = 3090

Width = 315 Caption = "2" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdTres

Height = 285 Left = 3090 TabIndex = 9 Top = 3090

Width = 315 Caption = "3" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdCuatro

Height = 285 Left = 2400 TabIndex = 8 Top = 2790

Width = 315 Caption = "4" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdCinco

Height = 285 Left = 2745 TabIndex = 7 Top = 2790

Width = 315 Caption = "5" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdSeis

Height = 285 Left = 3090 TabIndex = 6 Top = 2790

Width = 315

Page 15: Tutorial Embedded Visual Basic

Caption = "6" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdSiete

Height = 285 Left = 2400 TabIndex = 5 Top = 2490

Width = 315 Caption = "7" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdOcho

Height = 285 Left = 2745 TabIndex = 4 Top = 2490

Width = 315 Caption = "8" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdNueve

Height = 285 Left = 3090 TabIndex = 3 Top = 2490

Width = 315 Caption = "9" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdCero

Height = 285 Left = 2745 TabIndex = 2 Top = 3390

Width = 315 Caption = "0" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdBorrar

Height = 285 Left = 2400 TabIndex = 1 Top = 3390

Width = 315

Page 16: Tutorial Embedded Visual Basic

Caption = "B" Enabled = -1 'True Style = 0

End Begin VBCE.CommandButton cmdEntrar

Height = 285 Left = 3090 TabIndex = 0 Top = 3390

Width = 315 Caption = "<-" Enabled = -1 'True Style = 0

End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False

Bueno, eso es todo por hoy, disfruten del proyecto y espero que a los que han estado esperando vean recompensada su espera que espero halla sido corta.

Unos Afectuosos saludos para todos.

Nos vemos

Roberto Alvarado.

3 Entrega

En esta tercera entrega de este tutorial, vamos a empezar a desarrollar una pequeña aplicación muy apropiada para estas maravillosas máquinas llamadas handhelds, muy útil para nosotros los desarrolladores de software, o para los que tenemos que hacer labor de soporte técnico o helpdesk en nuestras empresas o con nuestros clientes. Es algo que podemos aplicar a nuestra rutina diaria y nos va a servir muchísimo con un poco de atención de nuestra parte. Estos datos que vamos a recolectar nos servirán como estadísticas de atención, como soporte para facturarles a nuestros clientes, como soporte de nuestra labor desarrollada, etc. A medida que lo conozcan van a salir más justificaciones y aplicaciones para esta aplicación.

En esta entrega no vamos a tener código de ejemplo o un ejemplo que desarrollar para afianzar los conocimientos de la entrega, aquí vamos a sentar las bases para desarrollar una pequeña aplicación en la que podamos emplear la gran mayoría de los controles de eVB y en la cual podamos manejar una base de datos con todas las de la ley en un PDA o handheld que utilice como sistema operativo Pocket PC, inclusive pueden hacer el ejercicio para dispositivos con Windows CE 3.0, es idéntico el desarrollo la diferencia es la apariencia en la pantalla.

Page 17: Tutorial Embedded Visual Basic

Bueno yo he titulado esta aplicación como Control de Tareas, este proyecto controlará y manejará el tiempo gastado en cada una de las tareas que registremos en la aplicación.

La idea de esta aplicación es registrar todas las acciones que se ejecuten sobre una determinada tarea o problema que se nos presente, por ejemplo un usuario de una aplicación nos informa que no sabe como hacer una determinada función con el programa, nosotros programamos o generamos una nueva tarea en la aplicación y registramos las indicaciones hechas al usuario, al igual que el tiempo que gastamos en instruir al usuario, en la aplicación ira quedando la historia del usuario (en nuestro caso nuestro Cliente), y en un momento dado podremos saber cuantas tareas se han realizado para ese Cliente (usuario) y de que tipo.

Ya están entendiendo como aplicar esta aplicación? Este es uno de los ejemplos más comunes, pero podemos aplicarlo a muchas más situaciones.

Vamos a empezar diseñando los archivos o tablas que vamos a utilizar para nuestra aplicación:

Necesitamos un Archivo Maestro para registrar nuestras Tareas, a esta Tabla o Archivo le he llamado Tareas, la estructura de los datos es la siguiente:

IdTarea Int Identificador Único de la Tarea Aplicación Text 5 Código de la Aplicación con problemas Tarea Text 50 Descripción de la Tarea Cliente Int Código del Cliente Tiempo Text 8 Tiempo gastado en la Tarea FecIni Date La fecha de inicio de la Tarea FecFin Date La fecha de culminación de la Tarea Estado Text 1 Activa, Pausa, Terminada, Cancelada HoraInicio Text 8 Hora de Inicio de la Tarea HoraFinal Text 8 Hora de terminación de la Tarea ValorHora Int El valor de la Hora Descripción Text 255 Descripción de la solución aplicada

Necesitamos un Archivo Maestro de Clientes en la cual se encuentra la información de nuestros clientes, a esta tabla la llamaremos Clientes, la estructura de los datos es la siguiente:

IdCliente Int Identificador Único de Clientes Nombre Text 50 Nombre del Cliente Direccion Text 50 Dirección del Cliente Telefonos Text 20 Teléfonos del Cliente Celular Text 20 Celular del Cliente Fax Text 20 Número del fax del Cliente ValorHora Int Valor de la Hora para ese Cliente

Page 18: Tutorial Embedded Visual Basic

Una tercera tabla para el Log del sistema en la cual se registraran todas las operaciones o transacciones realizadas a cada una de las tareas. A esta tabla la he llamado Log, y su estructura es la siguiente:

Fecha Date Fecha de la Transacción Hora Text 8 Hora en que se realiza la transacción IdTarea Int La tarea que se esta ejecutando Tipo Text 1 Inicio, Pausa, Terminar, Cancelar Observación Text 255 Observaciones sobre la transacción

Y una última tabla de Aplicaciones en la cual vamos a registrar las aplicaciones a asociar a las tareas, por ejemplo, Excel de Microsoft es una aplicación que en todas las empresas o casi todas existe y algunas veces las personas que lo utilizan se traban en algo o no saben como enfocar una solución y nos preguntan a nosotros los que estamos en Sistemas o Informática para que le echemos una manito a resolver sus problemas. La estructura de esta tabla es la siguiente:

IdApp Text 5 Identificador de la Aplicación Aplicación Text 30 Descripción o nombre de la aplicación

Muy bien esas son nuestras tres tablas para nuestra aplicación de Control de Tareas, si alguno tiene una opinión sobre el titulo de nuestra aplicación, soy todo oídos para sugerencias, envíenmelas a mi e-mail o colóquenlas en los post de esta web.

Esta pequeña aplicación vamos a desarrollarla utilizando para guardar los datos una base de datos Pocket Access (*.cdb).

Vamos a verificar si el archivo cdb no existe y lo crearemos desde código, al igual que las tablas descritas arriba.

Mis disculpas por haberme demorado un poco con esta entrega pero estoy fuera de mi ciudad base. Espero que pueda cumplirles con la siguiente entrega que me imagino estarán esperando ansiosos para poner en práctica toda la teoría descrita aquí.

Bueno no es mas por hoy... disfrútenlo.

Roberto Alvarado

4 Entrega

Hola nuevamente a todos otra vez!!!!

Les debo una disculpa por haberme demorado tanto en esta nueva entrega del tutorial, pero tuve que salir de la ciudad por una semana que se convirtió en un mes... Uff!!!

Muy difícil eso de ir a una ciudad por unos días y resultar quedándose muchísimo mas tiempo. Pero bueno a lo que vamos:

Page 19: Tutorial Embedded Visual Basic

Vamos a desarrollar una pequeña aplicación muy útil para nosotros los de “Sistemas” o de “Informática” como se dice en los diferentes países....

La aplicación es un Control de Tareas, estas tareas para nosotros los informáticos puede ser desarrollo de una rutina de una aplicación en la que estemos trabajando, el helpdesk que le demos a los usuarios de la compañía en la utilización de las diferentes aplicaciones de escritorio que se manejen y de las aplicaciones propias de la compañía, la instalación y configuración de un computador para alguna de las instalaciones de la compañía, etc., etc. (Creo que la idea ha quedado bastante ilustrada).

Esta pequeña, pero practica aplicación nos permitirá ver u justificar en que nos gastamos el tiempo, además nos puede servir para facturar a nuestros clientes por servicios prestados.

La aplicación permitirá crear una descripción muy básica de los clientes, un tipo de aplicación, al cual le estamos trabajando, una descripción del problema o inconveniente a resolver, el valor del servicio, el tiempo que llevamos gastado en la tarea, si la tarea esta activa, en pausa o terminada.

Page 20: Tutorial Embedded Visual Basic

Para esto vamos a crear un nuevo proyecto y escogemos la opción de Pocket PC 2002 como tipo de proyecto.

Vamos a ir al menú Project y luego Project1, Properties..., Nos va a aparecer la siguiente pantalla en la cual vamos a rellenar en la casilla de Project Name con Tareas, en la casilla Project Description, Aplicacion para el Control de Tiempos y Tareas y presionamos el botón OK.

En la barra de menús escogemos la opción Project, y en el submenú la opción Components, de la lista que aparece vamos a escoger los siguientes componentes: Microsoft CE PictureBox Control 3.0 Microsoft PocketPC MenuBar Control 3.0

Con esto vamos a crear una pantalla con los siguientes datos dentro de un control frame, a continuación les muestro como debe quedar nuestra pantalla:

Page 21: Tutorial Embedded Visual Basic

Incluimos cuatro controles PictureBox en los cuales vamos a mostrar las graficas para empezar una nueva tarea, para poner en Pausa una tarea que estemos desarrollando, para Terminar una tarea en proceso o para Cancelar una Tarea. Son los cuatro botones que aparecen en la parte inferior del frame.

Hacemos doble clic sobre el control MenuBar para incluirlo en la forma, este va a aparecer en la parte central de la forma pero, no se preocupen, que este control es el que nos permite crear los menús y las barras de herramientas, así que este control aparece en la parte inferior de la pantalla de nuestra aplicación cuando se este ejecutando.

Hacemos clic sobre en control MenuBar cuando ya este en la forma, y en la ventana de las propiedades del control, la ventana inferior de la derecha y escogemos la propiedad NewButton, esta a True, la colocamos en False, esto lo hacemos para que no muestre una opción de New al iniciar la aplicación. El resto de las propiedades no es problemas, podemos cambiar el nombre del control por el que queramos también.

Ahora abrimos la ventana de código de nuestra forma y en le evento Load de la forma vamos a configurar el control MenuBar para crear los menús que necesitamos y le asignamos los archivos bmp a los picturebox:

Private Sub Form_Load() Dim mnuTablas As MenuBarMenu

Page 22: Tutorial Embedded Visual Basic

Dim mnuAccion As MenuBarMenu

PictureBox1.Picture = App.Path & "\Adelante.bmp" PictureBox2.Picture = App.Path & "\Pausa.bmp" PictureBox3.Picture = App.Path & "\Stop.bmp"

PictureBox4.Picture = App.Path & "\Undo.bmp" 'Configuro el MenuBar Set mnuTablas = MenuBar1.Controls.AddMenu("Tablas", mnuTablas) mnuTablas.Items.Add 1, "mnuTabTareas", "Tareas" mnuTablas.Items.Add 2, "mnuTabClientes", "Clientes" mnuTablas.Items.Add 3, "mnuTabApp", "Aplicaciones"

Set mnuAccion = MenuBar1.Controls.AddMenu("Accion", mnuAccion) mnuAccion.Items.Add 1, "mnuNuevo", "Nuevo" mnuAccion.Items.Add 2, "mnuEditar", "Editar" mnuAccion.Items.Add 3, "mnuBorrar", "Borrar" mnuAccion.Items.Add 4, "mnuCancelar", "Cancelar" mnuAccion.Items.Add 5, "mnuGuardar", "Guardar" mnuAccion.Items.Add 6, "mnuCerrar", "Cerrar" End Sub

Hasta aquí hemos aprendido como trabajar con el control MenuBar para crear menús y submenús. Ahora vamos a adicionarle a la barra de menús, botones, o sea vamos a hacer un menú combinado.

Como vamos a colocarle graficas a nuestro botones necesitamos otro control: el control ImageList para guardar las imágenes y poder asociarlas a los botones.

Nos vamos nuevamente al menú Project, Components y escogemos Microsoft CE Image List Control 3.0, presionamos en el botón OK

Doble clic sobre el control ImageList para insertarlo en la forma, ahora en el mismo evento Load de la forma configuramos el imageList y lo asignamos al MenuBar.

' Configuro el tamaño de las imágenes ImageList1.ImageHeight = 16 ImageList1.ImageWidth = 16

' Agrego las imágenes ImageList1.Add App.Path & "\Primero.bmp" ImageList1.Add App.Path & "\Atras.bmp" ImageList1.Add App.Path & "\Adelante.bmp" ImageList1.Add App.Path & "\Ultimo.bmp"

'Le decimos al MenuBar que use el ImageList MenuBar1.ImageList = ImageList1.hImageList

'Configuro los botones Dim btnSepara As MenuBarButton Dim btnInicio As MenuBarButton

Page 23: Tutorial Embedded Visual Basic

Dim btnPrevio As MenuBarButton Dim btnSigte As MenuBarButton Dim btnFin As MenuBarButton

'botón Separador Set btnSepara = MenuBar1.Controls.AddButton btnSepara.Width = 80 btnSepara.Style = mbrSeparator

'botón Inicio Set btnInicio = MenuBar1.Controls.AddButton("btnInicio") btnInicio.Image = 1 btnInicio.Style = mbrDefault 'botón Previo

Set btnPrevio = MenuBar1.Controls.AddButton("btnPrevio") btnPrevio.Image = 2 btnPrevio.Style = mbrDefault 'botón Sgte

Set btnSigte = MenuBar1.Controls.AddButton("btnSigte") btnSigte.Image = 3 btnSigte.Style = mbrDefault 'botón Ultimo

Set btnFin = MenuBar1.Controls.AddButton("btnFin") btnFin.Image = 4 btnFin.Style = mbrDefault

' Luego que los botones y los menús son agregados ' al MenuBar, los Objectos se liberan

Set mnuTablas = Nothing Set mnuAccion = Nothing

Set btnSepara = Nothing Set btnInicio = Nothing Set btnSigte = Nothing Set btnPrevio = Nothing Set btnFin = Nothing

Page 24: Tutorial Embedded Visual Basic

Aquí podemos apreciar como se observa el menú combinado en la parte inferior de la pantalla del Pocket.

Aquí va la definición de los controles para que les quede exactamente igual a las graficas:

VERSION 5.00 Object = "{338D5EA5-4BBD-11D1-9A7D-00C04FAD5AEC}#1.0#0";"mscepicture.dll"Object = "{F7DEA2C9-BA8F-446E-A292-B4840F3BD661}#1.0#0";"mscemenubar.dll"Object = "{E491F001-98EC-11D1-9B3D-00C04FAD5AEC}#1.0#0"; "msceimagelist.dll"Begin VB.Form frmTareas

Appearance = 0 'Flat BackColor = &H80000005& Caption = "Control de Tareas" ClientHeight = 3615

ClientWidth = 3480 ForeColor = &H80000008& ShowOK = -1 'True

Begin CEImageListCtl.ImageList ImageList1

Page 25: Tutorial Embedded Visual Basic

Left = 1890 Top = 3000

End Begin MenuBarLib.MenuBar MenuBar1

Left = 2520

Enabled = -1 'True NewButton = 0 'False

Top = 2940

End Begin VBCE.Frame fraTareas

Height = 3225

TabIndex = 0

Caption = "[Tareas]" Enabled = -1 'True BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}

Left = 60

Top = 60 Width = 3405

BorderStyle = 1

Name = "Tahoma" Size = 8.25

EndProperty Begin PictureBoxCtl.PictureBox PictureBox1

Height = 325 Left = 150 Top = 2790

Width = 325 Enabled = -1 'True

End Begin PictureBoxCtl.PictureBox PictureBox2

Height = 330 Left =

Enabled = -1 'True

570 Top = 2790

Width = 330

End Begin PictureBoxCtl.PictureBox PictureBox3

Height = 330 Left =

Enabled = -1 'True

990 Top = 2790

Width = 330

End Begin PictureBoxCtl.PictureBox PictureBox4

Height = 330 Left =

Enabled = -1 'True

1380 Top = 2790

Width = 330

End

Page 26: Tutorial Embedded Visual Basic

Begin VBCE.TextBox txtSolucion Height = 645 Left = 120 Top = 2100

Width = 3195 Enabled = -1 'True Text = "" MultiLine = -1 'True ScrollBars = 2

End Begin VBCE.Label Label1

Height = 255 Left = 90 Top = 210

Width = 765 Caption = "Cliente :"

End Begin VBCE.ComboBox cboClientes

Height = 300 Left = 900 Top = 180

Width = 2415 Enabled = -1 'True Text = "cboClientes"

End Begin VBCE.Label Label2

Height = 255 Left = 90 Top = 510

Width = 765 Caption = "Aplicacion:" Enabled = -1 'True

End Begin VBCE.ComboBox Combo1

Height = 300 Left = 900 Top = 480 Text = "Combo1"

End Begin VBCE.Label Label3

Height = 225 Left = 60 Top = 810

Width = 795 Caption = "Problema:"

End Begin VBCE.TextBox txtProblema

Height = 615 Left = 90 Top = 1080

Page 27: Tutorial Embedded Visual Basic

Width = 3225 BorderStyle = 1 Enabled = -1 'True Text = ""

Alignment = 0 MultiLine = -1 'True ScrollBars = 2

End Begin VBCE.Label Label4

Height = 255 Left = 120 Top = 1740

Width = 675 Caption = "Estado :"

End Begin VBCE.Label lblEstado

Height = 255 Left = 810 Top = 1740

Width = 915 BackColor = 65535 Caption = "Activa"

End Begin VBCE.Label Label5

Height = 225 Left = 1980 Top = 1770

Width = 525 Caption = "Valor:"

End Begin VBCE.TextBox txtValor

Height = 255 Left = 2520 Top = 1740

Width = 765 BorderStyle = 1 Enabled = -1 'True Text = "$ 0.00"

Alignment = 1 End Begin VBCE.Label Label6

Height = 225 Left = 1260 Top = 810

Width = 675 Caption = "Tiempo :"

End Begin VBCE.TextBox txtTime

Height = 285 Left = 1950

Page 28: Tutorial Embedded Visual Basic

Top = 780 Width = 1365

Text = "00:00:00" End

End End Attribute VB_Name = "frmTareas" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False

Bueno recuerden que solo les estoy mostrando las propiedades mas representatives para que se guíen en las posiciones y tamaños de los controles y para que sus ejemplos se vean lo mas parecido posible al que yo les estoy desarrollando.

Perdonen un poco el desorden de esta entrega por la premura pero se las debía desde hacia bastante rato.

No es mas por hoy... esperen la próxima entrega, les aseguro que no se va a demorar tanto.

Un Saludo a todos ¡!! Nos Vemos

Roberto Alvarado

5 Entrega

En esta nueva entrega vamos a hablar mas detenidamente sobre los controles utilizados en la cuarta entrega.

Control MenuBar

Como pudimos ver en la anterior entrega, este control nos permite crear menús y / o barras de herramientas o Toolbars como son mas conocidas. Podemos utilizar o crear solo menús de textos, solo menús de botones o barras de herramientas, o la combinación de ambos como en el ejemplo de la entrega anterior.

Dim mnuTablas As MenuBarMenu Dim mnuAccion As MenuBarMenu

Como podemos observar se debe declarar dos variables de tipo MenuBarMenu, una para cada opción del menú a crear.

'Configuro el MenuBar Set mnuTablas = MenuBar1.Controls.AddMenu("Tablas", mnuTablas) mnuTablas.Items.Add 1, "mnuTabTareas", "Tareas" mnuTablas.Items.Add 2, "mnuTabClientes", "Clientes"

Page 29: Tutorial Embedded Visual Basic

mnuTablas.Items.Add 3, "mnuTabApp", "Aplicaciones"

Set mnuAccion = MenuBar1.Controls.AddMenu("Accion", mnuAccion) mnuAccion.Items.Add 1, "mnuNuevo", "Nuevo" mnuAccion.Items.Add 2, "mnuEditar", "Editar" mnuAccion.Items.Add 3, "mnuBorrar", "Borrar" mnuAccion.Items.Add 4, "mnuSepara1", "------------" mnuAccion.Items.Add 5, "mnuCancelar", "Cancelar" mnuAccion.Items.Add 6, "mnuGuardar", "Guardar" mnuAccion.Items.Add 7, "mnuSepara2", "------------" mnuAccion.Items.Add 8, "mnuCerrar", "Cerrar" mnuAccion.Items("mnuSepara1").Enabled = False mnuAccion.Items("mnuSepara2").Enabled = False

Luego configuramos cada uno de estos objetos menú. En cada una de las instrucciones Set estamos creando una instancia de los objetos declarados antes, e inmediatamente les asignamos el texto o Caption que va a aparecer en la pantalla, como primer parámetro del método Addmenu de la colección Controls del control MenuBar, el segundo parámetro es la llave o Key del objeto, la cual nos va a permitir llamarlo o identificarlo en forma correcta.

Para el caso de la colección Items, o sea los submenús de cada uno de los objetos menú, llamamos al método Add para crear un Ítem, y los parámetros son, el índice del elemento dentro de la colección, el segundo es la llave o Key (para nosotros es nuestro identificador), el tercer parámetro es el Caption o mensaje que va a aparecer en la pantalla, existe un cuarto parámetro que es el estilo, pero hasta el momento no he podido ubicar los valores que deben ir y sus correspondientes efectos sobre el menú. Como podemos apreciar en el código anterior he agregado un par de opciones para simular unos separadores dentro del menú de Accion.

En las dos ultimas líneas del código anterior, desactivamos las opciones mnuSepara1 y mnuSepara2 para simular una línea de separación de menús. gris.

Para capturar el evento de clic sobre alguno de las opciones del menú, utilizamos el evento:

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item) Select Case Item.Key

Case "mnuTabTareas" 'TAREAS

Case "mnuTabClientes" 'CLIENTES

Case "mnuTabApp" 'APLICACIONES

Case "mnuNuevo" 'NUEVO

Case "mnuEditar" 'EDITAR

Case "mnuborrar" 'BORRAR

Page 30: Tutorial Embedded Visual Basic

Case "mnuCancelar" 'CANCELAR

Case "mnuGuardar" 'GUARDAR, GRABAR O SALVAR

Case "Cerrar" 'CERRAR LA OPCION ACTUAL

End Select End Sub

A medida que avancemos iremos colocando el código necesario para cada una de las opciones del menú.

Ahora con botones

Ahora vamos a explicar mucho mas los menús pero como barras de herramientas o Toolbars.

Podemos utilizar botones utilizando los iconos predefinidos del sistema, estos iconos son los que aparecen en la grafica siguiente:

Primero definimos los objetos MenuBarButton que representa cada botón de la barra que vayamos a crear.

'Configuro los botones Dim btnSepara As MenuBarButton Dim btnInicio As MenuBarButton Dim btnPrevio As MenuBarButton Dim btnSigte As MenuBarButton Dim btnFin As MenuBarButton

Luego configuramos cada uno de los botones, en nuestro caso, el primer botón es un separador para diferenciar el menú de texto del de los botones gráficos.

'botón Separador Set btnSepara = MenuBar1.Controls.AddButton btnSepara.Width = 80 btnSepara.Style = mbrSeparator

'botón Inicio Set btnInicio = MenuBar1.Controls.AddButton("btnInicio") btnInicio.Image = 1

Page 31: Tutorial Embedded Visual Basic

btnInicio.Style = mbrDefault 'botón Previo

Set btnPrevio = MenuBar1.Controls.AddButton("btnPrevio") btnPrevio.Image = 2 btnPrevio.Style = mbrDefault 'botón Sgte

Set btnSigte = MenuBar1.Controls.AddButton("btnSigte") btnSigte.Image = 3 btnSigte.Style = mbrDefault 'botón Ultimo

Set btnFin = MenuBar1.Controls.AddButton("btnFin") btnFin.Image = 4 btnFin.Style = mbrDefault

Para nuestro caso las imágenes que estamos asociando a cada botón las colocamos en un control ImageList, el cual configuramos en esta parte del código:

' Configuro el tamaño de las imágenes ImageList1.ImageHeight = 16 ImageList1.ImageWidth = 16

' Agrego las imágenes ImageList1.Add App.Path & "\Primero.bmp" ImageList1.Add App.Path & "\Atras.bmp" ImageList1.Add App.Path & "\Adelante.bmp" ImageList1.Add App.Path & "\Ultimo.bmp"

'Le decimos al MenuBar que use el ImageList MenuBar1.ImageList = ImageList1.hImageList

Por eso asignamos a los botones las imagines 1, 2, 3 y 4 respectivamente.

Si vamos a utilizar los iconos del sistema no necesitamos crear un imagelist, eVb lo crea Automáticamente con solo decirle el numero de los iconos del sistema en la propiedad Image, teniendo en cuenta la imagen de arriba de los iconos del sistema.

Para capturar los eventos clic que se ejecuten sobre cada botón entonces usamos el siguiente evento:

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton) Select Case Button.Key

Case "btnInicio" Case "btnPrevio" Case "btnSigte" Case "btnFin"

End Select End Sub

Para finalizar por hoy con esta charla teórica, eliminamos de memoria los objetos utilizados

Page 32: Tutorial Embedded Visual Basic

' Luego que los botones y los menús son agregados ' al MenuBar, los Objectos se liberan

Set mnuTablas = Nothing Set mnuAccion = Nothing

Set btnSepara = Nothing Set btnInicio = Nothing Set btnSigte = Nothing Set btnPrevio = Nothing Set btnFin = Nothing

Frames

Me parece muy importante hablar de este control, particularmente en el desarrollo de aplicaciones para Windows CE, principalmente por la característica de que no se pueden descargar los forms (formas) de memoria en Windows CE.

El control Frame es Intrínsico en eVB, eso quiere decir que viene dentro de los archivos del runtime de eVB, y no es necesario ir a la opción de referencias y referenciarlo, o ir a la opción de Componentes y escogerlo de allá.

El control Frame es un contenedor de controles, esto quiere decir que este control puede contener todos o casi todos los controles que maneja eVB dentro de el.

Nosotros, y particularmente yo -, utilizo los frames para simular diferentes ventanas de la aplicación, solamente los pongo invisibles y los muestro cuando son necesarios y los muevo a las posiciones de la pantalla correspondiente. Esto lo veremos a medida que desarrollemos la aplicación y lo entenderán mejor .

Las propiedades que mas utilizo de los frames son: Visible, Top, Left.

Con visible muestro u oculto el frame de la pantalla Con Top coloco la posición superior del frame en donde la necesito Con Left coloco la posición izquierda del frame donde la necesito.

Resumen

Bien, en esta entrega explicamos el control MenuBar para crear menús y barras de herramientas o botones gráficos, además se explica como podemos utilizar el control ImageList y como asignarle imágenes.

Aprendimos como asignarle un control ImageList a un control MenuBar.

Además que podemos usar los iconos del sistema para utilizarlos en un MenuBar.

Page 33: Tutorial Embedded Visual Basic

Que los frames van a ser nuestros mejores aliados para el desarrollo de aplicaciones en Pocket PC y Windows CE para simular diferentes ventanas o pantallas (como quieran decirles - ).

Bueno chicos.... no es mas por hoy. Que tengan un buen día y que trabajen mucho y sean muy bien remunerados, denle gracias a Dios por todo lo que tienen.

Un Abrazo

Roberto Alvarado

6 Entrega

En esta nuestra Sexta entrega vamos a crear la pantalla para los clientes y para aplicaciones.

Clientes

Luego de abrir el proyecto Tareas, vamos a hacer clic sobre la barra de titulo de la forma frmTareas y en la ventana de propiedades, vamos a buscar la propiedad Width, y le vamos a asignar el valor 7665.

Agregamos a nuestro proyecto un nuevo control frame con las siguientes características: Visible False Width 3405 Height 2835 Caption [Clientes] Left 3510 Top 60 Name fraClientes

Y dentro del frame colocamos los siguientes controles, fíjense que aquí están de nuevo las características del Frame:

Begin VBCE.Frame fraClientes Height = 2835 Left = 3510 Top = 60 Visible = 0 'False

Width = 3405 Caption = "[Clientes]" Begin VBCE.Label Label13

Height = 285 Left = 90 Top = 2040

Width = 705 Caption = "Abr. Hora:"

End Begin VBCE.TextBox Text7

Height = 285

Page 34: Tutorial Embedded Visual Basic

Left = 810 Top = 2010

Width = 1545 Text = ""

End Begin VBCE.TextBox Text6

Height = 285 Left = 810 Top = 1710

Width = 1545 Text = ""

End Begin VBCE.Label Label12

Height = 255 Left = 90 Top = 1770

Width = 645 Caption = "Fax : "

End Begin VBCE.TextBox Text5

Height = 285 Left = 810 Top = 1410

Width = 1545 Text = ""

End Begin VBCE.Label Label11

Height = 225 Left = 90 Top = 1470

Width = 675 Caption = "Celular :"

End Begin VBCE.TextBox Text4

Height = 285 Left = 810 Top = 1110

Width = 1545 Text = ""

End Begin VBCE.Label Label10

Height = 255 Left = 90 Top = 1140

Width = 705 Caption = "Teléfono:"

End Begin VBCE.TextBox Text3

Height = 285 Left = 810

Page 35: Tutorial Embedded Visual Basic

Top = 810 Width = 2505

Text = "" End Begin VBCE.Label Label9

Height = 195 Left = 90 Top = 840

Width = 675 Caption = "Diré. :"

End Begin VBCE.TextBox Text2

Height = 255 Left = 810 Top = 540

Width = 2505 Text = ""

End Begin VBCE.Label Label8

Height = 255 Left = 90 Top = 540

Width = 735 Caption = "Nombre :"

End Begin VBCE.TextBox Text1

Height = 255 Left = 960 Top = 240

Width = 2055 Text = ""

End Begin VBCE.Label Label7

Height = 255 Left = 90 Top = 240

Width = 945 Caption = "ID Cliente :"

End End

Muy bien ahora ya tenemos la pantalla para capturar los clientes de nuestra aplicación. Entonces vamos a crear también la pantalla para capturar las aplicaciones que vamos a atender y enlazar a una tarea:

Begin VBCE.Frame fraAplicaciones Height = 1215 Left = 3510 Top = 2940 Visible = 0 'False

Page 36: Tutorial Embedded Visual Basic

Width = 3435 Caption = "[Aplicaciones]"

Begin VBCE.TextBox Text9 Height = 285 Left = 1230 Top = 570

Width = 2145 Text = ""

End Begin VBCE.Label Label15

Height = 285 Left = 150 Top = 570

Width = 1005 Caption = "Aplicacion : "

End Begin VBCE.TextBox Text8

Height = 255 Left = 1170 Top = 240

Width = 1725 Text = ""

End Begin VBCE.Label Label14

Height = 285 Left = 120 Top = 270

Width = 1035 Caption = "ID Aplicacion :"

End End

Quizás en este punto a muchos les es difícil colocar los controles en las misma posición en la cual yo estoy dando y esto se debe a que tienen la grilla (los puntos que aparecen en la forma) muy separados y no saben como configurarlos. Entonces, vamos a configurar el espacio de los puntos de la grilla, en el menú Tools, escogemos la opción Options... y nos muestra la siguiente pantalla:

En donde vamos a escoger la pestaña General y vamos a modificar los datos Width y Height del recuadro Form Grid Settings, tal como se muestra en la figura.

Page 37: Tutorial Embedded Visual Basic

Una vez hecho esto presionamos el botón OK para guardar los cambios.

En una de las entregas anteriores les mencione algo sobre como poder lograr imprimir las características de todos los controles de la forma y del proyecto, en la forma en que yo se las muestro también en el tutorial. (Vuelvo y recalco que solo les muestro las propiedades que me interesan y las más relevantes de cada control, el resto de las propiedades tienen sus valores por defecto).

Bien la manera de hacer esto es lo siguiente: llamen o ejecuten el NotePad, y escojan la opción de abrir un archivo, busquen el directorio en donde tengan el proyecto y la forma que quieran ver. Escójanla y en el editor del NotePad aparecerán todas las propiedades de cada uno de los controles que se encuentren en la forma, después aparecerá el código que hayamos escrito para los diferentes controles.

Bueno... ese es el truco. Espero lo disfruten y aprovechen tanto como a mi me ha servido.

Por hoy no es más....

Un Saludo

Roberto Alvarado

7 Entrega

Hola a todos nuevamente…..

Page 38: Tutorial Embedded Visual Basic

Aquí venimos con otra entrega del tutorial de eVB, para empezar aquí les muestro como debe quedar aproximadamente nuestra pantalla en tiempo de desarrollo de nuestra aplicación de tareas:

En esta entrega vamos a poner a funcionar las opciones del menú que creamos en la anterior entrega.

Para nuestro menú de Tablas tenemos tres opciones: Tareas, Clientes y Aplicaciones, vamos a colocar el código para cada vez que escojamos esta opción nos muestre la pantalla correcta.

Para esto el código del evento MenuClick quedaría de la siguiente manera:

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item) Select Case Item.Key

Case "mnuTabTareas" 'TAREAS

fraTareas.Top = 0 fraTareas.Left = 30 fraTareas.Visible = True

Case "mnuTabClientes" 'CLIENTES

fraClientes.Top = 0 fraClientes.Left = 30 fraClientes.Visible = True

Case "mnuTabApp"

Page 39: Tutorial Embedded Visual Basic

'APLICACIONES fraAplicaciones.Top = 0 fraAplicaciones.Left = 30 fraAplicaciones.Visible = True

Case "mnuNuevo" 'NUEVO

Case "mnuEditar" 'EDITAR

Case "mnuborrar" 'BORRAR

Case "mnuCancelar" 'CANCELAR

Case "mnuGuardar" 'GUARDAR, GRABAR O SALVAR

Case "mnuCerrar" 'CERRAR LA OPCION ACTUAL

If fraTareas.Visible Then fraTareas.Visible = False

End If If fraClientes.Visible Then

fraClientes.Visible = False End If If fraAplicaciones.Visible Then

fraAplicaciones.Visible = False End If

End Select End Sub

Como podemos apreciar colocamos cada uno de los frames en la posición superior de la pantalla y lo mostramos, en la opción de cerrar ocultamos el frame si esta visible.

Lo mas importante y esperados por todos.... la BD

Ahora vamos a empezar a trabajar con la base de datos, lo primero es verificar si el archivo cdb existe para ir a crearlo, al igual que las tablas que conforman nuestra base de datos.

Para poder hacer esto necesitamos el control FileSystem, y necesitamos activarlo en el proyecto, vamos al menú Project, y escogemos la opción Componnents, aquí seleccionamos Microsoft CE File System Control 3.0. Con esto en nuestra barra de herramientas de la parte izquierda nos van a aparecer dos controles: FileSystem y File.

Para insertar el control FileSystem en nuestro proyecto hacemos doble clic sobre el

icono de la barra de herramientas , se inserta el control en la forma con el nombre FileSystem1; se puede cambiar el nombre de este control que seria la mas relevante de las 5 propiedades que muestra, ya que en ejecución este control es totalmente invisible a la vista del usuario.

Page 40: Tutorial Embedded Visual Basic

Este es el código en el evento Load de la forma para verificar si existe el archivo o no:

'Verifico si existe el archivo CDB If FileSystem1.Dir(App.Path & "\Tareas.cdb") = "" Then 'No existe el Archivo

Call CrearBaseDatos End If

Como podemos apreciar si el archivo no existe llamamos a una rutina o procedimiento llamada CrearBaseDatos. Esta rutina la vamos a colocar en un Modulo .BAS. Para crear este modulo .Bas nos vamos a la opción Project, escogemos Add Module y hacemos clic sobre el botón Open, esto nos creara un modulo en blanco, al cual le vamos a asignar el nombre de modTareas. Esto lo podemos hacer en la propiedad Name del Modulo.

En el modulo modTareas vamos a desarrollar la rutina CrearBasedatos, como vamos a crear las tablas que vamos a utilizar en el programa me permito colocar tal y como vienen en la ayuda de las EVT la descripción de los tipos de campos que podemos utilizar para nuestras tablas. No traduzco la descripción, porque considero esta sencilla y no quiero entrar en errores de interpretación. así que aquí esta la descripción de los campos que podemos utilizar:

Data Type Description

Varchar[(n)] NULL-terminated Unicode character string of length n, with a maximum of 255 characters. If n is not supplied, then 1 is assumed.

Text Variable length string that can hold up to 32,000 characters. It is typically used for more than 255 characters.

Varbinary[(n)] Binary value of less than 256. If n is not specified, the default is 1.

Long Varbinary Binary value of less than 65,469 bytes. This type is also known as OLE Object.

Integer, int 4-byte signed integer.

Smallint 2-byte signed integer.

Float Double-precision floating point value.

Datetime Date object value.

Bit Logical or Boolean value. Zero is FALSE and nonzero is TRUE.

Uint Unsigned 4-byte integer, which is provided for backward compatibility only.

Usmallint Unsigned 2-byte integer, which is provided for backward compatibility only.

Enseguida les muestro el código de la rutina para crear la base de datos cdb y sus respectivas tablas, de acuerdo al diseño de la tercera entrega.

Page 41: Tutorial Embedded Visual Basic

Sub CrearBaseDatos() 'Creo el archivo de Base de datos en la 'misma carpeta de la aplicación Dim rs As ADOCE.Recordset Dim DB As String Dim cnn As ADOCE.Connection

'Creamos el archivo CDB DB = App.Path & "\Tareas.cdb" Set rs = CreateObject("ADOCE.Recordset.3.0") rs.Open "CREATE DATABASE '" & DB & "'" Set rs = Nothing

'Creamos las tablas 'Tabla de Tareas

Set cnn = CreateObject("ADOCE.Connection.3.0") cnn.Open DB

cnn.Execute "CREATE TABLE Tareas (IdTarea Int, " & _ "Aplicacion varchar(5), " & _ "Tarea varchar(50), " & _ "Cliente Int, " & _

"Tiempo varchar(8), " & _ "FecIni DateTime, " & _ "FecFin DateTime, " & _

"Estado Varchar, " & _ "HoraInicio Varchar(8), " & _

"HoraFinal Varchar(8), " & _ "ValorHora Int, " & _ "Descripcion Varchar(255) )"

'Ahora la Tabla existe en la Base de Datos CDB cnn.Close

'Tabla de Clientes cnn.Open DB cnn.Execute "CREATE TABLE Clientes (IdCliente Int, " & _

"Nombre varchar(50), " & _ "Direccion varchar(50), " & _ "Telefonos Varchar(20), " & _ "Celular varchar(20), " & _ "Fax Varchar(20), " & _ "ValorHora Int )"

cnn.Close 'Tabla del LOG cnn.Open DB

cnn.Execute "CREATE TABLE Log (Fecha DateTime, " & _ "Hora varchar(8), " & _ "IdTarea Int), " & _ "Tipo Varchar, " & _ "Observacion varchar(255) )"

cnn.Close

Page 42: Tutorial Embedded Visual Basic

'Tabla Aplicaciones cnn.Open DB

cnn.Execute "CREATE TABLE Aplicaciones (IdApp Varchar(5), " & _ "Aplicacion varchar(30) ) "

cnn.Close Set cnn = Nothing

End Sub

Con esto contesto una de las preguntas que mas se hacen en los post, Como se pueden crear base de datos en Windows CE.

Bueno por hoy hasta aquí les dejo....

Que la pasen MUY BIEN!!!!!

Su Amigo

Roberto Alvarado

Buenas a todos !!!!!

8 Entrega

Aquí regreso con la octava entrega....

En esta entrega vamos a empezar a trabajar con las tablas, vamos a crear nuevos registros a modificarlos, eliminarlos, así que aquí vamos.......

Muy bien, para empezar vamos ha hacer algunas consideraciones :

En Embedded Visual Basic, existe un Bug con respecto a la liberación de memoria, eso en palabras mas castizas quiere decir, que si abrimos un objeto connection este no se va a eliminar de la memoria hasta que no cerremos la aplicación igualmente va a suceder con el objeto recordset. Igual sucede con todos los objetos que creemos con CreateObject. La intrusión Set Objeto = Nothing NO LIBERA MEMORIA. Tengan en cuenta esto! Como ya habíamos utilizado un objeto connection y un objeto recordset, vamos a cambiar de posición su definición para hacerlos públicos y que podamos accesarlos desde cualquier punto de nuestra aplicación. Todo esto para aplicar la teoría que todos hemos discutido en el foro acerca de la liberación de memoria o de su uso en EVB. Esta posición y línea de desarrollo es mía, no quiere decir en ningún momento que ustedes deban seguirla, lo único que trato es de decirles como es más óptimo para que en lo posible no haya problemas mas tarde con la memoria.

Muy bien, entonces nos vamos a ir al modulo que creamos y vamos a escoger el procedimiento CrearBasedatos, para corregir algunas líneas del código:

Dim rs As ADOCE.Recordset Dim cnn As ADOCE.Connection

Page 43: Tutorial Embedded Visual Basic

Estas líneas que están en el procedimiento CrearBaseDatos, las vamos a eliminar y la vamos a colocar en la sección de definiciones del modulo de esta manera:

Option Explicit Public rs As ADOCE.Recordset Public cnn As ADOCE.Connection

Ahora las instrucciones:

Set rs = Nothing Set cnn = Nothing

Que están en el procedimiento CrearBaseDatos, del modulo, las trasladamos al evento Terminate de la forma:

Private Sub Form_Terminate() Set rs = Nothing

Set cnn = Nothing End Sub

también debemos trasladar al evento Load de la forma la apertura de objeto connection, esto quedaría de esta manera:

'Verifico si existe el archivo CDB If FileSystem1.Dir(App.Path & "\Tareas.cdb") = "" Then 'No existe el Archivo

Call CrearBaseDatos End If Set cnn = CreateObject("ADOCE.Connection.3.0") cnn.Open App.Path & "\Tareas.cdb"

Después de verificar que el archivo de la base de datos existe para que no saque error al intentar abrir la conexión.

Ahora hasta este momento las opciones del menú Accion están Activas, estas opciones no deben activarse hasta que no se escoja alguna de las opciones del menú Tablas.

Vamos a desactivar estas opciones de la siguiente forma, esto lo colocamos en el evento Load de la Forma:

'Configuro menú Accion mnuAccion.Items("mnuNuevo").Enabled = False mnuAccion.Items("mnuEditar").Enabled = False mnuAccion.Items("mnuBorrar").Enabled = False mnuAccion.Items("mnuCancelar").Enabled = False mnuAccion.Items("mnuGuardar").Enabled = False mnuAccion.Items("mnuCerrar").Enabled = False

Page 44: Tutorial Embedded Visual Basic

Además eliminamos del evento Load las instrucciones Set ... Nothing y las trasladamos al evento Terminate de la forma, con esto el código quedaría de esta manera:

Private Sub Form_Terminate() Set rs = Nothing

Set cnn = Nothing ' Luego que los botones y los menús son agregados

' al MenuBar, los Objectos se liberan Set mnuTablas = Nothing Set mnuAccion = Nothing

Set btnSepara = Nothing Set btnInicio = Nothing Set btnSigte = Nothing Set btnPrevio = Nothing Set btnFin = Nothing

End Sub

Muy bien ya hemos ajustado todo lo necesario, ahora continuemos, cada vez que escojamos alguna de las opciones del menú Tablas debemos activar las opciones del menú Accion para esto utilizamos el procedimiento ActivarMenu

Sub ActivarMenu(ByRef mnuAccion As MenuBarMenu) mnuAccion.Items("mnuNuevo").Enabled = True mnuAccion.Items("mnuEditar").Enabled = True mnuAccion.Items("mnuBorrar").Enabled = True mnuAccion.Items("mnuCerrar").Enabled = True End Sub

Observen que estamos utilizando ByRef para indicarle que el objeto mnuAccion debe cambiar en la forma.

también debemos sacar la definición de las variable mnuTablas y mnuAccion a la sección de definiciones de la forma.

Cuando escojamos la opción Nuevo del menú Accion, las opciones anteriores deben restringirse y activar las opciones Cancelar y Grabar, para eso crearemos un procedimiento llamado ActivarGuardar en el modulo. El código es el siguiente:

Sub ActivarGuardar(ByRef mnuAccion As MenuBarMenu, ByRef mnuTablas As MenuBarMenu) mnuAccion.Items("mnuNuevo").Enabled = False mnuAccion.Items("mnuEditar").Enabled = False mnuAccion.Items("mnuBorrar").Enabled = False mnuAccion.Items("mnuCancelar").Enabled = True mnuAccion.Items("mnuGuardar").Enabled = True mnuAccion.Items("mnuCerrar").Enabled = False mnuTablas.Items("mnuTabTareas").Enabled = False mnuTablas.Items("mnuTabClientes").Enabled = False mnuTablas.Items("mnuTabApp").Enabled = False End Sub

Page 45: Tutorial Embedded Visual Basic

Además desactivamos las opciones del menú Tablas, con esto aseguramos que mientras estemos creando un registro nuevo de algún tipo, no van a abrir cualquiera de las otras opciones del menú Tablas.

Ahora vamos a codificar cuando escojamos la opción Nuevo del menú Accion

Case "mnuNuevo" 'NUEVO

ActivarGuardar If fraClientes.Visible Then

'Limpio los textbox For i = 0 To Me.Controls.Count - 1 If Mid(Me.Controls(i).Name, 1, 4) = "Text" Then

Me.Controls(i).Text = "" End If

Next i End If

En el código anterior recorremos la colección Controls de la forma y cuando sea un TextBox cuyo nombre empiece por Text, pone en blanco su propiedad Text. Esta es la única manera que he encontrado hasta ahora de trabajar con las colecciones intrínsecas de eVB.

Como estamos trabajando con la librería ADOCE vamos a activar la referencia de esta, vamos al menú de Project, escogemos References y activamos la referencia Microsoft CE ADO Control 3.0.

Para diferenciar si estamos creando un nuevo registro o si lo estamos modificando, vamos a utilizar una variable publica en el modulo que vamos a llamar xNuevo, esta variable cuando escojamos la opción Nuevo del menú Accion, la vamos a hacer igual a uno (1) y cuando escojamos Modificar será igual a dos (2).

En la opción Guardar del menú Accion vamos a preguntar si esta variable es igual a uno (1), entonces adicionamos un registro en blanco a la tabla con el método AddNew, llenaremos uno a uno cada uno de los campos utilizando la colección Fields del recordset y luego guardaremos la información con el método Update.

En la opción Cerrar del menú Accion vamos a cerrar el Recordset que este activo en el momento.

Cuando escogemos las opciones Cancelar o Guardar debemos volver a activar las opciones de ambos menús, aquí esta el código del procedimiento que usamos en estas opciones del menú Accion:

Sub desActivoGuardar(ByRef mnuAccion As MenuBarMenu, ByRef mnuTablas As MenuBarMenu) mnuAccion.Items("mnuNuevo").Enabled = True mnuAccion.Items("mnuEditar").Enabled = True mnuAccion.Items("mnuBorrar").Enabled = True

Page 46: Tutorial Embedded Visual Basic

mnuAccion.Items("mnuCancelar").Enabled = True mnuAccion.Items("mnuGuardar").Enabled = False mnuAccion.Items("mnuCerrar").Enabled = False mnuTablas.Items("mnuTabTareas").Enabled = True mnuTablas.Items("mnuTabClientes").Enabled = True mnuTablas.Items("mnuTabApp").Enabled = True End Sub

La opción de Borrar la vamos a dejar para más adelante cuando hayamos implementado un método de búsqueda para los registros de las tablas.

A continuación listo el código del evento MenuClick en donde hemos desarrollado casi todo :

Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item) Dim i As Long

Select Case Item.Key Case "mnuTabTareas"

'TAREAS fraTareas.Top = 0 fraTareas.Left = 30 fraTareas.Visible = True ActivarMenu

Case "mnuTabClientes" 'CLIENTES

fraClientes.Top = 0 fraClientes.Left = 30 fraClientes.Visible = True ActivarMenu

'Creo la instancia del objeto recordset Set rs = CreateObject("ADOCE.Recordset.3.0")

'Abro el recordset rs.Open "Clientes", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabApp" 'APLICACIONES

fraAplicaciones.Top = 0 fraAplicaciones.Left = 30 fraAplicaciones.Visible = True ActivarMenu

Case "mnuNuevo" 'NUEVO

ActivarGuardar xNuevo = 1 If fraClientes.Visible Then

'Limpio los textbox Text1.Enabled = True

For i = 0 To Me.Controls.Count - 1 If Mid(Me.Controls(i).Name, 1, 4) = "Text" Then

Me.Controls(i).Text = ""

Page 47: Tutorial Embedded Visual Basic

End If Next i

End If Case "mnuEditar"

'EDITAR xNuevo = 2 If fraClientes.Visible Then

'El ID no puede Modificarse Text1.Enabled = False

End If Case "mnuBorrar"

'BORRAR Case "mnuCancelar"

'CANCELAR desActivoGuardar mnuAccion, mnuTablas

Case "mnuGuardar" 'GUARDAR, GRABAR O SALVAR If xNuevo = 1 Then

rs.AddNew End If rs.Fields("IdCliente") = Text1.Text

rs.Fields("Nombre") = Text2.Text rs.Fields("Direccion") = Text3.Text rs.Fields("Telefonos") = Text4.Text rs.Fields("Celular") = Text5.Text rs.Fields("Fax") = Text6.Text rs.Fields("ValorHora") = Text7.Text rs.Update

desActivoGuardar mnuAccion, mnuTablas Case "mnuCerrar"

'CERRAR LA OPCION ACTUAL rs.Close If fraTareas.Visible Then

fraTareas.Visible = False End If If fraClientes.Visible Then

fraClientes.Visible = False End If If fraAplicaciones.Visible Then

fraAplicaciones.Visible = False End If

End Select End Sub

Ahora les dejo de tarea que hagan lo mismo para la opción de Aplicaciones... la de Tareas es un poco mas complicada y la desarrollaremos en nuestra próxima entrega.

Que tengan un agradable desarrollo y espero poder ir ayudándolos a entender la forma de desarrollo de esta herramienta y de despejarles las dudas que tienen o que tenian sobre todo en el manejo de las bases de datos.

Page 48: Tutorial Embedded Visual Basic

Un cariñoso saludo a todos.... y hasta la próxima

Su Amigo

Roberto Alvarado

9 Entrega

En esta novena entrega vamos a terminar la captura de los datos de la opción Aplicaciones.

Para empezar vamos a modificar la sección del menú en donde escogemos un nuevo registro para configurar la pantalla y los campos de Aplicaciones, vamos a agregar el siguiente fragmento de código :

If fraAplicaciones.Visible Then Text8.Enabled = True Text8.Text = "" Text9.Text = ""

End If

En la opción de Grabar Agregamos el código correspondiente a la Tabla Aplicaciones y modificamos algo el código anterior, a continuación mostramos el código para esta opción:

If fraClientes.Visible Then rs.Fields("IdCliente") = Text1.Text rs.Fields("Nombre") = Text2.Text rs.Fields("Direccion") = Text3.Text rs.Fields("Telefonos") = Text4.Text rs.Fields("Celular") = Text5.Text rs.Fields("Fax") = Text6.Text rs.Fields("ValorHora") = Text7.Text

End If If fraAplicaciones.Visible Then

rs.Fields("IdApp") = Text8.Text rs.Fields("Aplicacion") = Text9.Text

End If Rs.Update

Note que el Update lo colocamos al final y colocamos dentro de una instrucción if los datos para clientes y los datos para las Aplicaciones.

Vamos a trasladar la instanciacion del objeto recordset rs al evento Load de la forma, lo eliminamos de la opción Nuevo de Clientes y lo colocamos en el evento Load de la forma . Entonces el código para los menús de Clientes y Aplicaciones quedaría de la siguiente manera:

Case "mnuTabClientes"

Page 49: Tutorial Embedded Visual Basic

'CLIENTES fraClientes.Top = 0 fraClientes.Left = 30 fraClientes.Visible = True ActivarMenu mnuAccion

'Abro el recordset rs.Open "Clientes", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabApp" 'APLICACIONES

fraAplicaciones.Top = 0 fraAplicaciones.Left = 30 fraAplicaciones.Visible = True ActivarMenu mnuAccion

'Abro el recordset con la tabla Aplicaciones rs.Open "Aplicaciones", cnn, adOpenDynamic, adLockOptimistic

Muy bien... ha llegado la hora de colocarle código a los botones de navegación que tenemos, entonces nos vamos al procedimiento MenuBar1_ButtonClick y colocamos el siguiente código:

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton) Select Case Button.Key

Case "btnInicio" rs.MoveFirst

Case "btnPrevio" rs.MovePrevious If rs.BOF Then

rs.MoveFirst MsgBox "Es el PRIMER Registro", vbApplicationModal + vbOKOnly,

"Consultando..." End If

Case "btnSigte" rs.MoveNext If rs.EOF Then

rs.MoveLast MsgBox "Es el ULTIMO Registro", vbApplicationModal + vbOKOnly,

"Consultando..." End If

Case "btnFin" rs.MoveLast

End Select MuestraRegistros

End Sub

Con este código si presionamos el botón Primero nos colocamos en el primer registro del recordset, si lo hacemos en el botón anterior, nos movemos un registro atrás, si presionamos siguiente, nos desplazamos al siguiente registro y si le decimos ultimo, no vamos al ultimo registro del recordet. Cada vez que nos movamos vamos actualizando los datos en la pantalla dependiendo de que opción tengamos escogida.

Page 50: Tutorial Embedded Visual Basic

Muy bien debemos tener cuidado cuando estemos editando o creando un nuevo registro para desactivar los botones, ya que si los dejamos activos en estos momentos podemos tener errores al momento de guardar la información.

Vamos a crear dos procedimientos, uno para desactivar los botones y otro para activarlos nuevamente, aquí esta el código de estos dos procedimientos:

Sub DesactivoNavega() MenuBar1.Controls.Item(4).Enabled = False MenuBar1.Controls.Item(5).Enabled = False MenuBar1.Controls.Item(6).Enabled = False MenuBar1.Controls.Item(7).Enabled = False End Sub

Sub ActivoNavega() MenuBar1.Controls.Item(4).Enabled = True MenuBar1.Controls.Item(5).Enabled = True MenuBar1.Controls.Item(6).Enabled = True MenuBar1.Controls.Item(7).Enabled = True End Sub

El procedimiento DesactivoNavega lo vamos a utilizar en la opción Nuevo y Editar, el procedimiento ActivoNavega lo vamos a utilizar en las opciones Guardar y Cancelar del menú.

Si ya han probado la opción Cancelar del menú Accion, se habrán dado cuenta que esta mal cuando retorna el menú, el error se soluciona colocando estas líneas de la siguiente forma:

mnuAccion.Items("mnuCerrar").Enabled = True mnuAccion.Items("mnuCancelar").Enabled = False

Coloquemos este procedimiento:

Private Sub Text8_LostFocus() Text8.Text = UCase(Text8.Text)

End Sub

Con esto convertimos a mayúsculas cuando el textbox pierda el foco. así estamos seguro que el ID de la aplicación siempre va a estar en mayúscula.

Ahora hagamos la opción de borrado para estas dos opciones que están activas en este momento.

Case "mnuborrar" 'BORRAR Dim Resp As Long Resp = MsgBox("Esta seguro de eliminar este registro?", vbApplicationModal + vbCritical + vbYesNo, "Eliminando Registros...")

If Resp = vbYes Then

Page 51: Tutorial Embedded Visual Basic

rs.Delete rs.MoveFirst MuestraRegistro

End If

Ese seria el código para borrar registros de la tabla. La misma rutina nos sirve para todas las tablas, dependiendo de la complejidad de su aplicación así será de compleja su rutina de borrado.

La rutina MuestraRegistro será esta:

Sub MuestraRegistro() If fraClientes.Visible Then Text1.Text = rs.Fields("IdCliente") Text2.Text = rs.Fields("Nombre") Text3.Text = rs.Fields("Direccion") Text4.Text = rs.Fields("Telefonos") Text5.Text = rs.Fields("Celular") Text6.Text = rs.Fields("Fax") Text7.Text = rs.Fields("ValorHora")

End If If fraAplicaciones.Visible Then

Text8.Text = rs.Fields("IdApp") Text9.Text = rs.Fields("Aplicacion")

End If End Sub

Bueno por hoy hasta aquí esta bien... nos vemos en la próxima entrega

Saludos Roberto Alvarado