You are on page 1of 13

Cuarta sesión

En esta sesión aprenderá como el programa puede responder a los


eventos de teclado, a detectar si una tecla fue oprimida o liberada y a
manejar los datos de entrada que vienen del teclado.

• El evento KeyDown sucede cuando oprime cualquier tecla. Por


ejemplo, si se oprime una tecla mientras un botón de comando
llamado cmdpushme tiene el enfoque, se ejecuta
automáticamente el procedimiento cmdpushme_KeyDown
• El evento KeyUp sucede cuando sueltan la tecla que se oprimió.
Por ejemplo, si se suelta la tecla oprimida en el párrafo anterior,
se ejecuta automáticamente el procedimiento cmdpushme_KeyUp
• El evento KeyPress sucede cuando oprime una tecla que tiene un
carácter ANSI correspondiente. Por ejemplo, si oprime la tecla A,
mientras un botón de comando tiene el enfoque, se ejecuta el
procedimiento cmdpushme_KeyPress. Si oprime F1, el evento
KeyPress no sucede, debido a que esta tecla no tiene un carácter
ANSI correspondiente.

Programa Keys
Este programa ilustra como se utilizan los tres eventos de teclado
en un programa.
Tabla de propiedades del formulario frmkeys
Objeto Propiedad Valor
Form Name frmkeys
Caption Programa Keys
Command button Name cmdsalir
Caption &Salir
Command button Name cmdpushme
Caption &Oprime
Label Name lblinfo
Alignment 2-Center
BorderStyle 1-Fixed Single
Caption Borra el texto

• Teclee el siguiente código

‘todas las variables deben declararse


option explicit

Private sub cmdsalir_click()


End
End sub

Private sub cmdpushme_KeyDown(KeyCode as integer, Shift as


integer)
Lblinfo.caption=”La tecla que oprimiste fue:”_
& str(Keycode) & “Shift:” & str(shift)
End sub

• Graba y ejecuta tu programa.

Tabla de los valores posibles del segundo parámetro del


procedimiento cmdpushme_KeyDown.
Seg. parámet. Estado de Alt Estado de Ctrl Est. de Mayús
0 No oprimido No oprimido No oprimido
1 No oprimido No oprimido Oprimido
2 No oprimido Oprimido No oprimido
3 No oprimido Oprimido Oprimido
4 Oprimido No oprimido No oprimido
5 Oprimido No oprimido Oprimido
6 Oprimido Oprimido No oprimido
7 Oprimido Oprimido Oprimido
Detección de una tecla liberada
Private sub cmdpushme_KeyUp(KeyCode as integer, Shift as integer)
Lblinfo.caption=”La tecla que oprimiste fue:”_
& str(Keycode) & “Shift:” & str(shift)
End sub

Detección de una tecla ANSI


Private sub cmdpushme_KeyPress(KeyAscii as integer)
Dim char
Char=Chr(KeyAscii)
Lblinfo.caption=”KeyAscii:” & str(KeyAscii) & “Char:” & char
End sub

• Graba y ejecuta tu programa.

Controles para el sistema de archivos


Se enfoca en el uso de controles para el sistema de archivos, para
escribir un programa que le permite seleccionar un archivo de una
unidad. Hay tres controles de este tipo: DriveListBox, DirListBox y
FileListBox.

En un programa tipico que permite seleccionar archivos de


unidades, esos tres controles se usan en combinación. Cuando
necesita seleccionar un archivo, se despliega en pantalla un cuadro
de diálogo que incluye los tres controles, Luego puede elegir el
archivo deseado seleccionando una unidad en el DriverListBox, un
directorio en el DirListBox y un archivo en el FileListBox.

DriverListBox DirListBox

FileListBox
FielListBox
DirlistBox

DriverListBox

Objeto Propiedad Valor


Form Name frmsize
Caption Programa Size
Label Name lblnombrearch
Caption Nombre del archivo
Text Box Name txtfilename
Text Borra el texto
File List Box Name filfiles
Label Name lblfiletype
Caption Tipo de Archivo
Combo Box Name cbofiletype
Style 2-Dropdown List
Label Name lbldirectories
Caption Directorio
Label Name lbldirname
Caption Vacio
BorderStyle 1-Fixed Single
Directory List Box Name dirdirectory
Command Button Name cmdok
Caption &Ok
Default True
Label Name lbldrive
Caption Unidad:
Drive List Box Name drvdrive
Command Button Name cmdcancel
Caption &Cancelar
Cancel True
• Teclee el siguiente código

‘todas la variables deben declararse.


Opcion explicit

Private sub form_load

‘llena el combo cbofiletype


cbofiletype.additem “Todos los Archivos (*.*)”
cbofiletype.additem “Archivos Texto (*.TXT)”
cbofiletype.additem “Archivos Doc (*.DOC)”

‘inicializa el combo en el elemento #0


cbofiletype.listindex=0

‘actualiza la etiqueta lbldirname con la ruta


lbldirname.caption=dirdirectory.path

End sub

Private sub drvdrive_change()

‘la siguiente instrucción puede causar un error


‘por lo que ponemos una captura de errores.
On error resume next

‘cambia la ruta del control dirlistbox


‘hacia la nueva unidad
dirdirectory.path=drvdrive.drive
if err.number<>0 then

driveerror:
‘sucedió un error hay que informar al usuario y restaurar la unidad
msgbox “Error de unidad”, vbexclamation, “Error”
err.number=0
drvdrive.drive=dirdirectory.path
end if

End sub

Private sub dirdirectory_change()


‘un directorio a acaba de ser seleccionado por el usuario
‘por lo que actualiza la ruta del control filelistbox adecuadamente
filfiles.path=dirdirectory.path
‘tambian actualiza la etiqueta lbldirname
lbldirname.caption=dirdirectory.path
End sub

Private sub filfiles_click()


‘actualiza el cuadro de texto txtfilename con el
‘nombre de archivo que se acaba de seleccionar
txtfilename.text=filfiles.filename

End sub

Private sub cmdok_click()

Dim pathandname as string


Dim filesize as string
Dim path as string

‘si no hay archivo selecionado, le indica al usuario


‘y sale del procedimiento
if txtfilename.text=”” then
msgbox “Primero selecciona una archivo”
exit sub
end fi

‘se asegura de que la ruta termine con (\)


if rigth(filfiles.path, 1)<> “\” then
path=filfiles.path & “\”
else
path=filfiles.path
end if

‘obtiene la ruta y el nombre del archivo seleccionado


if txtfilename.text=filfiles.filename then
pathandname= path & filfiles.filename
else
pathandname=txtfilename.text
end if

‘la siguiente instrucción puede causar un error


‘por lo que se establece una captura de error
on error resuma next

‘obtiene el tamaño del archivo


if err.number=0 then
‘despliega el tamaño del archivo
msgbox “El tamaño de: ” & pathandname & “ es:” & filesize “
bytes”
else

filelenerror:
‘sucedió un error, por lo tnato, despliega un mensaje de error
msgbox “No se puede calcular el tamaño:” & pathandname
err.number=0
end fi
End sub

Private sub filfiles_dblclick()


‘asigna al cuadro de texto txtfilename el
‘nombre el archivo en el que se acaba de hacer doble clic
txtfilename.text=filfiles.filename
‘ejecuta el procedimiento cmdok_click
cmdok.value=true
End sub

Private sub cmdcancel_click()


end
End sub

Como tener acceso a archivos


Muchos programas necesitan leer y escribir datos en archivos en
disco. En esta parte apredera a crear, leer y escribirlos en archivos.

Hay tres formas para accesar archivos en VB.


• Acceso aleatorio, Acceso secuencial, Acceso binario

Programa Teléfonos
Esta programa ilustra la manera de crear y manejar archivos de
acceso aleatorio. El programa permite mantener un archivo de datos
llamado PHONE.DAT que guarda registros de personas y sus números
telefónicos.

Objeto Propiedad Valor


Form Name frmtelefono
Caption Programa Teléfonos
MaxButton False
Text Box Name txtnombre
text Vacío
MaxLength 40
Text Box Name txttelef
Text Vacío
MaxLength 40
Text Box Name txtcoment
text Vacío
MaxLength 100
MultiLine True
ScrollBars 2-Vertical
Command Button Name cmdnew
Caption &Nuevo
Command Button Name Cmdnext
Caption &Siguiente
Command Button Name cmdprevious
Caption &Anterior
Command Button Name cmdexit
Caption Sa&lir
Label Name lbl1
Caption Comentario
Label Name lbl2
Caption Teléfonos
Label Name lbl3
Caption Nombre

• Teclee el siguiente código.

‘todas la variables DEBEN declararse


Option explicit

‘declara un tipo definido por el usuario que corresponde a un


‘registro en el archivo PHONE.DAT
Private type Persona
Nombre as string * 40
Telef as string * 40
Coment as string * 100
End type

‘declara variables que deben ser visibles


‘en todos los procedimientos del formulario
Private gpersona as persona
Private gfilenum as integer
Private grecordlen as long
Private gcurrentrecord as long
Private glastrecord as long

Public sub salvaRegistro

‘llena a gpersona con los datos desplegados


gpersona.nombre=txtnombre.text
gpersona.telef=txttelef.text
gpersona.coment=txtcoment.text

‘guarda gpersona en el registro actual


Put #gfilenum, gcurrentrecord, gpersona

End sub

Public sub MuestraRegistro

‘llena a gpersona con los datos del registro actual


get #gfilenum, gcurrentrecord, gpersona

‘despliega a gpersona
txtnombre.text=trim(gpersona.nombre)
txttelef.text=trim(gpersona.telef)
txtcoment.text=trim(gpersona.coment)

‘despliega el número de registro actual


‘en el título del formulario
frmtelefono.caption=”titulo” & “Registro:” & str(gcurrentrecord) & _
str(glastrecord)

End sub

Private sub form_load()

‘calcula la longitud de un registro


grecordlen=len(gpersona)

‘obtiene el siguiente numero de archivo disponible


gfilenum=freefile

‘abre el archivo para acceso aleatorio, si al archivo no existe lo crea


Open “PHONE.DAT” For Random As gfilenum len=grecordlen

‘actualiza gcurrentrecord
gcurrentrecord=1

‘encuentra cual es el ultimo numero de registro del archivo


glastrecord=lof(gfilenum)/grecordlen
‘si el archivo acaba de ser creado
‘establece glastrecord a 1
if glastrecord=0 then
glastrecord=1
end if

‘despliega el registro actual


muestraregistro
End sub

Private sub cmdnew_click()

‘guarda el registro actual


salvaregistro

‘añade un nuevo registro en blanco


glastrecord=glastrecord+1
gpersona.nombre=” ”
gpersona.telef=” ”
gpersona.coment=” ”
put #gfilenum, glastrecord, gpersona

‘actualiza a gcurrentrecord
gcurrentrecord=glastrecord

‘despliega el registro que acaba de crear


muestraregistro

txtnombre.setfocus

End sub

Private sub cmdnext_click()

‘si el registro actual es el ultimo registro, emite un sonido


‘y despliega un mensaje de error, en caso contrario, guarda
‘el registro actual y salta al siguiente registro
if gcurrentrecord=glastrecord then
Beep
MsgBox “Fin del Archivo”, vbexclamation
else
salvaregistro
gcurrentrecord=gcurrentrecord+1
muestraregistro
end if

txtnombre.setfocus

End sub
Private sub cmdprevious_click()

‘si el registro actual es el primer registro, emite un sonido


‘y despliega un mensaje de error, en caso contrario, guarda
‘el registro actual y salta al anterior registro
if gcurrentrecord=glastrecord then
Beep
MsgBox “Fin del Archivo”, vbexclamation
else
salvaregistro
gcurrentrecord=gcurrentrecord-1
muestraregistro
end if

txtnombre.setfocus

End sub

Private sub cmdexit_click()

‘guarda el registro acual


salvaregistro

‘ cierra el archivo
close #gfilenum

End

End sub

• Graba y ejecuta tu programa


Modificación al programa

• Teclea el siguiente código

Private sub cmdsearch_click()

Dim busca as string


Dim found as integer
Dim recnum as long
Dim tmp as persona

‘obtiene del usuario el nombre a buscar


busca=inputbox(“Nombre a Buscar:”, “Busqueda”)

‘si el usuario no da el nombre


if busca=” ” then
txtnombre.setfocus
exit sub
end if

‘convierte el nombre del usuario a buscar a mayúsculas


busca=ucase(busca)

‘inicializa el indicador found en false


found=false

‘busca el nombre que introdujo el usuario


for recnum=1 to glastrecord
get #gfilenum, recnum, tmp
if busca=ucase(trim(tmp.nombre)) then
found=true
exit for
end if
next

‘si encuentra el nombre despliega el registro


if found=true then
salvaregistro
gcurrentrecord=recnum
muestraregistro
else
MsgBox “Nombre: ” & busca & “ no existe”
end if

txtnombre.setfocus

End sub

• Graba y ejecuta tu programa

La opción borrar queda de tarea para la siguiente clase, no quiero el


código, quiero el algoritmo.

You might also like