Cursos Visual Basic

TRUCOS

Aquí podéis encontrar una serie de trucos para hacer más fácil la programación de vuestras aplicaciones. Los nuevos trucos se añaden en la parte superior de la página:


IMPEDIR PEGAR TEXTO EN UN CUADRO DE TEXTO

Para impedir que en un cuadro de texto se inserte el contenido del portapapeles se pueden optar por varias soluciones:

  • Una primera solución es comprobar qué teclas se han pulsado:
Sub CuadroDeTexto_KeyDown (KeyCode As Integer, Shift As Integer)
If Shift = 1 And KeyCode = 45 Then KeyCode = 0
End Sub
  • Otra solución es borrar el contenido del portapapeles cuando el cuadro de texto obtenga el foco:
Private Sub CuadroDeTexto_GotFocus()
Clipboard.Clear
End Sub

REALIZAR UNA GRÁFICA CON EL CONTROL GRAPH

Para hacer una gráfica con el control Graph teniendo los datos en un Grid:

Primero se rellenan las etiquetas del graph (lo que es la "leyenda") y se ponen a 0 los datos del Graph:
´ Muchos cajeros, un sólo dato.
grafico_frm.grafico.ColumnCount = (Len(x2) - 1) / 3
ReDim label_y(1 To grafico_frm.grafico.ColumnCount)

´ Toma nota de las etiquetas (y)
i = 1
For i1 = 0 To lista_cajeros.ListCount - 1
If lista_cajeros.Selected(i1) Then
label_y(i) = lista_cajeros.List(i1)

´ Nombre de las leyendas
grafico_frm.grafico.Column = i
grafico_frm.grafico.ColumnLabel = label_y(i)
i = i + 1
If i = (grafico_frm.grafico.ColumnCount + 1) Then
Exit For
End If
End If
Next i1

For i1 = 0 To lista_datos.ListCount - 1
If lista_datos.Selected(i1) Then
x = "´" + lista_datos.List(i1) + "´"
Exit For
End If
Next i1

ADMITIR SÓLO NÚMEROS EN UN TEXT BOX

Una de las funciones más interesantes. Escribir este texto en el evento Key Press

If KeyAscii < Asc("0") Or KeyAscii > Asc ("9") Then If KeyAscii <> 8 Then KeyAscii = 0

EJECUTAR CUALQUIER APLICACIÓN

Con este código podrás ejecutar cualquier aplicación (eso sí, deberás indicarle la ruta completa del archivo).

Dim recurso As Long
recurso = Shell("start " & "C:\windows\notepad.exe")

CENTRAR UNA VENTANA

Para que las pantallas de nuestros formularios aparezcan siempre centradas independientemente de la resolución a la que esté configurado el monitor:

Nombre_del_Formulario.Left = Screen.Width - Width \ 2

Nombre_del_Formulario.Top = Screen.Height - Height \ 2

OBTENER UN NÚMERO ALEATORIO

Con el siguiente código obtendrás un número aleatorio. Para ello debes insertar en el formulario un Label y un Botón. Ahora en el evento click del botón introduce el siguiente código:

Dim Numero As Double
Randomize
Numero = Rnd
Label1.Caption = Numero

COMPROBAR LA EXISTENCIA DE UN FICHERO

Para comprobar si existe o no un determinado fichero emplea este código:

Dim x

On Error GoTo Fallo
x = GetAttr("Ruta_completa_del_archivo_a_comprobar") /*P.ej: "C:\Fichero.dat" */
MsgBox "El fichero existe."
Exit Sub
Fallo:
MsgBox "El fichero especificado no existe."

SELECCIONAR EL CONTENIDO DE UN TEXTBOX

Con este código, cuando el cuadro de texto obtenga el foco, se seleccionará todo su contenido, evitando así el tener que arrastrar el ratón para seleccionar el texto. Inserta un cuadro de texto y el evento GetFocus inserta este código:

Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)

APAGAR EL EQUIPO Y REINICIAR EL SISTEMA

Se insertan dos botones (cbApagar y cbReiniciar). En las declaraciones generales del código se inserta lo siguiente:

Private Declare Function ExitWindowsEx& Lib "user32" (ByValuFlags&, ByVal dwReserved&)

En el evento click del cbApagar se escribe lo siguiente:

Dim i As Integer
i = ExitWindowsEx(1, 0&)

Por último, en el evento click del cbReiniciar escribe esto:

Dim i As Integer
i = ExitWindowsEx(2, 0&)

DETECTAR LA LETRA ASIGNADA AL CD-ROM

Insertamos una Label y en las declaraciones generales insertamos lo siguiente:

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6

Ahora escribimos esta otra función:

Function StripNulls(startStrg$) As String

Dim c%, item$
c% = 1
Do
If Mid$(startStrg$, c%, 1) = Chr$(0) Then
item$ = Mid$(startStrg$, 1, c% - 1)
startStrg$ = Mid$(startStrg$, c% + 1, Len(startStrg$))
StripNulls$ = item$
Exit Function
End If
c% = c% + 1
Loop

End Function

Por último en el evento form Load escribimos esto otro:

Dim r&, allDrives$, JustOneDrive$, pos%, DriveType&
Dim CDfound As Integer
allDrives$ = Space$(64)
r& = GetLogicalDriveStrings(Len(allDrives$), allDrives$)
allDrives$ = Left$(allDrives$, r&)
Do
pos% = InStr(allDrives$, Chr$(0))
If pos% Then
JustOneDrive$ = Left$(allDrives$, pos%)
allDrives$ = Mid$(allDrives$, pos% + 1, Len(allDrives$))
DriveType& = GetDriveType(JustOneDrive$)
If DriveType& = DRIVE_CDROM Then
CDfound% = True
Exit Do
End If
End If
Loop Until allDrives$ = "" Or DriveType& = DRIVE_CDROM
If CDfound% Then
label1.Caption = "La unidad de CD-ROM corresponde a la unidad: " & UCase$(JustOneDrive$)
Else
label1.Caption = "Su sistema no posee CD-ROM o unidad no encontrada."
End If

Próximamente más trucos en esta sección. Estad atentos.