Está en la página 1de 64

Curso Programacin de PDAs con

Curso Programacin de PDAs con


Visual Basic
Visual Basic
Rafael Barea
Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Introduccin al Visual Basic 6.0
Introduccin al Visual Basic 6.0
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
3
VB6 VB6
Ejecutar visual Ejecutar visual basic basic 6.0 y seleccionar aplicacin EXE 6.0 y seleccionar aplicacin EXE estandar estandar

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Introduccin al Visual Basic 6.0:
Introduccin al Visual Basic 6.0:
Mens
Mens
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
5
VB6 VB6 - - MENU (I) MENU (I)
Diseo del men Diseo del men Editor de mens (Herramientas/Editor de menus) Editor de mens (Herramientas/Editor de menus)
Caption Caption: : T T tulo del men tulo del men
Name Name: Nombre utilizado en el c : Nombre utilizado en el c digo para referirse al men digo para referirse al men
&: Acceso directo al men &: Acceso directo al men ( (Alt Alt + tecla subrayada) + tecla subrayada)
: Sangrar: insertar elementos del submenu. : Sangrar: insertar elementos del submenu.
: Subir y bajar por el men : Subir y bajar por el men para insertar nuevos comandos para insertar nuevos comandos
- - (gui (gui n): Separador n): Separador
6
VB6 VB6 MENU (II) MENU (II)
Ejercicio 1. Ejercicio 1. Construir el siguiente men Construir el siguiente men
7
VB6 VB6 MENU (III) MENU (III)
-
Separador
Caption
Name
Separador
En blanco
Pais
0
Sin marcar
Caption
Name
Index
Visible
Orden Pais(0)
&Borrar
BorrarPais
Caption
Name
Orden Borrar
&Aadir
AadirPais
Caption
Name
Orden Aadir
&Pais
MenuPais
Caption
Name
Menu Pais
&Cerrar
Cerrar
Caption
Name
Orden Cerrar
&DespertadorNo
DespertadorSiNo
Caption
Name
Orden Despertar
No
&Despertador
MenuDespertador
Caption
Name
Men Despertador
Valor Propiedad Objeto
Ejercicio 2. Reloj despertador Ejercicio 2. Reloj despertador
1. Crear el siguiente formulario ( 1. Crear el siguiente formulario (Reloj.frm Reloj.frm) )
2. Editar el men siguiente 2. Editar el men siguiente
8
VB6 VB6 MENU (IV) MENU (IV)
(ninguno)
OtraHora
Caption
Name
Etiqueta
Timer1
1000
Name
Interval
Temporizador
???
EtiquetaPais
Caption
Name
Etiqueta
Hora en:
Label3
Caption
Name
Etiqueta
Despertador
(nada)
Name
Text
Caja de texto
Despertador:
Label2
Caption
Name
Etiqueta
(ninguno)
Hora
Caption
Name
Etiqueta
Hora:
Label1
Caption
Name
Etiqueta
Valor Propiedad Objeto
3. Aadir temporizador, etiquetas y cajas de texto 3. Aadir temporizador, etiquetas y cajas de texto
9
VB6 VB6 MENU (V) MENU (V)
4. Aadir cdigo en el formulario Reloj.frm
4.1. Presentar la hora actual mediante el Temporizador
Private Sub Timer1_Timer()
Hora.Caption = Time
End Sub
Time devuelve un valor (Tipo Date) de la formahh:mm:ss.
4.2. Detectar errores al introducir datos en la hora del despertador: slo se pueden
introducir carcters 0-9 y :
Private Sub Despertador_KeyPress(KeyAscii As Integer)
DimCar As String * 1
Car = Chr(KeyAscii)
If (Car < "0" Or Car > "9") And Car <> ":" Then
Beep 'aviso acstico
KeyAscii = 0 'borrar carcter
End If
End Sub
10
VB6 VB6 MENU (VI) MENU (VI)
4.3. Activar o desactivar el despertador
a) Definir variable global
Private DespertadorSi As Boolean
b) Acciones a realizar al arrancar la aplicacin
Private Sub Form_Load()
DespertadorSi = False
Despertador.Text = "00:00:00
End Sub
c) Modificar el timer
Private Sub Timer1_Timer()
If (Despertador.Text < CStr(Time) And DespertadorSi) Then
Beep: Beep: Beep
End If
Hora.Caption = Time
End Sub
11
VB6 VB6 MENU (VII) MENU (VII)
4.3. Activar o desactivar el despertador
d) Cambiar una orden del men durante la ejecucin
Private Sub DespertadorSiNo_Click()
If (DespertadorSi) Then
DespertadorSi = False
DespertadorSiNo.Caption = "Despertador No"
Else
DespertadorSi = True
DespertadorSiNo.Caption = "Despertador Si"
End If
End Sub
4.4. Men Cerrar
Private Sub Cerrar_Click()
End
End Sub
12
VB6 VB6 MENU (VIII) MENU (VIII)
5. Aadir un nuevo formulario ( 5. Aadir un nuevo formulario (DatosEnt.frm DatosEnt.frm) )
PaisEnt
(nada)
Name
Text
Caja de texto
Cancelar
Cancelar
Caption
Name
Boton
Aceptar
Aceptar
True
Caption
Name
Default
Boton
DifHora
(nada)
Name
Text
Caja de texto
Diferencia horaria:
Label2
Caption
Name
Etiqueta
Pais:
Label1
Caption
Name
Etiqueta
Valor Propiedad Objeto
13
VB6 VB6 MENU (IX) MENU (IX)
6. Aadir un mdulo ( 6. Aadir un mdulo (reloj.bas reloj.bas) para almacenar la declaracin de la estructura ) para almacenar la declaracin de la estructura
PaisHora PaisHora
Type TipoPasHora
Pas As String * 20
DifH As Integer
End Type
Public PasHora() As TipoPasHora 'matriz dinmica
Public NumPases As Integer
7. Aadir rdenes a un men durante la ejecucin (Cuando se puls 7. Aadir rdenes a un men durante la ejecucin (Cuando se pulsa a Pais Pais/Aadir) en /Aadir) en
el formulario el formulario Reloj.frm Reloj.frm
Private Sub AadirPas_Click()
DatosEnt.Show vbModal
If DatosEnt.bCancelar Then Exit Sub
Load Pas(NumPases)
Pas(NumPases).Caption = PasHora(NumPases).Pas
Pas(NumPases).Visible = True
End Sub
14
VB6 VB6 MENU (X) MENU (X)
8. Aadir cdigo en el formulario 8. Aadir cdigo en el formulario DatosEnt DatosEnt
8.1. Variables globales 8.1. Variables globales
Public bCancelar As Boolean
8.2. Qu hacer cuando se pulsa Aceptar? 8.2. Qu hacer cuando se pulsa Aceptar?
Private Sub Aceptar_Click()
bCancelar = False 'se puls el botn Aceptar
NumPases = NumPases + 1
'Asignar memoria para un registro ms
ReDim Preserve PasHora(NumPases)
PasHora(NumPases).Pas = PasEnt.Text
PasHora(NumPases).DifH = Val(DifHora.Text)
PasEnt.SetFocus
DatosEnt.Hide
End Sub
8.3. Qu hacer cuando se pulsa Cancelar? 8.3. Qu hacer cuando se pulsa Cancelar?
Private Sub Cancelar_Click()
bCancelar = True
DatosEnt.Hide
End Sub
15
VB6 VB6 MENU (XI) MENU (XI)
8. Aadir cdigo en el formulario 8. Aadir cdigo en el formulario DatosEnt DatosEnt
8.4. Borrar las cajas de texto al perder el 8.4. Borrar las cajas de texto al perder el focus focus
Private Sub Aceptar_LostFocus()
PasEnt.Text = ""
DifHora.Text = ""
End Sub
9. Visualizar la hora en el pas seleccionado. Procedimiento com 9. Visualizar la hora en el pas seleccionado. Procedimiento comn para rdenes n para rdenes
aadidas aadidas
Private Sub Pas_Click(Index As Integer)
DimHoras As Integer
EtiquetaPas.Caption = Pas(Index).Caption
Horas = Val(Hora.Caption) + PasHora(Index).DifH
If Horas > 24 Then Horas = Horas - 24
If Horas < 0 Then Horas = 24 + Horas
OtraHora.Caption = Horas & Right(Hora.Caption, 6)
If Len(OtraHora.Caption) < 8 Then
OtraHora.Caption = "0" & OtraHora.Caption
End If
End Sub
16
VB6 VB6 MENU (XII) MENU (XII)
10. Borrar rdenes de un men 10. Borrar rdenes de un men
Private Sub BorrarPas_Click()
Dim NumOrden As Integer, N As Integer
Dim Mensaje As String
Mensaje = "Nmero del pas a borrar entre 1 y " & NumPases
NumOrden = Val(InputBox(Mensaje))
If NumOrden > NumPases Or NumOrden < 1 Then
MsgBox "Nmero fuera de rango"
Exit Sub
End If
For N = NumOrden To NumPases - 1
Pas(N).Caption = Pas(N + 1).Caption
PasHora(N) = PasHora(N + 1)
Next N
Unload Pas(NumPases)
NumPases = NumPases - 1
'Asignar memoria para un registro menos
ReDimPreserve PasHora(NumPases)
End Sub
17
VB6 VB6 MENU (XIII) MENU (XIII)
11. Mens emergentes 11. Mens emergentes
Private Sub Form_Click()
PopupMenu MenuPais
End Sub

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Introduccin al Visual Basic 6.0:
Introduccin al Visual Basic 6.0:
Imgenes, grficos y eventos del
Imgenes, grficos y eventos del
ratn
ratn
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
19
VB6 VB6 IMGENES (I) IMGENES (I)
1. Constryase el siguiente formulario 1. Constryase el siguiente formulario
Etiqueta Etiqueta
ComboBox ComboBox
Imagen Imagen
Image.Picture Image.Picture = = LoadPicture LoadPicture(imagen.bmp") (imagen.bmp")
Combo1. Combo1.AddItem AddItem Comando", Index Comando", Index
3. Funciones interesantes 3. Funciones interesantes
Mostrar imgenes de un fichero Mostrar imgenes de un fichero
20
VB6 VB6 IMGENES (II) IMGENES (II)
3. Cdigo 3. Cdigo
Private Private Sub Sub Combo1_ Combo1_Click Click() ()
Select Select Case Combo1. Case Combo1.Text Text
Case "Rafa" Case "Rafa"
Image1.Picture = Image1.Picture = LoadPicture LoadPicture("D: ("D:\ \.......... .......... \ \rafa.bmp rafa.bmp") ")
Case "Pepe" Case "Pepe"
Image1.Picture = Image1.Picture = LoadPicture LoadPicture("D: ("D:\ \........... ...........\ \pepe.bmp pepe.bmp") ")
End End Select Select
End End Sub Sub
Private Private Sub Sub Form_Load Form_Load() ()
Combo1. Combo1.AddItem AddItem "Rafa", 0 "Rafa", 0
Combo1. Combo1.AddItem AddItem "Pepe", 1 "Pepe", 1
End End Sub Sub
Mostrar imgenes de un fichero Mostrar imgenes de un fichero
21
VB6 VB6 IMGENES (III) IMGENES (III)
4. Ejercicio 4. Ejercicio
Adquirir con la Adquirir con la WebCam WebCam las imgenes de vuestros compaeros y las imgenes de vuestros compaeros y
almacenarlas *. almacenarlas *.bmp bmp
Realizar un programa que permita visualizar la imagen del usuari Realizar un programa que permita visualizar la imagen del usuario o
seleccionado. seleccionado.
Mostrar imgenes de un fichero Mostrar imgenes de un fichero
22
VB6 VB6 IMGENES (IV) IMGENES (IV)
[Objeto.] [Objeto.]PSet PSet ( (x,y x,y) [,color] ) [,color] // RGB( // RGB( rojo,verde,azul rojo,verde,azul) )
Dibujar puntos Dibujar puntos
1. Constryase el siguiente formulario 1. Constryase el siguiente formulario
Imagen Imagen
23
VB6 VB6 IMGENES (V) IMGENES (V)
Dibujar puntos Dibujar puntos
Private Private Sub Sub Form_Paint Form_Paint() ()
Dim Dim CX As Single, CY As Single CX As Single, CY As Single
Dim Dim Msg Msg As As String String
Dim Dim x As Single, x As Single, yc yc As Single, As Single, ys ys As Single As Single
Cls Cls
' Escala del sistema de coordenadas ' Escala del sistema de coordenadas
ScaleLeft ScaleLeft = 0 = 0
ScaleTop ScaleTop = 1 = 1
ScaleWidth ScaleWidth = 6.3 = 6.3
ScaleHeight ScaleHeight = = - -2 2
' Ancho de la traza y tamao de los caracteres ' Ancho de la traza y tamao de los caracteres
DrawWidth DrawWidth = 2 = 2
Font.Size Font.Size = 18 = 18
' Coordenadas del punto central del formulario ' Coordenadas del punto central del formulario
CX = CX = ScaleWidth ScaleWidth / 2 + / 2 + ScaleLeft ScaleLeft
CY = CY = ScaleHeight ScaleHeight / 2 + / 2 + ScaleTop ScaleTop
' Coordenadas para escribir ' Coordenadas para escribir Msg Msg centrado centrado
Msg Msg = "Curvas" = "Curvas"
CurrentX CurrentX = CX = CX - - TextWidth(Msg TextWidth(Msg) / 2 ) / 2
CurrentY CurrentY = CY = CY - - TextHeight(Msg TextHeight(Msg) / 2 ) / 2
' Visualizar el literal "Curvas" ' Visualizar el literal "Curvas"
ForeColor ForeColor = RGB(0, 192, 0) ' color verde = RGB(0, 192, 0) ' color verde
Print Print Msg Msg
ForeColor ForeColor = RGB(0, 0, 0) ' restablecer el color negro = RGB(0, 0, 0) ' restablecer el color negro
(0, (0,- -1) 1)
(0,0) (0,0)
6,3 6,3
2 2
24
VB6 VB6 IMGENES (VI) IMGENES (VI)
Dibujar puntos Dibujar puntos
' Anlogamente, establecemos los parmetros para la imagen ' Anlogamente, establecemos los parmetros para la imagen
Imagen1. Imagen1.Cls Cls
Imagen1. Imagen1.Scale Scale (0, 1) (0, 1)- -(6.3, (6.3, - -1) 1)
Imagen1. Imagen1.CurrentX CurrentX = CX = CX - - Imagen1. Imagen1.TextWidth(Msg TextWidth(Msg) / 2 ) / 2
Imagen1. Imagen1.CurrentY CurrentY = CY = CY - - Imagen1. Imagen1.TextHeight(Msg TextHeight(Msg) / 2 ) / 2
Imagen1. Imagen1.ForeColor ForeColor = RGB(0, 192, 0) = RGB(0, 192, 0)
Imagen1. Imagen1.Print Print Msg Msg
Imagen1. Imagen1.ForeColor ForeColor = RGB(0, 0, 0) = RGB(0, 0, 0)
'Dibujar curvas 'Dibujar curvas
For For x = 0 x = 0 To To 6.3 6.3 Step Step 0.05 0.05
yc yc = = Cos(x Cos(x): ): ys ys = = Sin(x Sin(x) )
PSet PSet (x, (x, yc yc): Imagen1. ): Imagen1.PSet PSet (x, (x, yc yc) ' coseno ) ' coseno
PSet PSet (x, (x, ys ys): Imagen1. ): Imagen1.PSet PSet (x, (x, ys ys) ' seno ) ' seno
Next Next x x
End End Sub Sub
25
VB6 VB6 IMGENES (VII) IMGENES (VII)
Dibujar puntos Dibujar puntos
Ojo: Ojo: en en eVB eVB hay que utilizar hay que utilizar DrawPoint DrawPoint
26
VB6 VB6 RATN (I) RATN (I)
Eventos del ratn Eventos del ratn
MouseDown MouseDown: : Se puls un botn del ratn
MouseUp MouseUp: : Cuando se suelta el botn
MouseMove MouseMove: : Cuando se mueve el ratn
MousePointer MousePointer: : Tipo de puntero 1-Arrow 2-Cross
27
VB6 VB6 RATN (II) RATN (II)
Eventos del ratn Eventos del ratn
Ejercicio Ejercicio
Private Sub Form_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
If Button = 1 Then Text1.Text = "Se ha pulsado el botn izquierdo"
If Button = 2 Then Text1.Text = "Se ha pulsado el botn derecho"
If Button = 4 Then Text1.Text = "Se ha pulsado el botn del medio
ValorX.Text = Format(X, "###0.00")
ValorY.Text = Format(Y, "###0.00")
End Sub
1. Constryase el siguiente formulario 1. Constryase el siguiente formulario
2. Cdigo 2. Cdigo
28
VB6 VB6 RATN (III) RATN (III)
Eventos del ratn Eventos del ratn
Cdigo Cdigo
Private Private Sub Sub Form_MouseMove(Button Form_MouseMove(Button As As Integer Integer, , Shift Shift As As Integer Integer, X As Single, Y As Single) , X As Single, Y As Single)
If If Button Button = 0 = 0 Then Then Exit Exit Sub Sub
If If Button Button = 1 = 1 Or Or Button Button = 2 = 2 Or Or Button Button = 4 = 4 Then Then
If If ((Button Button = 1) = 1) Then Then Text1. Text1.Text Text = "Se puls slo el botn izquierdo" = "Se puls slo el botn izquierdo"
If If ((Button Button = 2) = 2) Then Then Text1. Text1.Text Text = "Se puls slo el botn derecho" = "Se puls slo el botn derecho"
If If ((Button Button = 4) = 4) Then Then Text1. Text1.Text Text = "Se puls slo el botn medio" = "Se puls slo el botn medio"
Else Else
If If ((Button Button And And 1) 1) Then Then Text1. Text1.Text Text = "Se pulsaron los botones = "Se pulsaron los botones izdo izdo y ?" y ?"
If If ((Button Button And And 2) 2) Then Then Text1. Text1.Text Text = "Se pulsaron los botones = "Se pulsaron los botones dcho dcho y ?" y ?"
If If ((Button Button And And 4) 4) Then Then Text1. Text1.Text Text = "Se pulsaron los botones medio y ?" = "Se pulsaron los botones medio y ?"
If If ((Button Button And And 3) = 3 3) = 3 Then Then Text1. Text1.Text Text = "Se pulsaron los botones = "Se pulsaron los botones izdo izdo y y dcho dcho""
If If ((Button Button And And 7) = 7 7) = 7 Then Then Text1. Text1.Text Text = "Se pulsaron los botones = "Se pulsaron los botones izdo izdo, , dcho dcho y medio" y medio"
End End If If
ValorX.Text ValorX.Text = = Format(X Format(X, "###0.00") , "###0.00")
ValorY.Text ValorY.Text = = Format(Y Format(Y, "###0.00") , "###0.00")
End End Sub Sub
Private Private Sub Sub Form_MouseUp(Button Form_MouseUp(Button As As Integer Integer, , Shift Shift As As Integer Integer, X As Single, Y As Single) , X As Single, Y As Single)
If If Button Button = 1 = 1 Then Then Text1. Text1.Text Text = "Se ha soltado el botn izquierdo" = "Se ha soltado el botn izquierdo"
If If Button Button = 2 = 2 Then Then Text1. Text1.Text Text = "Se ha soltado el botn derecho" = "Se ha soltado el botn derecho"
If If Button Button = 4 = 4 Then Then Text1. Text1.Text Text = "Se ha soltado el botn del medio = "Se ha soltado el botn del medio
ValorX.Text ValorX.Text = = Format(X Format(X, "###0.00") , "###0.00")
ValorY.Text ValorY.Text = = Format(Y Format(Y, "###0.00") , "###0.00")
End End Sub Sub
29
VB6 VB6 RATN (IV) RATN (IV)
Eventos del ratn Eventos del ratn
Cdigo Cdigo
Private Sub Option1_Click() Private Sub Option1_Click()
MousePointer MousePointer = 1 = 1
End Sub End Sub
Private Sub Option2_Click() Private Sub Option2_Click()
MousePointer MousePointer = 2 = 2
End Sub End Sub

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Comunicaciones
Comunicaciones

Puerto Serie
Puerto Serie
Rafael Barea
Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Comunicaciones
Comunicaciones

Puerto Serie VB
Puerto Serie VB
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
32
VB6 VB6 PUERTO SERIE PUERTO SERIE
RI (Ring Indicator) ??? 22 9
CTS (Clear To Send) Entrada 5 8
RTS (Request To Send) Salida 4 7
DSR (Data Set Ready) Entrada 6 6
GND --- 7 5
DTR (Data Terminal Ready) Salida 20 4
TX (Transmit Data) Salida 2 3
RX (Receive Data) Entrada 3 2
DCD (Data Carrier Detect) Entrada 8 1
Descripcin Tipo 25-PIN 9-PIN
Puerto Serie Puerto Serie RS232 RS232
33
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie - -Ejercicio Ejercicio
Disear un programa que permita configurar, transmitir y recibir Disear un programa que permita configurar, transmitir y recibir datos datos
por el puerto serie del PC. por el puerto serie del PC.
Cmo insertar el control de puerto serie en VB6? Cmo insertar el control de puerto serie en VB6?
Control de comunicaciones Control de comunicaciones PuertoCom PuertoCom
Puerto que se desea abrir Puerto que se desea abrir
PuertoCom.CommPort PuertoCom.CommPort = 2 COM2 = 2 COM2
Caractersticas comunicacin Caractersticas comunicacin
19200 baudios, Paridad Ninguna, 8 bits 19200 baudios, Paridad Ninguna, 8 bits
por carcter, 1 bit parada por carcter, 1 bit parada
PuertoCom.Settings PuertoCom.Settings = 19200,N,8,1 = 19200,N,8,1
Abrir puerto de comunicaciones Abrir puerto de comunicaciones
PuertoCom.PortOpen PuertoCom.PortOpen = = True True
Cerrar puerto de comunicaciones Cerrar puerto de comunicaciones
PuertoCom.PortOpen PuertoCom.PortOpen = = False False
34
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Insertar barra de estado: Control Insertar barra de estado: Control Common Common Controls Controls
35
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Crear formulario Crear formulario PuertoCom.frm PuertoCom.frm (Formulario (Formulario ppal ppal) )
StatusBar1
1-sbrSimple
Name
Style
Barra de estado
txtTX
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
PuertoCom Name Control MSComm
&Enviar
cmdEnviar
Caption
Name
Boton
txtRX
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
Texto recibido: Caption Etiqueta
Texto a transmitir: Caption Etiqueta
Valor Propiedad Objeto
36
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Insertar un men en el formulario Insertar un men en el formulario PuertoCom.frm PuertoCom.frm
&Parmetros COM
ConfigParams
Caption
Name
Orden Parmetros
COM
&Configuracin
mnuConfig
Caption
Name
Men Configuracin
&Salir
ConexionSalir
Caption
Name
Orden Salir
-
Separador
Caption
Name
Separador
&Cortar
ConexionCortar
Caption
Name
Orden Cortar
&Establecer
ConexionEstablecer
Caption
Name
Orden Establecer
Cone&xin
mnuConexion
Caption
Name
Men Conexin
Valor Prop. Objeto
37
VB6 VB6 PUERTO SERIE PUERTO SERIE
Crear formulario Crear formulario Configuracion.frm Configuracion.frm (Parmetros de configuracin) (Parmetros de configuracin)
Bits de parada: Caption Etiqueta
lstBitsParada
1, 1.5, 2
Name
List
Lista Desplegable
lstControlFlujo
Ninguno, Xon/Xoff,
Hardware
Name
List
Lista Desplegable
Control de flujo: Caption Etiqueta
lstBitsCar
5,6,7,8
Name
List
Lista Desplegable
lstParidad
N-Ninguna, E-Par,
O-Impar
Name
List
Lista Desplegable
lstPuerto
COM1,COM2, .
Name
List
Lista Desplegable
Bits por carcter: Caption Etiqueta
Paridad: Caption Etiqueta
lstBaudios
2400, 4800, 9600,
19200, 38400, 56000
Name
List
Lista Desplegable
Baudios: Caption Etiqueta
Puerto: Caption Etiqueta
Valor Propiedad Objeto
38
VB6 VB6 PUERTO SERIE PUERTO SERIE
Crear un Modulo *. Crear un Modulo *.bas bas para declaraciones globales y pblicas: para declaraciones globales y pblicas:
Parmetros de configuracin predeterminados
Public Const PUERTO_PREDETERMINADO = "COM2"
Public Const BAUDIOS_PREDETEMINADO= 9600
Public Const PARIDAD_PREDETEMINADO= "N - Ninguna" 'Ninguna
Public Const BITSCARACTER_PREDETEMINADO = 8
Public Const BITSPARADA_PREDETEMINADO= 1
Public Const CONTROLFLUJO_PREDETEMINADO= "Ninguno" 'Sin
protocolo
Variables pblicas
Public SPuerto As String
Public sBaudios As String
Public sParidad As String
Public sBitsCar As String
Public sBitsParada As String
Public nControlFlujo As String
'Tamao de las colas de recepcin y de transmisin
Public Const COLARX As Integer = 4096
Public Const COLATX As Integer = 4096
Cdigo Cdigo Mdulo.bas Mdulo.bas
39
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Configuracin Formulario Configuracin
Private Sub cmdPredeterminados_Click()
' Se actualizan los controles desde las variables
lstPuerto.Text = PUERTO_PREDETERMINADO '"COM2"
lstBaudios.Text = BAUDIOS_PREDETEMINADO '9600
lstParidad.Text = PARIDAD_PREDETEMINADO '"None - Ninguna"
lstBitsCar.Text = BITSCARACTER_PREDETEMINADO '8
lstBitsParada.Text = BITSPARADA_PREDETEMINADO '1
lstControlFlujo.Text = CONTROLFLUJO_PREDETEMINADO 'Ninguno Sin protocolo
End Sub
Private Sub Form_Load()
lstPuerto.Text = SPuerto
lstBaudios.Text = sBaudios
lstParidad.Text = sParidad
lstBitsCar.Text = sBitsCar
lstBitsParada.Text = sBitsParada
lstControlFlujo.Text = nControlFlujo
End Sub
Cdigo formulario configuracin Cdigo formulario configuracin
40
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Configuracin Formulario Configuracin
Private Sub cmdAceptar_Click()
sPuerto = lstPuerto.Text
sBaudios = lstBaudios.Text
sParidad = lstParidad.Text
sBitsCar = lstBitsCar.Text
sBitsParada = lstBitsParada.Text
nControlFlujo = lstControlFlujo.Text
Hide
End Sub
Private Sub cmdCancelar_Click()
Hide
End Sub
Cdigo formulario configuracin Cdigo formulario configuracin
41
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Sub Form_Load()
ConexionCortar.Enabled = False ' Habilitar/Inhabilitar controles
StatusBar1.SimpleText = "Preparado"
sPuerto = PUERTO_PREDETERMINADO
sBaudios = BAUDIOS_PREDETEMINADO
sParidad = PARIDAD_PREDETEMINADO
sBitsCar = BITSCARACTER_PREDETEMINADO
sBitsParada = BITSPARADA_PREDETEMINADO
nControlFlujo = CONTROLFLUJO_PREDETEMINADO
End Sub
Private Sub ConfigParams_Click()
If PuertoCom.PortOpen = True Then
MsgBox "Cierre primero la conexin"
Exit Sub
End If
' Visualizar el formulario Configuracin
frmConfiguracin.Show vbModal, Me
' Establecer la conexin con los parmetros establecidos
If EstablecerConexion = True Then
' Habilitar el botn de Enviar
cmdEnviar.Enabled = True
End If
End Sub
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
42
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Sub ConexionEstablecer_Click()
' Si la conexin ya estaba establecida, la orden Establecer est inhabilitada
If EstablecerConexion = True Then
cmdEnviar.Enabled = True
End If
End Sub
Private Sub ConexionCortar_Click()
' Si la conexin est cerrada, la orden Cortar est inhabilitada
CortarConexion
cmdEnviar.Enabled = False
End Sub
Private Sub cmdEnviar_Click()
' Enviar los datos que hay en la caja de transmisin
If txtTX.Text <> "" Then
EscribirCarsPuerto txtTX.Text
txtTX.Text = ""
txtTX.SetFocus
End If
End Sub
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
Private Sub ConexionSalir_Click()
If PuertoCom.PortOpen Then
CortarConexion
Unload frmPpal
End Sub
43
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO
Private Sub PuertoCom_OnComm()
Dim sEvento As String, sError As String, sRecibida As String
' Controlar cada evento o error escribiendo cdigo en cada caso
Select Case PuertoCom.CommEvent ' Eventos
Case comEvCD
sEvento = "Cambio en la lnea CD."
Case comEvCTS
sEvento = "Cambio en la lnea CTS."
Case comEvDSR
sEvento = "Cambio en la lnea DSR."
Case comEvRing
sEvento = "Cambio en el indicador de llamadas."
Case comEvReceive
sEvento = "Recibido(s) " & PuertoCom.RThreshold & " carcter/caracteres."
' Leer caracteres del puerto
If LeerCarsPuerto(sRecibida) > 0 Then
txtRX.Text = txtRX.Text & sRecibida
End If
Case comEvSend
sEvento = "Hay SThreshold = " & PuertoCom.SThreshold & " carcter/caracteres en el bfer de transmisin."
Case comEvEOF
sEvento = "Se ha encontrado un carcter EOF en la entrada."
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
44
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO
' Errores
Case comBreak
sError = "Se ha recibido una interrupcin."
Case comEventFrame
sError = "Error de trama."
Case comEventOverrun
sError = "Datos perdidos."
Case comEventRxOver
sError = "Desbordamiento del bfer de recepcin."
Case comEventRxParity
sError = "Error de paridad."
Case comEventTxFull
sError = "Bfer de transmisin lleno."
Case comEventDCB
sError = "Error inesperado al recuperar el DCB."
End Select
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
If Not IsEmpty(sEvento) Then
StatusBar1.SimpleText = sEvento
ElseIf Not IsEmpty(sError) Then
Dim vr As VbMsgBoxResult
Beep
sError = sError & vbNewLine & "Aceptar para ignorar. "
& _
"Cancelar para salir"
vr = MsgBox(sError, vbOKCancel + vbExclamation,
App.Title)
If vr = vbCancel Then
' Cerrar el puerto
PuertoCom.PortOpen = False
ConexionEstablecer.Enabled = True
ConexionCortar.Enabled = False
End If
End If
End Sub
45
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' INTERFAZ DE COMUNICACIONES
Private Function EstablecerConexion() As Boolean
On Error Resume Next
With PuertoCom
' Cerrar el control si estuviera abierto
If .PortOpen = True Then .PortOpen = False
' Especificar el puerto COM que se desea abrir
Dim Puerto As String
Select Case sPuerto
Case "COM1"
Puerto = 1
Case "COM2"
Puerto = 2
Case "COM3"
Puerto = 3
Case "COM4"
Puerto = 4
End Select
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
.CommPort = Puerto ' nmero del puerto (1, 2, ...)
' Establecer el tamao de las colas de recepcin y
transmisin
.InBufferSize = COLARX ' cola de recepcin
.OutBufferSize = COLATX ' cola de transmisin
' Limpiar las colas Rx y Tx
.InBufferCount = 0
.OutBufferCount = 0
' Establecer los parmetros de la comunicacin
Dim sSettings As String
' Baudios, paridad, nmero de bits de datos y de parada
' Longitud del bit de paro:
sSettings = sBaudios & "," & Left(sParidad, 1) & "," & _
sBitsCar & "," & sBitsParada
.Settings = sSettings
46
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' INTERFAZ DE COMUNICACIONES
' Establecer el control de flujo
Dim ControlFlujo As HandshakeConstants 'entero
Select Case nControlFlujo
Case "Ninguno"
ControlFlujo = 0
Case "Xon/Xoff"
ControlFlujo = 1
Case "Hardware"
ControlFlujo = 2
End Select
.Handshaking = ControlFlujo
' Cmo se leern los datos del puerto
' Caracteres que puede admitir el buffer de transmisin antes
' de que el control genere el evento OnComm.
' Su valor predeterminado es 0
.SThreshold = 1
' Caracteres que se van recibir antes de que el control genere
' el evento OnComm. Su valor predeterminado es 0.
.RThreshold = 1
' Abrir el puerto de comunicaciones
.PortOpen = True
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo */
If .PortOpen = False Then
' Error al abrir el puerto (verifique la configuracin)
Beep
MsgBox "Error: No se puede abrir el puerto " & _
sPuerto, vbOKOnly + vbCritical, App.Title
If sBitsParada > "1" Then
MsgBox _
"1 bit en cualquier longitud de carcter, o bien " & _
vbCrLf & "1.5 bits en longitud de carcter 5, y " & _
vbCrLf & "2 bits en longitud de carcter 6 a 8", _
vbOKOnly + vbInformation, App.Title
End If
EstablecerConexion = False
Exit Function
End If
End With
' El puerto se abri con xito
EstablecerConexion = True
StatusBar1.SimpleText = "Puerto de comunicaciones
abierto"
' Habilitar/Inhabilitar rdenes de ls mens
ConexionEstablecer.Enabled = False
ConexionCortar.Enabled = True
End Function
47
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Function LeerCarsPuerto(ByRef sRecibida As String) As Long
sRecibida = PuertoCom.Input
LeerCarsPuerto = Len(sRecibida)
End Function
Private Function EscribirCarsPuerto(str As String) As Boolean
PuertoCom.Output = str
EscribirCarsPuerto = True
End Function
Private Function CortarConexion() As Boolean
If ConexionCortar.Enabled = True Then
Dim bTiempoSobrepasado As Boolean, Tiempo As Long
' Establecer un periodo de 10 segundos a partir de la hora
' actual antes de cerrar el puerto, por seguridad
bTiempoSobrepasado = False
Tiempo = Now
StatusBar1.SimpleText = "Cerrando la conexin..."
While PuertoCom.OutBufferCount > 0
' Permitir procesar mensajes pendientes
DoEvents
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo */
If DateDiff("s", Now, Tiempo) > 10 Or _
bTiempoSobrepasado = True Then
Dimvr As VbMsgBoxResult
vr = MsgBox("Datos no enviados", vbAbortRetryIgnore, _
App.Title)
Select Case vr
' Intentar enviar los datos durante otros 10 segundos
Case vbRetry
Tiempo = Now
Case vbIgnore ' Ignorar el tiempo lmite
bTiempoSobrepasado = True
Case vbAbort
StatusBar1.SimpleText = ""
CortarConexion = False
Exit Function
End Select
End If
Wend
' Tx vaco. Cerrar el puerto.
PuertoCom.PortOpen = False
ConexionEstablecer.Enabled = True
ConexionCortar.Enabled = False
End If
StatusBar1.SimpleText = "Conexin concluida"
CortarConexion = True
End Function

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Comunicaciones
Comunicaciones

Puerto Serie eVB


Puerto Serie eVB
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
49
PUERTO SERIE PUERTO SERIE eVB eVB (I) (I)
Cmo insertar el control de puerto serie en Cmo insertar el control de puerto serie en eVB eVB 3.0? 3.0?
Disear un programa que Disear un programa que permitar permitar transmitir y recibir datos por el transmitir y recibir datos por el
puerto serie de la PDA puerto serie de la PDA
50
PUERTO SERIE PUERTO SERIE eVB eVB (II) (II)
Crear formulario Crear formulario PuertoSerie.frm PuertoSerie.frm (Formulario (Formulario ppal ppal) )
ReceivedDataTextBox
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
Comm1 Name Control MSComm
&Enviar
Command1
Caption
Name
Boton
DataToTransmitTextBox
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
Datos a transmitir: Caption Etiqueta
Datos recibidos: Caption Etiqueta
Valor Propiedad Objeto
51
PUERTO SERIE PUERTO SERIE eVB eVB (III) (III)
Propiedades del control Propiedades del control Comm Comm
CommPort: Nmero del puerto
InputLen: Longitud cadena de datos recibidos para
lectura. (0-Leer cada vez que le llega un dato)
Settings: Configuracin del puerto
Rthreshold = 1: Provoca un OnComm event cada vez
que se recibe un carcter
52
PUERTO SERIE PUERTO SERIE eVB eVB (IV) (IV)
Cdigo en el formulario Cdigo en el formulario PuertoSerie.frm PuertoSerie.frm
Private Private Sub Sub Form_Load Form_Load() ()
Comm1. Comm1.PortOpen PortOpen = = True True
End End Sub Sub
Private Private Sub Sub Command1_ Command1_Click Click() ()
Comm1.Output = Comm1.Output = DataToTransmitTextBox.Text DataToTransmitTextBox.Text
End End Sub Sub
Private Private Sub Sub Form_OKClick Form_OKClick() ()
App.End App.End
End End Sub Sub
Private Private Sub Sub Comm1_ Comm1_OnComm OnComm() ()
Select Select Case Comm1. Case Comm1.CommEvent CommEvent
Case Case comEvReceive comEvReceive
ReceivedDataTextBox.Text ReceivedDataTextBox.Text = = ReceivedDataTextBox.Text ReceivedDataTextBox.Text + Comm1. + Comm1.Input Input
Case Case comEvSend comEvSend
' do ' do nothing nothing here here for for now now
End End Select Select
End End Sub Sub
53
PUERTO SERIE PUERTO SERIE eVB eVB (V) (V)
1. 1. Comunicar la PDA con el PC utilizando el Comunicar la PDA con el PC utilizando el Hyperterminal Hyperterminal
2. 2. Comunicar la PDA con el PC utilizando el Programa PuertoSerie Comunicar la PDA con el PC utilizando el Programa PuertoSerie
implementado en VB6 implementado en VB6
Pruebas Pruebas

Curso Programacin de PDAs con


Curso Programacin de PDAs con
Visual Basic
Visual Basic
Comunicaciones
Comunicaciones

Internet: sockets
Internet: sockets
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
55
SOCKETS (I) SOCKETS (I)
Qu es un Qu es un Socket Socket? ?
Un socket es un objeto a travs del cual una aplicacin puede enviar o
recibir paquetes de datos a travs de la red
Qu es una comunicacin orientada a conexin? Qu es una comunicacin orientada a conexin?
Es una comunicacin entre equipos en la que:
Primero se establece la conexin entre dos equipos
Despus se intercambian peticiones y datos
Finalmente se libera la conexin
Caractersticas:
Comunicacin fiable: si se produce un error en la transmisin se vuelve a
enviar la informacin (paquete perdido).
Es necesario un socket en la aplicacin cliente (la que pide la informacin) y
otro en la aplicacin servidor (la que proporciona la informacin)
Normalmente se utiliza el protocolo TCP/IP
56
SOCKETS (II) SOCKETS (II)
Aplicacin cliente Aplicacin cliente- -servidor servidor
Servidor:
Aplicacin que ofrece servicios
Cliente:
Aplicacin que solicita servicios
CLIENTE CLIENTE SERVIDOR SERVIDOR
Esquema Esquema
57
SOCKETS (III) SOCKETS (III)
Sockets Sockets en Visual Basic en Visual Basic P P Control WinSock Control WinSock
VB6 VB6
eVB eVB
58
SOCKETS (IV) SOCKETS (IV)
Sockets Sockets en Visual Basic en Visual Basic P P Control WinSock Control WinSock
Funciones: Funciones:
WinSock.Listen: Escuchar peticiones de conexin y guardarlas en una cola de
conexiones pendientes. (En el servidor)
WinSock.Accept: Extrae la primera conexin pendiente en la cola y la acepta.
WinSock.GetData DatosRecibidos, vbString: Procesa la informacin recibida
/* En eVB debe DatosRecibidos debe ser tipo variant, no tipo string
WinSock.SendData DatosEnviados: Envia la informacin recibida
/* En eVB debe DatosEnviados debe ser tipo variant, no tipo string
WinSock.Close: Libera la conexin
WinSock.State: Informacin sobre la conexin o accin realizada
WinSock.Connect servidor, puerto: Conectar los sockets (En el cliente)
59
SOCKETS (V) SOCKETS (V)
Servidor PC Servidor PC- -VB6 VB6 Cliente PDA Cliente PDA- -eVB eVB
Aplicacin cliente Aplicacin cliente- -servidor utilizando servidor utilizando Sockets Sockets
Objetivo: Objetivo:
Ejercicio Ejercicio
60
SOCKETS (VI) SOCKETS (VI)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6) Ejercicio Ejercicio
1. Crear el siguiente formulario 1. Crear el siguiente formulario
61
SOCKETS (VII) SOCKETS (VII)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6)
Ejercicio Ejercicio
2. Cdigo 2. Cdigo
Private Sub CommandEscuchar_Click()
WinSock1.Listen
TextCodigoConexion.Text = WinSock1.State
If WinSock1.State = 2 Then
TextEstadoServidor.Text = "Esperando conexin"
TextAccion.Text = "Servidor esperando conexin"
TextIP.Text = WinSock1.LocalIP
End If
End Sub
Private Sub Cerrar_Click()
WinSock1.Close
TextCodigoConexion.Text = WinSock1.State
TextEstadoServidor.Text = "Desconectado"
TextAccion.Text = "Socket desconectado por el Servidor"
End Sub
Private Sub Enviar_Click()
DimEnviar As String Mejor si es Dim Enviar As Variant
Enviar = TextDataSent.Text
WinSock1.SendData (Enviar)
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Dato enviado por el Servidor"
End Sub
62
SOCKETS (VIII) SOCKETS (VIII)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6)
Ejercicio Ejercicio
2. Ms cdigo 2. Ms cdigo
Private Sub IP_Click()
TextIP.Text = WinSock1.LocalIP
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "IP Servidor"
End Sub
Private Sub WinSock1_ConnectionRequest()
WinSock1.Accept
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Cliente conectado"
TextIPCliente.Text = WinSock1.RemoteHostIP
TextEstadoCliente.Text = "Conectado"
TextEstadoServidor.Text = "Conectado"
End Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
Dimdatos as Variant No funciona si ponis Dim datos as String
WinSock1.GetData datos, vbString
TextDataReceived.Text = datos
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Datos recibidos del Cliente"
End Sub
63
SOCKETS (IX) SOCKETS (IX)
Aplicacin cliente ( Aplicacin cliente (eVB eVB) ) Ejercicio Ejercicio
1. Crear el siguiente formulario 1. Crear el siguiente formulario
64
SOCKETS (X) SOCKETS (X)
Aplicacin cliente ( Aplicacin cliente (eVB eVB) )
Ejercicio Ejercicio
Private Sub CommandConectar_Click()
Dimdestino As String
destino = TextIPRemote.Text
WinSock1.RemoteHost = destino
WinSock1.Connect
LabelEstado.Caption = WinSock1.State
End Sub
Private Sub Cerrar_Click()
WinSock1.Close
End Sub
Private Sub CommandEnviar_Click()
Dimenviar As String
enviar = TextTx.Text
WinSock1.SendData (enviar)
LabelEstado.Caption = WinSock1.State
End Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
Dimdatos As String
WinSock1.GetData datos, vbString
LabelEstado.Caption = WinSock1.State
TextRx.Text = datos
End Sub
Private Sub Form_OKClick()
App.End
End Sub

También podría gustarte