Download - Manual Vb6 Evb Pda

Transcript
Page 1: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 2: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Introducción al Visual Basic 6.0Introducción al Visual Basic 6.0

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 3: Manual Vb6 Evb Pda

3

VB6VB6

Ejecutar visual Ejecutar visual basicbasic 6.0 y seleccionar aplicación EXE 6.0 y seleccionar aplicación EXE estandarestandar

Page 4: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Introducción al Visual Basic 6.0: Introducción al Visual Basic 6.0: MenúsMenús

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 5: Manual Vb6 Evb Pda

5

VB6 VB6 -- MENU (I)MENU (I)

Diseño del menú Diseño del menú ÷÷ Editor de menús (Herramientas/Editor de menus)Editor de menús (Herramientas/Editor de menus)

CaptionCaption: : TTíítulo del mentulo del menúúNameName: Nombre utilizado en el c: Nombre utilizado en el cóódigo para referirse al mendigo para referirse al menúú&: Acceso directo al men&: Acceso directo al menúú ((AltAlt + 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 comandospara insertar nuevos comandos-- (gui(guióón): Separadorn): Separador

Page 6: Manual Vb6 Evb Pda

6

VB6 VB6 –– MENU (II)MENU (II)

Ejercicio 1. Ejercicio 1. Construir el siguiente menúConstruir el siguiente menú

Page 7: Manual Vb6 Evb Pda

7

VB6 VB6 –– MENU (III)MENU (III)

-Separador

CaptionName

Separador

En blancoPais0Sin marcar

CaptionNameIndexVisible

Orden Pais(0)

&BorrarBorrarPais

CaptionName

Orden Borrar

&AñadirAñadirPais

CaptionName

Orden Añadir

&PaisMenuPais

CaptionName

Menu Pais

&CerrarCerrar

CaptionName

Orden Cerrar

&DespertadorNoDespertadorSiNo

CaptionName

Orden Despertar No

&DespertadorMenuDespertador

CaptionName

Menú DespertadorValorPropiedadObjeto

Ejercicio 2. Reloj despertadorEjercicio 2. Reloj despertador

1. Crear el siguiente formulario (1. Crear el siguiente formulario (Reloj.frmReloj.frm))

2. Editar el menú siguiente2. Editar el menú siguiente

Page 8: Manual Vb6 Evb Pda

8

VB6 VB6 –– MENU (IV)MENU (IV)

(ninguno)OtraHora

CaptionName

Etiqueta

Timer11000

NameInterval

Temporizador

???EtiquetaPais

CaptionName

Etiqueta

Hora en:Label3

CaptionName

Etiqueta

Despertador(nada)

NameText

Caja de texto

Despertador:Label2

CaptionName

Etiqueta

(ninguno)Hora

CaptionName

Etiqueta

Hora:Label1

CaptionName

EtiquetaValorPropiedadObjeto

3. Añadir temporizador, etiquetas y cajas de texto3. Añadir temporizador, etiquetas y cajas de texto

Page 9: Manual Vb6 Evb Pda

9

VB6 VB6 –– MENU (V)MENU (V)

4. Añadir código 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 forma”hh:mm:ss”.

4.2. Detectar errores al introducir datos en la hora del despertador: sólo se pueden introducir carácters 0-9 y :

Private Sub Despertador_KeyPress(KeyAscii As Integer)Dim Car As String * 1Car = Chr(KeyAscii)If (Car < "0" Or Car > "9") And Car <> ":" Then

Beep 'aviso acústicoKeyAscii = 0 'borrar carácterEnd If

End Sub

Page 10: Manual Vb6 Evb Pda

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 aplicación

Private Sub Form_Load()DespertadorSi = FalseDespertador.Text = "00:00:00“

End Sub

c) Modificar el timer

Private Sub Timer1_Timer()If (Despertador.Text < CStr(Time) And DespertadorSi) Then

Beep: Beep: BeepEnd IfHora.Caption = Time

End Sub

Page 11: Manual Vb6 Evb Pda

11

VB6 VB6 –– MENU (VII)MENU (VII)

4.3. Activar o desactivar el despertador

d) Cambiar una orden del menú durante la ejecución

Private Sub DespertadorSiNo_Click()If (DespertadorSi) Then

DespertadorSi = FalseDespertadorSiNo.Caption = "Despertador No"

ElseDespertadorSi = TrueDespertadorSiNo.Caption = "Despertador Si"

End IfEnd Sub

4.4. Menú Cerrar

Private Sub Cerrar_Click()End

End Sub

Page 12: Manual Vb6 Evb Pda

12

VB6 VB6 –– MENU (VIII)MENU (VIII)

5. Añadir un nuevo formulario (5. Añadir un nuevo formulario (DatosEnt.frmDatosEnt.frm))

PaisEnt(nada)

NameText

Caja de texto

CancelarCancelar

CaptionName

Boton

AceptarAceptarTrue

CaptionNameDefault

Boton

DifHora(nada)

NameText

Caja de texto

Diferencia horaria:Label2

CaptionName

Etiqueta

Pais:Label1

CaptionName

EtiquetaValorPropiedadObjeto

Page 13: Manual Vb6 Evb Pda

13

VB6 VB6 –– MENU (IX)MENU (IX)

6. Añadir un módulo (6. Añadir un módulo (reloj.basreloj.bas) para almacenar la declaración de la estructura ) para almacenar la declaración de la estructura PaisHoraPaisHora

Type TipoPaísHoraPaís As String * 20DifH As Integer

End TypePublic PaísHora() As TipoPaísHora 'matriz dinámicaPublic NumPaíses As Integer

7. Añadir órdenes a un menú durante la ejecución (Cuando se puls7. Añadir órdenes a un menú durante la ejecución (Cuando se pulsa a PaisPais/Añadir) en /Añadir) en el formulario el formulario Reloj.frmReloj.frm

Private Sub AñadirPaís_Click()DatosEnt.Show vbModalIf DatosEnt.bCancelar Then Exit SubLoad País(NumPaíses)País(NumPaíses).Caption = PaísHora(NumPaíses).PaísPaís(NumPaíses).Visible = True

End Sub

Page 14: Manual Vb6 Evb Pda

14

VB6 VB6 –– MENU (X)MENU (X)

8. Añadir código en el formulario 8. Añadir código en el formulario DatosEntDatosEnt

8.1. Variables globales8.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 botón AceptarNumPaíses = NumPaíses + 1'Asignar memoria para un registro másReDim Preserve PaísHora(NumPaíses)PaísHora(NumPaíses).País = PaísEnt.TextPaísHora(NumPaíses).DifH = Val(DifHora.Text)PaísEnt.SetFocusDatosEnt.Hide

End Sub

8.3. ¿Qué hacer cuando se pulsa Cancelar?8.3. ¿Qué hacer cuando se pulsa Cancelar?

Private Sub Cancelar_Click()bCancelar = TrueDatosEnt.Hide

End Sub

Page 15: Manual Vb6 Evb Pda

15

VB6 VB6 –– MENU (XI)MENU (XI)

8. Añadir código en el formulario 8. Añadir código en el formulario DatosEntDatosEnt

8.4. Borrar las cajas de texto al perder el 8.4. Borrar las cajas de texto al perder el focusfocus

Private Sub Aceptar_LostFocus()PaísEnt.Text = ""DifHora.Text = ""

End Sub

9. Visualizar la hora en el país seleccionado. Procedimiento com9. Visualizar la hora en el país seleccionado. Procedimiento común para órdenes ún para órdenes añadidasañadidas

Private Sub País_Click(Index As Integer)Dim Horas As IntegerEtiquetaPaís.Caption = País(Index).CaptionHoras = Val(Hora.Caption) + PaísHora(Index).DifHIf Horas > 24 Then Horas = Horas - 24If Horas < 0 Then Horas = 24 + HorasOtraHora.Caption = Horas & Right(Hora.Caption, 6)If Len(OtraHora.Caption) < 8 Then

OtraHora.Caption = "0" & OtraHora.CaptionEnd If

End Sub

Page 16: Manual Vb6 Evb Pda

16

VB6 VB6 –– MENU (XII)MENU (XII)

10. Borrar órdenes de un menú10. Borrar órdenes de un menú

Private Sub BorrarPaís_Click()Dim NumOrden As Integer, N As IntegerDim Mensaje As StringMensaje = "Número del país a borrar entre 1 y " & NumPaísesNumOrden = Val(InputBox(Mensaje))If NumOrden > NumPaíses Or NumOrden < 1 ThenMsgBox "Número fuera de rango"Exit Sub

End IfFor N = NumOrden To NumPaíses - 1País(N).Caption = País(N + 1).CaptionPaísHora(N) = PaísHora(N + 1)

Next NUnload País(NumPaíses)NumPaíses = NumPaíses - 1'Asignar memoria para un registro menosReDim Preserve PaísHora(NumPaíses)

End Sub

Page 17: Manual Vb6 Evb Pda

17

VB6 VB6 –– MENU (XIII)MENU (XIII)

11. Menús emergentes11. Menús emergentes

Private Sub Form_Click()PopupMenu MenuPais

End Sub

Page 18: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Introducción al Visual Basic 6.0: Introducción al Visual Basic 6.0: Imágenes, gráficos y eventos del Imágenes, gráficos y eventos del

ratónratón

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 19: Manual Vb6 Evb Pda

19

VB6 VB6 –– IMÁGENES (I)IMÁGENES (I)

1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario

EtiquetaEtiqueta

ComboBoxComboBox

ImagenImagen

Image.PictureImage.Picture = = LoadPictureLoadPicture(“imagen.bmp")(“imagen.bmp")Combo1.Combo1.AddItemAddItem “Comando", Index“Comando", Index

3. Funciones interesantes3. Funciones interesantes

Mostrar imágenes de un ficheroMostrar imágenes de un fichero

Page 20: Manual Vb6 Evb Pda

20

VB6 VB6 –– IMÁGENES (II)IMÁGENES (II)

3. Código3. CódigoPrivatePrivate SubSub Combo1_Combo1_ClickClick()()SelectSelect Case Combo1.Case Combo1.TextText

Case "Rafa"Case "Rafa"Image1.Picture = Image1.Picture = LoadPictureLoadPicture("D:("D:\\.......... .......... \\rafa.bmprafa.bmp")")

Case "Pepe"Case "Pepe"Image1.Picture = Image1.Picture = LoadPictureLoadPicture("D:("D:\\......................\\pepe.bmppepe.bmp")")

EndEnd SelectSelectEndEnd SubSub

PrivatePrivate SubSub Form_LoadForm_Load()()Combo1.Combo1.AddItemAddItem "Rafa", 0"Rafa", 0Combo1.Combo1.AddItemAddItem "Pepe", 1"Pepe", 1

EndEnd SubSub

Mostrar imágenes de un ficheroMostrar imágenes de un fichero

Page 21: Manual Vb6 Evb Pda

21

VB6 VB6 –– IMÁGENES (III)IMÁGENES (III)

4. Ejercicio4. Ejercicio

•• Adquirir con la Adquirir con la WebCamWebCam las imágenes de vuestros compañeros y las imágenes de vuestros compañeros y almacenarlas *.almacenarlas *.bmpbmp

•• Realizar un programa que permita visualizar la imagen del usuariRealizar un programa que permita visualizar la imagen del usuario o seleccionado. seleccionado.

Mostrar imágenes de un ficheroMostrar imágenes de un fichero

Page 22: Manual Vb6 Evb Pda

22

VB6 VB6 –– IMÁGENES (IV)IMÁGENES (IV)

[Objeto.][Objeto.]PSetPSet ((x,yx,y) [,color]) [,color] // RGB( // RGB( rojo,verde,azulrojo,verde,azul))

Dibujar puntosDibujar puntos

1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario

ImagenImagen

Page 23: Manual Vb6 Evb Pda

23

VB6 VB6 –– IMÁGENES (V)IMÁGENES (V)

Dibujar puntosDibujar puntosPrivatePrivate SubSub Form_PaintForm_Paint()()

DimDim CX As Single, CY As SingleCX As Single, CY As SingleDimDim MsgMsg As As StringStringDimDim x As Single, x As Single, ycyc As Single, As Single, ysys As SingleAs SingleClsCls' Escala del sistema de coordenadas' Escala del sistema de coordenadasScaleLeftScaleLeft = 0= 0ScaleTopScaleTop = 1= 1ScaleWidthScaleWidth = 6.3= 6.3ScaleHeightScaleHeight = = --22' Ancho de la traza y tamaño de los caracteres' Ancho de la traza y tamaño de los caracteresDrawWidthDrawWidth = 2= 2Font.SizeFont.Size = 18= 18' Coordenadas del punto central del formulario' Coordenadas del punto central del formularioCX = CX = ScaleWidthScaleWidth / 2 + / 2 + ScaleLeftScaleLeftCY = CY = ScaleHeightScaleHeight / 2 + / 2 + ScaleTopScaleTop' Coordenadas para escribir ' Coordenadas para escribir MsgMsg centradocentradoMsgMsg = "Curvas"= "Curvas"CurrentXCurrentX = CX = CX -- TextWidth(MsgTextWidth(Msg) / 2) / 2CurrentYCurrentY = CY = CY -- TextHeight(MsgTextHeight(Msg) / 2) / 2' Visualizar el literal "Curvas"' Visualizar el literal "Curvas"ForeColorForeColor = RGB(0, 192, 0) ' color verde= RGB(0, 192, 0) ' color verdePrintPrint MsgMsgForeColorForeColor = 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,36,3

22

Page 24: Manual Vb6 Evb Pda

24

VB6 VB6 –– IMÁGENES (VI)IMÁGENES (VI)

Dibujar puntosDibujar puntos

' Análogamente, establecemos los parámetros para la imagen' Análogamente, establecemos los parámetros para la imagenImagen1.Imagen1.ClsClsImagen1.Imagen1.ScaleScale (0, 1)(0, 1)--(6.3, (6.3, --1)1)Imagen1.Imagen1.CurrentXCurrentX = CX = CX -- Imagen1.Imagen1.TextWidth(MsgTextWidth(Msg) / 2) / 2Imagen1.Imagen1.CurrentYCurrentY = CY = CY -- Imagen1.Imagen1.TextHeight(MsgTextHeight(Msg) / 2) / 2Imagen1.Imagen1.ForeColorForeColor = RGB(0, 192, 0)= RGB(0, 192, 0)Imagen1.Imagen1.PrintPrint MsgMsgImagen1.Imagen1.ForeColorForeColor = RGB(0, 0, 0)= RGB(0, 0, 0)

'Dibujar curvas'Dibujar curvasForFor x = 0 x = 0 ToTo 6.3 6.3 StepStep 0.050.05ycyc = = Cos(xCos(x): ): ysys = = Sin(xSin(x))PSetPSet (x, (x, ycyc): Imagen1.): Imagen1.PSetPSet (x, (x, ycyc) ' coseno) ' cosenoPSetPSet (x, (x, ysys): Imagen1.): Imagen1.PSetPSet (x, (x, ysys) ' seno) ' seno

NextNext xxEndEnd SubSub

Page 25: Manual Vb6 Evb Pda

25

VB6 VB6 –– IMÁGENES (VII)IMÁGENES (VII)

Dibujar puntosDibujar puntos

Ojo:Ojo: en en eVBeVB hay que utilizar hay que utilizar DrawPointDrawPoint

Page 26: Manual Vb6 Evb Pda

26

VB6 VB6 –– RATÓN (I)RATÓN (I)

Eventos del ratónEventos del ratón

••MouseDownMouseDown:: Se pulsó un botón del ratón

••MouseUpMouseUp:: Cuando se suelta el botón

••MouseMoveMouseMove:: Cuando se mueve el ratón

••MousePointerMousePointer:: Tipo de puntero 1-Arrow 2-Cross

Page 27: Manual Vb6 Evb Pda

27

VB6 VB6 –– RATÓN (II)RATÓN (II)

Eventos del ratónEventos del ratón

•• EjercicioEjercicio

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 botón izquierdo"If Button = 2 Then Text1.Text = "Se ha pulsado el botón derecho"If Button = 4 Then Text1.Text = "Se ha pulsado el botón del medio“

ValorX.Text = Format(X, "###0.00")ValorY.Text = Format(Y, "###0.00")

End Sub

1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario

2. Código2. Código

Page 28: Manual Vb6 Evb Pda

28

VB6 VB6 –– RATÓN (III)RATÓN (III)

Eventos del ratónEventos del ratón•• CódigoCódigoPrivatePrivate SubSub Form_MouseMove(ButtonForm_MouseMove(Button As As IntegerInteger, , ShiftShift As As IntegerInteger, X As Single, Y As Single), X As Single, Y As Single)

IfIf ButtonButton = 0 = 0 ThenThen ExitExit SubSubIfIf ButtonButton = 1 = 1 OrOr ButtonButton = 2 = 2 OrOr ButtonButton = 4 = 4 ThenThen

IfIf ((ButtonButton = 1) = 1) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón izquierdo"= "Se pulsó sólo el botón izquierdo"IfIf ((ButtonButton = 2) = 2) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón derecho"= "Se pulsó sólo el botón derecho"IfIf ((ButtonButton = 4) = 4) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón medio"= "Se pulsó sólo el botón medio"

ElseElseIfIf ((ButtonButton AndAnd 1) 1) ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo y ?"y ?"IfIf ((ButtonButton AndAnd 2) 2) ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones dchodcho y ?"y ?"IfIf ((ButtonButton AndAnd 4) 4) ThenThen Text1.Text1.TextText = "Se pulsaron los botones medio y ?"= "Se pulsaron los botones medio y ?"IfIf ((ButtonButton AndAnd 3) = 3 3) = 3 ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo y y dchodcho""IfIf ((ButtonButton AndAnd 7) = 7 7) = 7 ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo, , dchodcho y medio"y medio"

EndEnd IfIf

ValorX.TextValorX.Text = = Format(XFormat(X, "###0.00"), "###0.00")ValorY.TextValorY.Text = = Format(YFormat(Y, "###0.00"), "###0.00")

EndEnd SubSub

PrivatePrivate SubSub Form_MouseUp(ButtonForm_MouseUp(Button As As IntegerInteger, , ShiftShift As As IntegerInteger, X As Single, Y As Single), X As Single, Y As Single)

IfIf ButtonButton = 1 = 1 ThenThen Text1.Text1.TextText = "Se ha soltado el botón izquierdo"= "Se ha soltado el botón izquierdo"IfIf ButtonButton = 2 = 2 ThenThen Text1.Text1.TextText = "Se ha soltado el botón derecho"= "Se ha soltado el botón derecho"IfIf ButtonButton = 4 = 4 ThenThen Text1.Text1.TextText = "Se ha soltado el botón del medio“= "Se ha soltado el botón del medio“

ValorX.TextValorX.Text = = Format(XFormat(X, "###0.00"), "###0.00")ValorY.TextValorY.Text = = Format(YFormat(Y, "###0.00"), "###0.00")

EndEnd SubSub

Page 29: Manual Vb6 Evb Pda

29

VB6 VB6 –– RATÓN (IV)RATÓN (IV)

Eventos del ratónEventos del ratón•• CódigoCódigo

Private Sub Option1_Click()Private Sub Option1_Click()MousePointerMousePointer = 1= 1

End SubEnd Sub

Private Sub Option2_Click()Private Sub Option2_Click()MousePointerMousePointer = 2= 2

End SubEnd Sub

Page 30: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Comunicaciones Comunicaciones –– Puerto SeriePuerto Serie

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 31: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Comunicaciones Comunicaciones –– Puerto Serie VBPuerto Serie VB

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 32: Manual Vb6 Evb Pda

32

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

RI (Ring Indicator)???229

CTS (Clear To Send)Entrada58

RTS (Request To Send)Salida47

DSR (Data Set Ready)Entrada66

GND---75

DTR (Data Terminal Ready)Salida204

TX (Transmit Data)Salida23

RX (Receive Data)Entrada32

DCD (Data Carrier Detect)Entrada81

DescripciónTipo25-PIN9-PIN

Puerto Serie Puerto Serie ––RS232RS232

Page 33: Manual Vb6 Evb Pda

33

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Puerto Serie Puerto Serie --EjercicioEjercicio

Diseñar un programa que permita configurar, transmitir y recibirDiseñar un programa que permita configurar, transmitir y recibir datos datos por el puerto serie del PC.por el puerto serie del PC.

•• ¿Cómo insertar el control de puerto serie en VB6?¿Cómo insertar el control de puerto serie en VB6?

Control de comunicaciones Control de comunicaciones PuertoComPuertoCom

‘Puerto que se desea abrir‘Puerto que se desea abrirPuertoCom.CommPortPuertoCom.CommPort = 2 ‘COM2= 2 ‘COM2‘Características comunicación ‘Características comunicación ‘19200 baudios, Paridad Ninguna, 8 bits ‘19200 baudios, Paridad Ninguna, 8 bits ‘ por carácter, 1 bit parada‘ por carácter, 1 bit paradaPuertoCom.SettingsPuertoCom.Settings = “19200,N,8,1”= “19200,N,8,1”‘Abrir puerto de comunicaciones‘Abrir puerto de comunicacionesPuertoCom.PortOpenPuertoCom.PortOpen = = TrueTrue‘Cerrar puerto de comunicaciones‘Cerrar puerto de comunicacionesPuertoCom.PortOpenPuertoCom.PortOpen = = FalseFalse

Page 34: Manual Vb6 Evb Pda

34

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Puerto SeriePuerto Serie

•• Insertar barra de estado: Control Insertar barra de estado: Control CommonCommon ControlsControls

Page 35: Manual Vb6 Evb Pda

35

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Puerto SeriePuerto Serie

•• Crear formulario Crear formulario PuertoCom.frmPuertoCom.frm (Formulario (Formulario ppalppal))

StatusBar11-sbrSimple

NameStyle

Barra de estado

txtTX(nada)True2 – Vertical

NameTextMultilineScrollBars

Caja de texto

PuertoComNameControl MSComm

&EnviarcmdEnviar

CaptionName

Boton

txtRX(nada)True2 – Vertical

NameTextMultilineScrollBars

Caja de textoTexto recibido:CaptionEtiqueta

Texto a transmitir:CaptionEtiquetaValorPropiedadObjeto

Page 36: Manual Vb6 Evb Pda

36

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Puerto SeriePuerto Serie

•• Insertar un menú en el formulario Insertar un menú en el formulario PuertoCom.frmPuertoCom.frm

&Parámetros COMConfigParams

CaptionName

Orden Parámetros COM

&ConfiguraciónmnuConfig

CaptionName

Menú Configuración

&SalirConexionSalir

CaptionName

Orden Salir

-Separador

CaptionName

Separador

&CortarConexionCortar

CaptionName

Orden Cortar

&EstablecerConexionEstablecer

CaptionName

Orden Establecer

Cone&xiónmnuConexion

CaptionName

Menú ConexiónValorProp.Objeto

Page 37: Manual Vb6 Evb Pda

37

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

•• Crear formulario Crear formulario Configuracion.frmConfiguracion.frm (Parámetros de configuración)(Parámetros de configuración)

Bits de parada:CaptionEtiqueta

lstBitsParada1, 1.5, 2

NameList

Lista Desplegable

lstControlFlujoNinguno, Xon/Xoff, Hardware

NameList

Lista Desplegable

Control de flujo:CaptionEtiqueta

lstBitsCar5,6,7,8

NameList

Lista Desplegable

lstParidadN-Ninguna, E-Par, O-Impar

NameList

Lista Desplegable

lstPuertoCOM1,COM2, ….

NameList

Lista Desplegable

Bits por carácter:CaptionEtiqueta

Paridad:CaptionEtiqueta

lstBaudios2400, 4800, 9600, 19200, 38400, 56000

NameList

Lista Desplegable

Baudios:CaptionEtiqueta

Puerto:CaptionEtiqueta

ValorPropiedadObjeto

Page 38: Manual Vb6 Evb Pda

38

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

•• Crear un Modulo *.Crear un Modulo *.basbas para declaraciones globales y públicas:para declaraciones globales y públicas:

‘Parámetros de configuración predeterminadosPublic Const PUERTO_PREDETERMINADO = "COM2"Public Const BAUDIOS_PREDETEMINADO = 9600Public Const PARIDAD_PREDETEMINADO = "N - Ninguna" 'NingunaPublic Const BITSCARACTER_PREDETEMINADO = 8Public Const BITSPARADA_PREDETEMINADO = 1Public Const CONTROLFLUJO_PREDETEMINADO = "Ninguno" 'Sin

protocolo‘Variables públicasPublic SPuerto As StringPublic sBaudios As StringPublic sParidad As StringPublic sBitsCar As StringPublic sBitsParada As StringPublic nControlFlujo As String

'Tamaño de las colas de recepción y de transmisiónPublic Const COLARX As Integer = 4096Public Const COLATX As Integer = 4096

Código Código Módulo.basMódulo.bas

Page 39: Manual Vb6 Evb Pda

39

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

•• Formulario ConfiguraciónFormulario Configuración

Private Sub cmdPredeterminados_Click()' Se actualizan los controles desde las variableslstPuerto.Text = PUERTO_PREDETERMINADO '"COM2"lstBaudios.Text = BAUDIOS_PREDETEMINADO '9600lstParidad.Text = PARIDAD_PREDETEMINADO '"None - Ninguna"lstBitsCar.Text = BITSCARACTER_PREDETEMINADO '8lstBitsParada.Text = BITSPARADA_PREDETEMINADO '1lstControlFlujo.Text = CONTROLFLUJO_PREDETEMINADO 'Ninguno Sin protocolo

End Sub

Private Sub Form_Load()lstPuerto.Text = SPuertolstBaudios.Text = sBaudioslstParidad.Text = sParidadlstBitsCar.Text = sBitsCarlstBitsParada.Text = sBitsParadalstControlFlujo.Text = nControlFlujo

End Sub

Código formulario configuraciónCódigo formulario configuración

Page 40: Manual Vb6 Evb Pda

40

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

•• Formulario ConfiguraciónFormulario Configuración

Private Sub cmdAceptar_Click()sPuerto = lstPuerto.TextsBaudios = lstBaudios.TextsParidad = lstParidad.TextsBitsCar = lstBitsCar.TextsBitsParada = lstBitsParada.TextnControlFlujo = lstControlFlujo.TextHide

End Sub

Private Sub cmdCancelar_Click()Hide

End Sub

Código formulario configuraciónCódigo formulario configuración

Page 41: Manual Vb6 Evb Pda

41

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom

Private Sub Form_Load()ConexionCortar.Enabled = False ' Habilitar/Inhabilitar controlesStatusBar1.SimpleText = "Preparado"sPuerto = PUERTO_PREDETERMINADOsBaudios = BAUDIOS_PREDETEMINADOsParidad = PARIDAD_PREDETEMINADOsBitsCar = BITSCARACTER_PREDETEMINADOsBitsParada = BITSPARADA_PREDETEMINADOnControlFlujo = CONTROLFLUJO_PREDETEMINADO

End Sub

Private Sub ConfigParams_Click()If PuertoCom.PortOpen = True Then

MsgBox "Cierre primero la conexión"Exit Sub

End If' Visualizar el formulario ConfiguraciónfrmConfiguración.Show vbModal, Me' Establecer la conexión con los parámetros establecidosIf EstablecerConexion = True Then

' Habilitar el botón de EnviarcmdEnviar.Enabled = True

End IfEnd Sub

Código formulario Código formulario PuertoComPuertoCom

Page 42: Manual Vb6 Evb Pda

42

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom

Private Sub ConexionEstablecer_Click()' Si la conexión ya estaba establecida, la orden Establecer está inhabilitadaIf EstablecerConexion = True Then

cmdEnviar.Enabled = TrueEnd If

End Sub

Private Sub ConexionCortar_Click()' Si la conexión está cerrada, la orden Cortar está inhabilitadaCortarConexioncmdEnviar.Enabled = False

End Sub

Private Sub cmdEnviar_Click()' Enviar los datos que hay en la caja de transmisiónIf txtTX.Text <> "" Then

EscribirCarsPuerto txtTX.TexttxtTX.Text = ""txtTX.SetFocus

End IfEnd Sub

Código formulario Código formulario PuertoComPuertoCom

Private Sub ConexionSalir_Click()If PuertoCom.PortOpen ThenCortarConexionUnload frmPpal

End Sub

Page 43: Manual Vb6 Evb Pda

43

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom' 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 código en cada casoSelect Case PuertoCom.CommEvent ' Eventos

Case comEvCDsEvento = "Cambio en la línea CD."

Case comEvCTSsEvento = "Cambio en la línea CTS."

Case comEvDSRsEvento = "Cambio en la línea DSR."

Case comEvRingsEvento = "Cambio en el indicador de llamadas."

Case comEvReceivesEvento = "Recibido(s) " & PuertoCom.RThreshold & " carácter/caracteres."' Leer caracteres del puertoIf LeerCarsPuerto(sRecibida) > 0 Then

txtRX.Text = txtRX.Text & sRecibidaEnd If

Case comEvSendsEvento = "Hay SThreshold = " & PuertoCom.SThreshold & " carácter/caracteres en el búfer de transmisión."

Case comEvEOFsEvento = "Se ha encontrado un carácter EOF en la entrada."

Código formulario Código formulario PuertoComPuertoCom

/**Pasar el código a los alumnos de esta función*/

Page 44: Manual Vb6 Evb Pda

44

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO

' ErroresCase comBreak

sError = "Se ha recibido una interrupción."Case comEventFrame

sError = "Error de trama."Case comEventOverrun

sError = "Datos perdidos."Case comEventRxOver

sError = "Desbordamiento del búfer de recepción."Case comEventRxParity

sError = "Error de paridad."Case comEventTxFull

sError = "Búfer de transmisión lleno."Case comEventDCB

sError = "Error inesperado al recuperar el DCB."End Select

Código formulario Código formulario PuertoComPuertoCom

/**Pasar el código a los alumnos de esta función*/

If Not IsEmpty(sEvento) ThenStatusBar1.SimpleText = sEvento

ElseIf Not IsEmpty(sError) ThenDim vr As VbMsgBoxResultBeepsError = sError & vbNewLine & "Aceptar para ignorar. "

& _"Cancelar para salir"

vr = MsgBox(sError, vbOKCancel + vbExclamation, App.Title)

If vr = vbCancel Then' Cerrar el puertoPuertoCom.PortOpen = FalseConexionEstablecer.Enabled = TrueConexionCortar.Enabled = False

End IfEnd If

End Sub

Page 45: Manual Vb6 Evb Pda

45

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom' INTERFAZ DE COMUNICACIONES

Private Function EstablecerConexion() As BooleanOn Error Resume NextWith PuertoCom

' Cerrar el control si estuviera abiertoIf .PortOpen = True Then .PortOpen = False

' Especificar el puerto COM que se desea abrirDim Puerto As StringSelect Case sPuerto

Case "COM1"Puerto = 1

Case "COM2"Puerto = 2

Case "COM3"Puerto = 3

Case "COM4"Puerto = 4

End Select

Código formulario Código formulario PuertoComPuertoCom

/**Pasar el código a los alumnos de esta función*/

.CommPort = Puerto ' número del puerto (1, 2, ...)' Establecer el tamaño de las colas de recepción y

transmisión.InBufferSize = COLARX ' cola de recepción.OutBufferSize = COLATX ' cola de transmisión' Limpiar las colas Rx y Tx.InBufferCount = 0.OutBufferCount = 0

' Establecer los parámetros de la comunicaciónDim sSettings As String' Baudios, paridad, número de bits de datos y de parada' Longitud del bit de paro:sSettings = sBaudios & "," & Left(sParidad, 1) & "," & _

sBitsCar & "," & sBitsParada.Settings = sSettings

Page 46: Manual Vb6 Evb Pda

46

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom' INTERFAZ DE COMUNICACIONES

' Establecer el control de flujoDim ControlFlujo As HandshakeConstants 'entero

Select Case nControlFlujoCase "Ninguno"

ControlFlujo = 0Case "Xon/Xoff"

ControlFlujo = 1Case "Hardware"

ControlFlujo = 2End Select

.Handshaking = ControlFlujo

' Cómo se leerán los datos del puerto' Caracteres que puede admitir el buffer de transmisión 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

Código formulario Código formulario PuertoComPuertoCom/**Pasar el código */

If .PortOpen = False Then' Error al abrir el puerto (verifique la configuración)BeepMsgBox "Error: No se puede abrir el puerto " & _

sPuerto, vbOKOnly + vbCritical, App.TitleIf sBitsParada > "1" Then

MsgBox _"1 bit en cualquier longitud de carácter, o bien " & _vbCrLf & "1.5 bits en longitud de carácter 5, y " & _vbCrLf & "2 bits en longitud de carácter 6 a 8", _vbOKOnly + vbInformation, App.Title

End IfEstablecerConexion = FalseExit Function

End IfEnd With' El puerto se abrió con éxitoEstablecerConexion = TrueStatusBar1.SimpleText = "Puerto de comunicaciones

abierto"' Habilitar/Inhabilitar órdenes de ls menúsConexionEstablecer.Enabled = FalseConexionCortar.Enabled = True

End Function

Page 47: Manual Vb6 Evb Pda

47

VB6 VB6 –– PUERTO SERIEPUERTO SERIE

Formulario Formulario PuertoComPuertoCom

Private Function LeerCarsPuerto(ByRef sRecibida As String) As LongsRecibida = PuertoCom.InputLeerCarsPuerto = Len(sRecibida)

End Function

Private Function EscribirCarsPuerto(str As String) As BooleanPuertoCom.Output = strEscribirCarsPuerto = True

End Function

Private Function CortarConexion() As BooleanIf 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 seguridadbTiempoSobrepasado = FalseTiempo = Now

StatusBar1.SimpleText = "Cerrando la conexión..."While PuertoCom.OutBufferCount > 0

' Permitir procesar mensajes pendientesDoEvents

Código formulario Código formulario PuertoComPuertoCom/**Pasar el código */

If DateDiff("s", Now, Tiempo) > 10 Or _bTiempoSobrepasado = True ThenDim vr As VbMsgBoxResultvr = MsgBox("Datos no enviados", vbAbortRetryIgnore, _

App.Title)Select Case vr

' Intentar enviar los datos durante otros 10 segundosCase vbRetry

Tiempo = NowCase vbIgnore ' Ignorar el tiempo límite

bTiempoSobrepasado = TrueCase vbAbortStatusBar1.SimpleText = ""CortarConexion = FalseExit Function

End SelectEnd If

Wend' Tx vacío. Cerrar el puerto.PuertoCom.PortOpen = FalseConexionEstablecer.Enabled = TrueConexionCortar.Enabled = False

End IfStatusBar1.SimpleText = "Conexión concluida"CortarConexion = True

End Function

Page 48: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Comunicaciones Comunicaciones –– Puerto Serie eVBPuerto Serie eVB

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 49: Manual Vb6 Evb Pda

49

PUERTO SERIE PUERTO SERIE eVBeVB (I)(I)

•• ¿Cómo insertar el control de puerto serie en ¿Cómo insertar el control de puerto serie en eVBeVB 3.0?3.0?

Diseñar un programa que Diseñar un programa que permitarpermitar transmitir y recibir datos por el transmitir y recibir datos por el puerto serie de la PDApuerto serie de la PDA

Page 50: Manual Vb6 Evb Pda

50

PUERTO SERIE PUERTO SERIE eVBeVB (II)(II)

•• Crear formulario Crear formulario PuertoSerie.frmPuertoSerie.frm (Formulario (Formulario ppalppal))

ReceivedDataTextBox(nada)True2 – Vertical

NameTextMultilineScrollBars

Caja de texto

Comm1NameControl MSComm

&EnviarCommand1

CaptionName

Boton

DataToTransmitTextBox(nada)True2 – Vertical

NameTextMultilineScrollBars

Caja de textoDatos a transmitir:CaptionEtiqueta

Datos recibidos:CaptionEtiquetaValorPropiedadObjeto

Page 51: Manual Vb6 Evb Pda

51

PUERTO SERIE PUERTO SERIE eVBeVB (III)(III)

•• Propiedades del control Propiedades del control CommComm

CommPort: Número del puerto

InputLen: Longitud cadena de datos recibidos para lectura. (0-Leer cada vez que le llega un dato)

Settings: Configuración del puerto

Rthreshold = 1: Provoca un OnComm event cada vez que se recibe un carácter

Page 52: Manual Vb6 Evb Pda

52

PUERTO SERIE PUERTO SERIE eVBeVB (IV)(IV)

•• Código en el formulario Código en el formulario PuertoSerie.frmPuertoSerie.frm

PrivatePrivate SubSub Form_LoadForm_Load()()Comm1.Comm1.PortOpenPortOpen = = TrueTrue

EndEnd SubSub

PrivatePrivate SubSub Command1_Command1_ClickClick()()Comm1.Output = Comm1.Output = DataToTransmitTextBox.TextDataToTransmitTextBox.Text

EndEnd SubSub

PrivatePrivate SubSub Form_OKClickForm_OKClick()()App.EndApp.End

EndEnd SubSub

PrivatePrivate SubSub Comm1_Comm1_OnCommOnComm()()SelectSelect Case Comm1.Case Comm1.CommEventCommEvent

Case Case comEvReceivecomEvReceiveReceivedDataTextBox.TextReceivedDataTextBox.Text = = ReceivedDataTextBox.TextReceivedDataTextBox.Text + Comm1.+ Comm1.InputInput

Case Case comEvSendcomEvSend' do ' do nothingnothing herehere forfor nownow

EndEnd SelectSelectEndEnd SubSub

Page 53: Manual Vb6 Evb Pda

53

PUERTO SERIE PUERTO SERIE eVBeVB (V)(V)

1.1. Comunicar la PDA con el PC utilizando el Comunicar la PDA con el PC utilizando el HyperterminalHyperterminal

2.2. Comunicar la PDA con el PC utilizando el Programa “PuertoSerie” Comunicar la PDA con el PC utilizando el Programa “PuertoSerie” implementado en VB6implementado en VB6

PruebasPruebas

Page 54: Manual Vb6 Evb Pda

““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”

Comunicaciones Comunicaciones –– Internet: socketsInternet: sockets

Rafael Barea

Universidad de Alcalá. Departamento de Electrónica

Page 55: Manual Vb6 Evb Pda

55

SOCKETS (I)SOCKETS (I)

¿Qué es un ¿Qué es un SocketSocket??

Un socket es un objeto a través del cual una aplicación puede enviar o recibir paquetes de datos a través de la red

¿Qué es una comunicación orientada a conexión?¿Qué es una comunicación orientada a conexión?

Es una comunicación entre equipos en la que:•Primero se establece la conexión entre dos equipos•Después se intercambian peticiones y datos•Finalmente se libera la conexión

Características:• Comunicación fiable: si se produce un error en la transmisión se vuelve a enviar la información (paquete perdido).• Es necesario un socket en la aplicación cliente (la que pide la información) y otro en la aplicación servidor (la que proporciona la información)• Normalmente se utiliza el protocolo TCP/IP

Page 56: Manual Vb6 Evb Pda

56

SOCKETS (II)SOCKETS (II)

Aplicación clienteAplicación cliente--servidorservidor

• Servidor: Aplicación que ofrece servicios

• Cliente: Aplicación que solicita servicios

CLIENTECLIENTE SERVIDORSERVIDOR

EsquemaEsquema

Page 57: Manual Vb6 Evb Pda

57

SOCKETS (III)SOCKETS (III)

SocketsSockets en Visual Basic en Visual Basic PP Control WinSockControl WinSock

VB6VB6 eVBeVB

Page 58: Manual Vb6 Evb Pda

58

SOCKETS (IV)SOCKETS (IV)

SocketsSockets en Visual Basic en Visual Basic PP Control WinSockControl WinSock

Funciones:Funciones:

WinSock.Listen: Escuchar peticiones de conexión y guardarlas en una cola de conexiones pendientes. (En el servidor)

• WinSock.Accept: Extrae la primera conexión pendiente en la cola y la acepta.

• WinSock.GetData DatosRecibidos, vbString: Procesa la información recibida/* En eVB debe DatosRecibidos debe ser tipo variant, no tipo string

• WinSock.SendData DatosEnviados: Envia la información recibida/* En eVB debe DatosEnviados debe ser tipo variant, no tipo string

• WinSock.Close: Libera la conexión

• WinSock.State: Información sobre la conexión o acción realizada

• WinSock.Connect servidor, puerto: Conectar los sockets (En el cliente)

Page 59: Manual Vb6 Evb Pda

59

SOCKETS (V)SOCKETS (V)

Servidor PCServidor PC--VB6 VB6 Cliente PDACliente PDA--eVBeVB

Aplicación clienteAplicación cliente--servidor utilizando servidor utilizando SocketsSockets

Objetivo:Objetivo:

EjercicioEjercicio

Page 60: Manual Vb6 Evb Pda

60

SOCKETS (VI)SOCKETS (VI)

Aplicación Servidor (VB6)Aplicación Servidor (VB6) EjercicioEjercicio

1. Crear el siguiente formulario1. Crear el siguiente formulario

Page 61: Manual Vb6 Evb Pda

61

SOCKETS (VII)SOCKETS (VII)

Aplicación Servidor (VB6)Aplicación Servidor (VB6)EjercicioEjercicio

2. Código2. Código

Private Sub CommandEscuchar_Click()WinSock1.ListenTextCodigoConexion.Text = WinSock1.StateIf WinSock1.State = 2 Then

TextEstadoServidor.Text = "Esperando conexión"TextAccion.Text = "Servidor esperando conexión"TextIP.Text = WinSock1.LocalIP

End IfEnd Sub

Private Sub Cerrar_Click()WinSock1.CloseTextCodigoConexion.Text = WinSock1.StateTextEstadoServidor.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 VariantEnviar = TextDataSent.TextWinSock1.SendData (Enviar)TextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Dato enviado por el Servidor"

End Sub

Page 62: Manual Vb6 Evb Pda

62

SOCKETS (VIII)SOCKETS (VIII)

Aplicación Servidor (VB6)Aplicación Servidor (VB6)EjercicioEjercicio

2. Más código2. Más código

Private Sub IP_Click()TextIP.Text = WinSock1.LocalIPTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "IP Servidor"

End Sub

Private Sub WinSock1_ConnectionRequest()WinSock1.AcceptTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Cliente conectado"TextIPCliente.Text = WinSock1.RemoteHostIPTextEstadoCliente.Text = "Conectado"TextEstadoServidor.Text = "Conectado"

End Sub

Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)Dim datos as Variant ‘ No funciona si ponéis Dim datos as StringWinSock1.GetData datos, vbStringTextDataReceived.Text = datosTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Datos recibidos del Cliente"

End Sub

Page 63: Manual Vb6 Evb Pda

63

SOCKETS (IX)SOCKETS (IX)

Aplicación cliente (Aplicación cliente (eVBeVB)) EjercicioEjercicio

1. Crear el siguiente formulario1. Crear el siguiente formulario

Page 64: Manual Vb6 Evb Pda

64

SOCKETS (X)SOCKETS (X)

Aplicación cliente (Aplicación cliente (eVBeVB)) EjercicioEjercicioPrivate Sub CommandConectar_Click()Dim destino As Stringdestino = TextIPRemote.TextWinSock1.RemoteHost = destinoWinSock1.ConnectLabelEstado.Caption = WinSock1.StateEnd Sub

Private Sub Cerrar_Click()WinSock1.CloseEnd Sub

Private Sub CommandEnviar_Click()Dim enviar As Stringenviar = TextTx.TextWinSock1.SendData (enviar)LabelEstado.Caption = WinSock1.StateEnd Sub

Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)Dim datos As StringWinSock1.GetData datos, vbStringLabelEstado.Caption = WinSock1.StateTextRx.Text = datosEnd Sub

Private Sub Form_OKClick()App.End

End Sub


Top Related