Professional Documents
Culture Documents
Departamento de Electrnica
Rafael Barea
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
Curso Programacin de PDAs con Visual Basic Introduccin al Visual Basic 6.0: Mens
Rafael Barea
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
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
Curso Programacin de PDAs con Visual Basic Introduccin al Visual Basic 6.0: Imgenes, grficos y eventos del ratn
Rafael Barea
Etiqueta ComboBox
Imagen
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
Imagen
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
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
Private Sub Option1_Click() MousePointer = 1 End Sub Private Sub Option2_Click() MousePointer = 2 End Sub
9-PIN 1 2 3 4 5 6 7 8 9
25-PIN 8 3 2 20 7 6 4 5 22
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)
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
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
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
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
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."
' 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
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
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
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
Curso Programacin de PDAs con Visual Basic Comunicaciones Puerto Serie eVB
Rafael Barea
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
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
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