You are on page 1of 64

Universidad de Alcal.

Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic

Rafael Barea

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Introduccin al Visual Basic 6.0
Rafael Barea

VB6
Ejecutar visual basic 6.0 y seleccionar aplicacin EXE estandar

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Introduccin al Visual Basic 6.0: Mens
Rafael Barea

VB6 - MENU (I)


Diseo del men Editor de mens (Herramientas/Editor de menus)

Caption: Ttulo del men Name: Nombre utilizado en el cdigo para referirse al men &: Acceso directo al men ( Alt + tecla subrayada) : Sangrar: insertar elementos del submenu. : Subir y bajar por el men para insertar nuevos comandos - (guin): Separador

VB6 MENU (II)


Ejercicio 1. Construir el siguiente men

VB6 MENU (III)


Ejercicio 2. Reloj despertador
1. Crear el siguiente formulario (Reloj.frm) 2. Editar el men siguiente
Objeto Men Despertador Orden Despertar No Orden Cerrar Menu Pais Orden Aadir Orden Borrar Separador Orden Pais(0) Propiedad Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Index Valor &Despertador MenuDespertador &DespertadorNo DespertadorSiNo &Cerrar Cerrar &Pais MenuPais &Aadir AadirPais &Borrar BorrarPais Separador En blanco Pais 0

VB6 MENU (IV)


3. Aadir temporizador, etiquetas y cajas de texto
Objeto Etiqueta Etiqueta Etiqueta Caja de texto Etiqueta Etiqueta Etiqueta Temporizador Propiedad Caption Name Caption Name Caption Name Name Text Caption Name Caption Name Caption Name Name Interval Valor Hora: Label1 (ninguno) Hora Despertador: Label2 Despertador (nada) Hora en: Label3 ??? EtiquetaPais (ninguno) OtraHora Timer1 1000

VB6 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) Dim Car 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

VB6 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

VB6 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

VB6 MENU (VIII)


5. Aadir un nuevo formulario (DatosEnt.frm)

Objeto Etiqueta Caja de texto Etiqueta Caja de texto Boton

Propiedad Caption Name Name Text Caption Name Name Text Caption Name Default Caption Name

Valor Pais: Label1 PaisEnt (nada) Diferencia horaria: Label2 DifHora (nada) Aceptar Aceptar True Cancelar Cancelar

Boton

VB6 MENU (IX)


6. Aadir un mdulo (reloj.bas) para almacenar la declaracin de la estructura 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 pulsa Pais/Aadir) en el formulario 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

VB6 MENU (X)


8. Aadir cdigo en el formulario DatosEnt 8.1. Variables globales Public bCancelar As Boolean 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? Private Sub Cancelar_Click() bCancelar = True DatosEnt.Hide End Sub

VB6 MENU (XI)


8. Aadir cdigo en el formulario DatosEnt 8.4. Borrar las cajas de texto al perder el focus Private Sub Aceptar_LostFocus() PasEnt.Text = "" DifHora.Text = "" End Sub 9. Visualizar la hora en el pas seleccionado. Procedimiento comn para rdenes aadidas Private Sub Pas_Click(Index As Integer) Dim Horas 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

VB6 MENU (XII)


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 ReDim Preserve PasHora(NumPases) End Sub

VB6 MENU (XIII)


11. Mens emergentes Private Sub Form_Click() PopupMenu MenuPais End Sub

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Introduccin al Visual Basic 6.0: Imgenes, grficos y eventos del ratn
Rafael Barea

VB6 IMGENES (I) Mostrar imgenes de un fichero


1. Constryase el siguiente formulario

Etiqueta ComboBox

Imagen

3. Funciones interesantes Image.Picture = LoadPicture(imagen.bmp") Combo1.AddItem Comando", Index

VB6 IMGENES (II) Mostrar imgenes de un fichero


3. Cdigo

Private Sub Combo1_Click() Select Case Combo1.Text Case "Rafa" Image1.Picture = LoadPicture("D:\.......... \rafa.bmp") Case "Pepe" Image1.Picture = LoadPicture("D:\........... \pepe.bmp") End Select End Sub Private Sub Form_Load() Combo1.AddItem "Rafa", 0 Combo1.AddItem "Pepe", 1 End Sub

VB6 IMGENES (III) Mostrar imgenes de un fichero


4. Ejercicio Adquirir con la WebCam las imgenes de vuestros compaeros y almacenarlas *.bmp Realizar un programa que permita visualizar la imagen del usuario seleccionado.

VB6 IMGENES (IV) Dibujar puntos


[Objeto.]PSet (x,y) [,color] // RGB( rojo,verde,azul) 1. Constryase el siguiente formulario

Imagen

VB6 IMGENES (V) Dibujar puntos


Private Sub Form_Paint() Dim CX As Single, CY As Single Dim Msg As String Dim x As Single, yc As Single, ys As Single Cls ' Escala del sistema de coordenadas ScaleLeft = 0 ScaleTop = 1 ScaleWidth = 6.3 ScaleHeight = -2 ' Ancho de la traza y tamao de los caracteres DrawWidth = 2 Font.Size = 18 ' Coordenadas del punto central del formulario CX = ScaleWidth / 2 + ScaleLeft CY = ScaleHeight / 2 + ScaleTop ' Coordenadas para escribir Msg centrado Msg = "Curvas" CurrentX = CX - TextWidth(Msg) / 2 CurrentY = CY - TextHeight(Msg) / 2 ' Visualizar el literal "Curvas" ForeColor = RGB(0, 192, 0) ' color verde Print Msg ForeColor = RGB(0, 0, 0) ' restablecer el color negro

(0,-1) 2 (0,0) 6,3

VB6 IMGENES (VI) Dibujar puntos


' Anlogamente, establecemos los parmetros para la imagen Imagen1.Cls Imagen1.Scale (0, 1)-(6.3, -1) Imagen1.CurrentX = CX - Imagen1.TextWidth(Msg) / 2 Imagen1.CurrentY = CY - Imagen1.TextHeight(Msg) / 2 Imagen1.ForeColor = RGB(0, 192, 0) Imagen1.Print Msg Imagen1.ForeColor = RGB(0, 0, 0) 'Dibujar curvas For x = 0 To 6.3 Step 0.05 yc = Cos(x): ys = Sin(x) PSet (x, yc): Imagen1.PSet (x, yc) ' coseno PSet (x, ys): Imagen1.PSet (x, ys) ' seno Next x End Sub

VB6 IMGENES (VII) Dibujar puntos


Ojo: en eVB hay que utilizar DrawPoint

VB6 RATN (I) Eventos del ratn


MouseDown: Se puls un botn del ratn MouseUp: Cuando se suelta el botn MouseMove: Cuando se mueve el ratn MousePointer: Tipo de puntero 1-Arrow 2-Cross

VB6 RATN (II) Eventos del ratn


Ejercicio
1. Constryase el siguiente formulario

2. Cdigo 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

VB6 RATN (III)


Cdigo

Eventos del ratn

Private Sub Form_MouseMove(Button As Integer Integer, , Shift As Integer Integer, , X As Single, Y As Single) If Button = 0 Then Exit Sub If Button = 1 Or Button = 2 Or Button = 4 Then If (Button = 1) Then Text1. Text1.Text Text = "Se puls slo el botn izquierdo" If (Button = 2) Then Text1. Text1.Text Text = "Se puls slo el botn derecho" If (Button = 4) Then Text1. Text1.Text Text = "Se puls slo el botn medio" Else If (Button And 1) Then Text1. Text1.Text Text = "Se pulsaron los botones izdo y ?" If (Button And 2) Then Text1. Text1.Text Text = "Se pulsaron los botones dcho y ?" If (Button And 4) Then Text1. Text1.Text Text = "Se pulsaron los botones medio y ?" If (Button And 3) = 3 Then Text1. Text1.Text Text = "Se pulsaron los botones izdo y dcho dcho" " If (Button And 7) = 7 Then Text1. Text1.Text Text = "Se pulsaron los botones izdo izdo, , dcho y medio" End If ValorX.Text = Format(X Format(X, , "###0.00") ValorY.Text = Format(Y Format(Y, , "###0.00") End Sub Private Sub Form_MouseUp(Button As Integer Integer, , Shift As Integer Integer, , X As Single, Y As Single) If Button = 1 Then Text1.Text Text1. Text = "Se ha soltado el botn izquierdo" If Button = 2 Then Text1. Text1.Text Text = "Se ha soltado el botn derecho" If Button = 4 Then Text1. Text1.Text Text = "Se ha soltado el botn del medio ValorX.Text = Format(X Format(X, , "###0.00") ValorY.Text = Format(Y Format(Y, , "###0.00") End Sub

VB6 RATN (IV)


Cdigo

Eventos del ratn

Private Sub Option1_Click() MousePointer = 1 End Sub Private Sub Option2_Click() MousePointer = 2 End Sub

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Comunicaciones Puerto Serie


Rafael Barea

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Comunicaciones Puerto Serie VB


Rafael Barea

VB6 PUERTO SERIE


Puerto Serie RS232

9-PIN 1 2 3 4 5 6 7 8 9

25-PIN 8 3 2 20 7 6 4 5 22

Tipo Entrada Entrada Salida Salida --Entrada Salida Entrada ???

Descripcin DCD (Data Carrier Detect) RX (Receive Data) TX (Transmit Data) DTR (Data Terminal Ready) GND DSR (Data Set Ready) RTS (Request To Send) CTS (Clear To Send) RI (Ring Indicator)

VB6 PUERTO SERIE


Puerto Serie -Ejercicio
Disear un programa que permita configurar, transmitir y recibir datos por el puerto serie del PC. Cmo insertar el control de puerto serie en VB6?

Control de comunicaciones PuertoCom Puerto que se desea abrir PuertoCom.CommPort = 2 COM2 Caractersticas comunicacin 19200 baudios, Paridad Ninguna, 8 bits por carcter, 1 bit parada PuertoCom.Settings = 19200,N,8,1 Abrir puerto de comunicaciones PuertoCom.PortOpen = True Cerrar puerto de comunicaciones PuertoCom.PortOpen = False

VB6 PUERTO SERIE


Puerto Serie
Insertar barra de estado: Control Common Controls

VB6 PUERTO SERIE


Puerto Serie
Crear formulario PuertoCom.frm (Formulario ppal)
Objeto Etiqueta Caja de texto Propiedad Caption Name Text Multiline ScrollBars Caption Name Text Multiline ScrollBars Caption Name Name Style Name Valor Texto a transmitir: txtTX (nada) True 2 Vertical Texto recibido: txtRX (nada) True 2 Vertical &Enviar cmdEnviar StatusBar1 1-sbrSimple PuertoCom

Etiqueta Caja de texto

Boton Barra de estado Control MSComm

VB6 PUERTO SERIE


Puerto Serie
Insertar un men en el formulario PuertoCom.frm
Objeto Men Conexin Orden Establecer Orden Cortar Separador Orden Salir Men Configuracin Orden Parmetros COM Prop. Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Valor Cone&xin mnuConexion &Establecer ConexionEstablecer &Cortar ConexionCortar Separador &Salir ConexionSalir &Configuracin mnuConfig &Parmetros COM ConfigParams

VB6 PUERTO SERIE


Crear formulario Configuracion.frm (Parmetros de configuracin)
Objeto Etiqueta Lista Desplegable Etiqueta Lista Desplegable Propiedad Caption Name List Caption Name List Caption Name List Caption Name List Caption Name List Caption Name List Valor Puerto: lstPuerto COM1,COM2, . Baudios: lstBaudios 2400, 4800, 9600, 19200, 38400, 56000 Paridad: lstParidad N-Ninguna, E-Par, O-Impar Bits por carcter: lstBitsCar 5,6,7,8 Bits de parada: lstBitsParada 1, 1.5, 2 Control de flujo: lstControlFlujo Ninguno, Xon/Xoff,

Etiqueta Lista Desplegable

Etiqueta Lista Desplegable Etiqueta Lista Desplegable Etiqueta Lista Desplegable

VB6 PUERTO SERIE


Cdigo Mdulo.bas Crear un Modulo *.bas 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

VB6 PUERTO SERIE


Formulario Configuracin Cdigo 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

VB6 PUERTO SERIE


Cdigo 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

VB6 PUERTO SERIE


Formulario PuertoCom Cdigo formulario 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

VB6 PUERTO SERIE


Formulario PuertoCom Cdigo formulario 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 Private Sub ConexionSalir_Click() txtTX.Text = "" If PuertoCom.PortOpen Then txtTX.SetFocus CortarConexion End If Unload frmPpal End Sub End Sub

VB6 PUERTO SERIE


Formulario PuertoCom Cdigo formulario PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/

' 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."

VB6 PUERTO SERIE


Formulario PuertoCom Cdigo formulario PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/

' 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

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

VB6 PUERTO SERIE


Formulario PuertoCom Cdigo formulario PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/

' 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

.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

VB6 PUERTO SERIE


Formulario PuertoCom
/**Pasar el cdigo */

Cdigo formulario PuertoCom

' INTERFAZ DE COMUNICACIONES

If .PortOpen = False Then ' Error al abrir el puerto (verifique la configuracin) ' Establecer el control de flujo Beep Dim ControlFlujo As HandshakeConstants 'entero MsgBox "Error: No se puede abrir el puerto " & _ Select Case nControlFlujo sPuerto, vbOKOnly + vbCritical, App.Title Case "Ninguno" If sBitsParada > "1" Then ControlFlujo = 0 MsgBox _ Case "Xon/Xoff" "1 bit en cualquier longitud de carcter, o bien " & ControlFlujo = 1 vbCrLf & "1.5 bits en longitud de carcter 5, y " & Case "Hardware" vbCrLf & "2 bits en longitud de carcter 6 a 8", _ ControlFlujo = 2 vbOKOnly + vbInformation, App.Title End Select End If .Handshaking = ControlFlujo EstablecerConexion = False Exit Function ' Cmo se leern los datos del puerto End If ' Caracteres que puede admitir el buffer de transmisin antes End With ' de que el control genere el evento OnComm. ' El puerto se abri con xito ' Su valor predeterminado es 0 EstablecerConexion = True .SThreshold = 1 ' Caracteres que se van recibir antes de que el control genere StatusBar1.SimpleText = "Puerto de comunicaciones abierto" ' el evento OnComm. Su valor predeterminado es 0. ' Habilitar/Inhabilitar rdenes de ls mens .RThreshold = 1 ConexionEstablecer.Enabled = False ConexionCortar.Enabled = True ' Abrir el puerto de comunicaciones End Function .PortOpen = True

VB6 PUERTO SERIE


Formulario PuertoCom
/**Pasar el cdigo */

Cdigo formulario PuertoCom

Private Function LeerCarsPuerto(ByRef sRecibida As String) As Long sRecibida = PuertoCom.Input If DateDiff("s", Now, Tiempo) > 10 Or _ LeerCarsPuerto = Len(sRecibida) bTiempoSobrepasado = True Then Dim vr As VbMsgBoxResult 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

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

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Comunicaciones Puerto Serie eVB
Rafael Barea

PUERTO SERIE eVB (I)


Disear un programa que permitar transmitir y recibir datos por el puerto serie de la PDA Cmo insertar el control de puerto serie en eVB 3.0?

PUERTO SERIE eVB (II)


Crear formulario PuertoSerie.frm (Formulario ppal)

Objeto Etiqueta Caja de texto

Propiedad Caption Name Text Multiline ScrollBars Caption Name Text Multiline ScrollBars Caption Name Name

Valor Datos recibidos: ReceivedDataTextBox (nada) True 2 Vertical Datos a transmitir: DataToTransmitTextBox (nada) True 2 Vertical &Enviar Command1 Comm1

Etiqueta Caja de texto

Boton Control MSComm

PUERTO SERIE eVB (III)


Propiedades del control 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

PUERTO SERIE eVB (IV)


Cdigo en el formulario PuertoSerie.frm
Private Sub Form_Load() Comm1.PortOpen = True End Sub Private Sub Command1_Click() Comm1.Output = DataToTransmitTextBox.Text End Sub Private Sub Form_OKClick() App.End End Sub Private Sub Comm1_OnComm() Select Case Comm1.CommEvent Case comEvReceive ReceivedDataTextBox.Text = ReceivedDataTextBox.Text + Comm1.Input Case comEvSend ' do nothing here for now End Select End Sub

PUERTO SERIE eVB (V)


Pruebas
1. 2. Comunicar la PDA con el PC utilizando el Hyperterminal Comunicar la PDA con el PC utilizando el Programa PuertoSerie implementado en VB6

Universidad de Alcal. Departamento de Electrnica

Curso Programacin de PDAs con Visual Basic Comunicaciones Internet: sockets


Rafael Barea

SOCKETS (I)
Qu es un 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? 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

SOCKETS (II)
Aplicacin cliente-servidor
CLIENTE SERVIDOR

Esquema

Servidor: Aplicacin que ofrece servicios Cliente: Aplicacin que solicita servicios

SOCKETS (III)
Sockets en Visual Basic P Control WinSock

VB6

eVB

SOCKETS (IV)
Sockets en Visual Basic P Control WinSock 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)

SOCKETS (V)
Aplicacin cliente-servidor utilizando Sockets Objetivo: Ejercicio

Servidor PC-VB6

Cliente PDA-eVB

SOCKETS (VI)
Aplicacin Servidor (VB6)
1. Crear el siguiente formulario

Ejercicio

SOCKETS (VII)
Aplicacin Servidor (VB6)
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() Dim Enviar 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"

Ejercicio

SOCKETS (VIII)
Aplicacin Servidor (VB6)
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) Dim datos 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

Ejercicio

SOCKETS (IX)
Aplicacin cliente (eVB)
1. Crear el siguiente formulario

Ejercicio

SOCKETS (X)
Aplicacin cliente (eVB)
Private Sub CommandConectar_Click() Dim destino 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() Dim enviar As String enviar = TextTx.Text WinSock1.SendData (enviar) LabelEstado.Caption = WinSock1.State End Sub Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long) Dim datos As String WinSock1.GetData datos, vbString LabelEstado.Caption = WinSock1.State TextRx.Text = datos End Sub Private Sub Form_OKClick() App.End End Sub

Ejercicio

You might also like