Académique Documents
Professionnel Documents
Culture Documents
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.
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
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.
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.
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.
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.
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.
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.
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.
A medida que vayamos utilizando cada uno de los diferentes controles los iremos
explicando en la mejor forma posible.
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.
Igual vamos a hacer para el segundo TextBox, en donde el nombre será txtApellido.
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.
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.
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.
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.
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.
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.
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.
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
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 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:
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.
Option Explicit
Public CajaTexto As TextBox
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
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
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
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.
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.
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:
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í.
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:
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.
Para esto vamos a crear un nuevo proyecto y escogemos la opción de Pocket PC 2002
como tipo de proyecto.
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:
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.
'Configuro el MenuBar
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.
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.
ImageList1.ImageHeight = 16
ImageList1.ImageWidth = 16
MenuBar1.ImageList = ImageList1.hImageList
'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
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"
Appearance = 0 'Flat
BackColor = &H80000005&
ClientHeight = 3615
ClientWidth = 3480
ForeColor = &H80000008&
ShowOK = -1 'True
Left = 1890
Top = 3000
End
Left = 2520
Top = 2940
Enabled = -1 'True
NewButton = 0 'False
End
Begin VBCE.Frame fraTareas
Height = 3225
Left = 60
TabIndex = 0
Top = 60
Width = 3405
BorderStyle = 1
Caption = "[Tareas]"
Enabled = -1 'True
Name = "Tahoma"
Size = 8.25
EndProperty
Height = 325
Left = 150
Top = 2790
Width = 325
Enabled = -1 'True
End
Begin PictureBoxCtl.PictureBox PictureBox2
Height = 330
Left = 570
Top = 2790
Width = 330
Enabled = -1 'True
End
Begin PictureBoxCtl.PictureBox PictureBox3
Height = 330
Left = 990
Top = 2790
Width = 330
Enabled = -1 'True
End
Begin PictureBoxCtl.PictureBox PictureBox4
Height = 330
Left = 1380
Top = 2790
Width = 330
Enabled = -1 'True
End
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
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
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
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
Alignment = 1
End
Begin VBCE.Label Label6
Height = 225
Left = 1260
Top = 810
Width = 675
End
Begin VBCE.TextBox txtTime
Height = 285
Left = 1950
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.
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.
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"
mnuTablas.Items.Add 3, "mnuTabApp", "Aplicaciones"
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:
A medida que avancemos iremos colocando el código necesario para cada una de las
opciones del menú.
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.
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
btnSepara.Width = 80
btnSepara.Style = mbrSeparator
'botón Inicio
btnInicio.Image = 1
btnInicio.Style = mbrDefault
'botón Previo
btnPrevio.Image = 2
btnPrevio.Style = mbrDefault
'botón Sgte
btnSigte.Image = 3
btnSigte.Style = mbrDefault
'botón Ultimo
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:
ImageList1.ImageHeight = 16
ImageList1.ImageWidth = 16
MenuBar1.ImageList = ImageList1.hImageList
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:
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
' Luego que los botones y los menús son agregados
Frames
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.
Las propiedades que mas utilizo de los frames son: Visible, Top, Left.
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.
Además que podemos usar los iconos del sistema para utilizarlos en un MenuBar.
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:
Height = 2835
Left = 3510
Top = 60
Visible = 0 'False
Width = 3405
Caption = "[Clientes]"
Height = 285
Left = 90
Top = 2040
Width = 705
End
Height = 285
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
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
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
Top = 810
Width = 2505
Text = ""
End
Begin VBCE.Label Label9
Height = 195
Left = 90
Top = 840
Width = 675
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
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
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:
Height = 1215
Left = 3510
Top = 2940
Visible = 0 'False
Width = 3435
Caption = "[Aplicaciones]"
Height = 285
Left = 1230
Top = 570
Width = 2145
Text = ""
End
Begin VBCE.Label Label15
Height = 285
Left = 150
Top = 570
Width = 1005
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
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.
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).
Un Saludo
Roberto Alvarado
7 Entrega
Hola a todos nuevamente…..
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.
'TAREAS
fraTareas.Top = 0
fraTareas.Left = 30
fraTareas.Visible = True
Case "mnuTabClientes"
'CLIENTES
fraClientes.Top = 0
fraClientes.Left = 30
fraClientes.Visible = True
Case "mnuTabApp"
'APLICACIONES
fraAplicaciones.Top = 0
fraAplicaciones.Left = 30
fraAplicaciones.Visible = True
Case "mnuNuevo"
'NUEVO
Case "mnuEditar"
'EDITAR
Case "mnuborrar"
'BORRAR
Case "mnuCancelar"
'CANCELAR
Case "mnuGuardar"
Case "mnuCerrar"
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.
Para insertar el control FileSystem en nuestro proyecto hacemos doble clic sobre el
End If
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.
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
Set rs = CreateObject("ADOCE.Recordset.3.0")
Set rs = Nothing
'Tabla de Tareas
cnn.Open DB
cnn.Close
'Tabla Aplicaciones
cnn.Open DB
cnn.Close
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.
Su Amigo
Roberto Alvarado
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.......
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
Option Explicit
Public rs As ADOCE.Recordset
Public cnn As ADOCE.Connection
Set rs = Nothing
Set cnn = Nothing
End If
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.
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
Observen que estamos utilizando ByRef para indicarle que el objeto mnuAccion debe
cambiar en 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:
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
Me.Controls(i).Text = ""
End If
Next i
End If
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.
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:
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 :
'TAREAS
fraTareas.Top = 0
fraTareas.Left = 30
fraTareas.Visible = True
ActivarMenu
Case "mnuTabClientes"
'CLIENTES
fraClientes.Top = 0
fraClientes.Left = 30
fraClientes.Visible = True
ActivarMenu
Set rs = CreateObject("ADOCE.Recordset.3.0")
'Abro el recordset
Case "mnuTabApp"
'APLICACIONES
fraAplicaciones.Top = 0
fraAplicaciones.Left = 30
fraAplicaciones.Visible = True
ActivarMenu
Case "mnuNuevo"
'NUEVO
ActivarGuardar
xNuevo = 1
If fraClientes.Visible Then
Text1.Enabled = True
For i = 0 To Me.Controls.Count - 1
Me.Controls(i).Text = ""
End If
Next i
End If
Case "mnuEditar"
'EDITAR
xNuevo = 2
If fraClientes.Visible Then
Text1.Enabled = False
End If
Case "mnuBorrar"
'BORRAR
Case "mnuCancelar"
'CANCELAR
Case "mnuGuardar"
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
Case "mnuCerrar"
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.
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
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.
Case "mnuTabClientes"
'CLIENTES
fraClientes.Top = 0
fraClientes.Left = 30
fraClientes.Visible = True
ActivarMenu mnuAccion
'Abro el recordset
Case "mnuTabApp"
'APLICACIONES
fraAplicaciones.Top = 0
fraAplicaciones.Left = 30
fraAplicaciones.Visible = True
ActivarMenu mnuAccion
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:
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.
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
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
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
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.
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