miércoles, septiembre 05, 2007

Tutor Embedded Visual Basic - Capitulo 10

Por: Roberto Alvarado

Capitulo 10

Para comenzar un pequeño truco, hemos estado utilizando imágenes para simular botones gráficos y para los botones de la barra de herramientas, estos gráficos son archivos en formato bmp de 256 colores, la razón de este formato es que el control PictureBox e Image solo pueden mostrar imágenes de estas características, si deseamos mostrar imágenes de mayor resolución o incluso en formato jpg o gif, debemos utilizar otros controles, uno muy bueno es el control S309PictureBox, además de mostrar las imágenes en esas resoluciones, es gratis, este control lo podemos conseguir en esta dirección: http://nsbasic.com/S309/ . En una entrega posterior lo utilizaremos y trataremos de explorar todas las posibilidades de este control.

El truco para que al compilar la aplicación nos copie las imágenes al directorio en donde esta la aplicación es este:

No vamos al menú Project, aquí escogemos la opción Add File..., y en este cuadro de dialogo buscamos nuestro archivo de imagen en formato bmp, y antes de hacer clic en el botón Aceptar, hacemos clic en Add As Related Document, que se encuentra en la parte inferior izquierda del cuadro de dialogo, con esto aparece en la ventana de Project, una nueva carpeta llamada Related Documents y allí van a estar todos nuestros archivos bmp.

Aquí apreciamos la pantalla Add File del menu Project

A continuación tenemos la pantalla del Explorador del Proyectos en la cual aparecen todos los archivos de imágenes relacionados en la carpeta “Related Documents”.

Bueno vamos a darle un poco de “Vida” a nuestra aplicación al momento de entrar a ella, vamos a hacerlo clocando un grafico en la pantalla, el cual se ocultara al momento de escoger alguna de las opciones del menú. Para esto vamos a colocar un nuevo control PictureBox, este control se va a llamar PictureBox5, las dimensiones del control son la altura o Height = 3135 y el ancho o Width = 2805. Lo pueden colocar en cualquier parte de la forma cuidando que no quede dentro de alguno de los frames que ya hemos utilizado.

Además vamos a darle un poco de vida agregando color al fondo de la forma, esto lo hacemos en la propiedad Backcolor de la forma, cuando hacemos clic sobre la flechita nos muestra una cuadro de dialogo para que escojamos el color del fondo, aparecen dos pestañas, pinchamos en la pestaña que dice “Palette” y escogemos de los amarillos el primer color de arriba hacia abajo. De esta forma le damos color de fondo a nuestra Aplicación, de esta manera podemos cambiar el color de fondo de los controles que lo permitan.

Ahora en el evento Load de la forma vamos a agregar lo siguiente :

'Muestro la Imagen de entrada

PictureBox5.Top = 420

PictureBox5.Left = 390

PictureBox5.Picture = App.Path & "Logo.bmp"

PictureBox5.Visible = True

Con esto colocamos en posición el PictureBox y le asignamos el archivo de imagen para que lo muestre en la pantalla.

A continuación podemos observar como se apreciara la pantalla principal de nuestra aplicación.

Ahora como esta imagen la hemos colocado después de haber creado los frames, si mostramos un frame va a aparecer detrás de la imagen, entonces eso no lo queremos... queremos y necesitamos que los frames ya creados aparezcan delante de la imagen, para esto se utiliza la propiedad Zorder, con esta propiedad le decimos que queremos que el objeto este en el orden cero (0) o sea delante de todo lo que haya en la pantalla.

Entonces para que se orienten mejor les pongo el código del MenuBar en el evento MenuClick Completo y las líneas que he adicionado las voy a colocar en color rojo

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

fraTareas.ZOrder 0

ActivarMenu mnuAccion

'Abro el recordset

rs.Open "Tareas", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabClientes"

'CLIENTES

fraClientes.Top = 0

fraClientes.Left = 30

fraClientes.Visible = True

fraClientes.ZOrder 0

ActivarMenu mnuAccion

'Abro el recordset

rs.Open "Clientes", cnn, adOpenDynamic, adLockOptimistic

Case "mnuTabApp"

'APLICACIONES

fraAplicaciones.Top = 0

fraAplicaciones.Left = 30

fraAplicaciones.Visible = True

fraAplicaciones.ZOrder 0

ActivarMenu mnuAccion

'Abro el recordset con la tabla Aplicaciones

rs.Open "Aplicaciones", cnn, adOpenDynamic, adLockOptimistic

Case "mnuNuevo"

'NUEVO

ActivarGuardar mnuAccion, mnuTablas

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 = ""

End If

Next i

End If

If fraAplicaciones.Visible Then

Text8.Enabled = True

Text8.Text = ""

Text9.Text = ""

End If

DesactivoNavega

Case "mnuEditar"

'EDITAR

xNuevo = 2

If fraClientes.Visible Then

'El ID no puede Modificarse

Text1.Enabled = False

End If

DesactivoNavega

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

Case "mnuCancelar"

'CANCELAR

desActivoGuardar mnuAccion, mnuTablas

ActivoNavega

Case "mnuGuardar"

'GUARDAR, GRABAR O SALVAR

If xNuevo = 1 Then

rs.AddNew

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

desActivoGuardar mnuAccion, mnuTablas

ActivoNavega

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

Además he hecho algunas correcciones para que no salgan mensajes de error cuando hacemos clic en los botones de navegación, y la tabla esta vacía. El código es el siguiente:

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton)

Select Case Button.Key

Case "btnInicio"

If Not rs.EOF And Not rs.BOF Then

rs.MoveFirst

End If

Case "btnPrevio"

If Not rs.EOF And Not rs.BOF Then

rs.MovePrevious

If rs.BOF Then

rs.MoveFirst

MsgBox "Es el PRIMER Registro", vbApplicationModal + vbOKOnly, "Consultando..."

End If

End If

Case "btnSigte"

If Not rs.EOF And Not rs.BOF Then

rs.MoveNext

If rs.EOF Then

rs.MoveLast

MsgBox "Es el ULTIMO Registro", vbApplicationModal + vbOKOnly, "Consultando..."

End If

End If

Case "btnFin"

If Not rs.EOF And Not rs.BOF Then

rs.MoveLast

End If

End Select

MuestraRegistro

End Sub

Lo que esta en rojo indica lo nuevo, he colocado esta pregunta ya que cuando una tabla la abrimos y esta vacía tanto el fin de archivo (EOF), como el principio de archivo (BOF) son verdaderos. De esta manera no sale un error si presionan cualquiera de los botones y no hay datos en la tabla aun.

Al igual la rutina en donde mostramos el registro quedara con la pregunta y se vera de la siguiente manera:

Sub MuestraRegistro()

If Not rs.EOF And Not rs.BOF Then

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 If

End Sub

Las líneas en rojo son la pregunta que incluyo para que no salga error cuando la tabla este vacía.

En la Opción de Aplicaciones vamos a hacer lo siguiente: cuando nos coloquemos en el campo Id Aplicación, que aparezca el teclado y cuando dejemos el campo Aplicación que desaparezca. Para esto vamos a utilizar el evento GotFocus del control Text8 y el evento LostFocus del control Text9. También para que halla uniformidad, convertimos las letras a mayúsculas. Veamos como queda el código:

Private Sub Text8_GotFocus()

Me.SIPVisible = True ‘Esta instrucción Muestra el teclado del PPC

End Sub

Private Sub Text8_LostFocus()

Text8.Text = UCase(Text8.Text) 'Convierte a Mayusculas

End Sub

Private Sub Text9_LostFocus()

Text9.Text = UCase(Text9.Text)

Me.SIPVisible = False ‘Esta instrucción Oculta el teclado del PPC

End Sub

Muy bien prueben eso... funciona muy bien cierto? Que les parece, un poco de facilidad y automaticidad para el usuario. O.K. para que desaparezca el teclado cuando estemos en Text9, o sea cuando pedimos el nombre de la aplicación, lo que debemos hacer es presionar la tecla Tab en el teclado para que el TextBox pierda el Foco y se oculte el teclado.

Bueno y ahora para terminar vamos a darle a nuestra pantalla o nuestro frame de Aplicaciones la apariencia de una verdadera ventana de Pocket PC, así como aparecen las ventanas Child en un formulario MDI cuando hacemos programas en VB para el PC. Como podemos simular la barra de títulos y la X para cerrar la ventana? Bueno van a ver que es MUY SENCILLO.

Esto Lo vamos a hacer con dos controles Label para esto vamos a crear dos controles label y los vamos a colocar en la parte superior del Frame cubriendo el titulo que teníamos.

El label que vamos a crear para simular la barra de títulos lo vamos a llamar lblTitApp y sus propiedades son las siguientes :

LblTitApp.BackColor = &H00FF0000& Este es el color Azul de la barra de títulos, ustedes pueden colocar el que deseen

LblTitApp.Caption = “Aplicaciones”

LblTitApp.Font = Tahoma, Size = 9, Bold = True, Esto es dejamos la misma fuente, pero le colocamos tamaño 9 y en negrita.

LblTitApp.ForeColor = &H00FFFFFF& Este es el color Blanco, o sea, las letras van a ser de color blanco sobre fondo azul.

LblTitApp.Width = 3255

LblTitApp.Height = 255

Junto a este label vamos a crea otro label con las mismas características que el anterior, a este label lo vamos a llamar lblAppExit, las propiedades que vamos a cambiar son las siguientes:

LblAppExit.Alingment = 1 vbRightJustify

LblAppExit.Caption = “X”

LblAppExit.Width = 195

De esta manera simulamos la barra de títulos de una ventana y su botón de cerrar.

Ahora vamos a ponerle el código al botón cerrar (X) de la ventana, o sea al label lblAppExit:

Private Sub lblAppExit_Click()

rs.Close

fraAplicaciones.Visible = False

Me.SIPVisible = False

End Sub

Nuestra pantalla de diseño se vera de esta manera:

Y nuestra aplicación se vera de esta manera en el PPC cuando escojamos la opción de Aplicaciones:<

Publicar un comentario