You are on page 1of 6

ContLinea = ContLinea + 4

If ContLinea = 76 Then
MensajeEntrante = MensajeEntrante + vbCrLf
ContLinea = 0
End If
End If
DoEvents
Wend
Select Case Cont
Case 1
Cuatro(1) = Int(Trio(1) / 4)
Cuatro(2) = (Trio(1) - Int(Trio(1) / 4) * 4) * 16
MensajeEntrante = MensajeEntrante + Mid(Base64, Cuatro(1) + 1, 1)
MensajeEntrante = MensajeEntrante + Mid(Base64, Cuatro(2) + 1, 1) + "=="
Case 2
Cuatro(1) = Int(Trio(1) / 4)
Cuatro(2) = (Trio(1) - Int(Trio(1) / 4) * 4) * 16 + Int(Trio(2) / 16)
Cuatro(3) = (Trio(2) - (Int(Trio(2) / 16) * 16)) * 4
MensajeEntrante = MensajeEntrante + Mid(Base64, Cuatro(1) + 1, 1)
MensajeEntrante = MensajeEntrante + Mid(Base64, Cuatro(2) + 1, 1)
MensajeEntrante = MensajeEntrante + Mid(Base64, Cuatro(3) + 1, 1) + "="
End Select
Close #3
End If
End Sub

Trucos Breves 2

Seleccionar todo un procedimiento


Para seleccionar un procedimiento completo (ya sea para borrarlo o para copiarlo a
otro formulario) abrimos la pantalla de edición correspondiente y luego hacemos un
doble clic en la parte izquierda de la misma (donde el cursor cambia a una flecha
apuntando hacia la derecha).

Cambiar rápidamente la propiedad Enabled


La propiedad Enabled de un objeto se puede alternar fácilmente con una única línea
de código:
optAlternar.Enabled = NOT optAlternar.Enabled
Este código es independiente de la definición de True y False, la cual varía según la
versión de VB utilizada. Ya sea que se represente numéricamente (-1 = True; 0 =
False) o lógicamente, la operación NOT se adapta para dar el resultado correcto.

Date y Date$ no son equivalentes


La función Date$ devuelve la fecha del sistema en un string con el formato MM-DD-
AAAA. Date devuelve un variant con el formato de fecha especificado en el Panel de
Control (puede devolver, por ejemplo, DD-MM-AA). Si queremos realizar cálculos con
fechas, debemos utilizar Date$. Para mostrar la fecha actual al usuario, basta con usar
Date (sin el símbolo $).

"Couldn't find installable ISAM"


En una aplicación que accede a bases de datos, este error indica que VB no encuentra
Información sobre los archivos de acceso a bases de datos. Debemos crear un archivo
en la carpeta de Windows con esa Información: copiar el archivo Vb.INI a dicha
subcarpeta, con el nombre de la aplicación ejecutable y la extensión INI (por ejemplo,
Agenda.INI).

Evitar la carga de complementos


Al cargar VB 4 o 5, cualquier complemento (Add-In) activo también se ejecuta. Si hay
un error en algún complemento, puede ocurrir un GPF (falla de protección general).
Para evitar esto, apagar los complementos antes de cargar VB, editando el archivo
VBAddin.INI (en la carpeta de Windows), poniendo un 0 al lado de cada
complemento. Por ejemplo: AppWizard.Wizard=0.

Pasar cadenas de caracteres a una DLL


VB presenta un problema a la hora de recibir cadenas de caracteres grandes de una
DLL. Se produce una sobrecarga que demora el procesamiento, aun cuando ningún
resultado es devuelto. Por esta razón, en programas de tiempo crítico es necesario
salvar este inconveniente pasando cadenas inicializadas con la longitud exacta que se
espera recibir.

Descargar formularios poco utilizados


Hay que tener en cuenta que, aunque estén ocultos, los formularios ocupan un
espacio de memoria. Tener en memoria un formulario con muchos controles que se
usará una sola vez no resulta una muy buena idea, o sea que no es conveniente
ocultarlo. En tal caso, conviene descargarlo después de usado.
Evitar el uso de las propiedades por defecto
Si bien las propiedades por defecto muchas veces nos ahorran tipear unos cuantos
caracteres demás, no siempre es bueno confiar en ellas. Por ejemplo, algunas
propiedades por defecto cambiaron de Visual Basic 3 a la versión 4, causando
"cuelgues" inexplicables. Aunque es un poco más trabajoso, conviene utilizar todas las
propiedades explícitamente.

Comentar e indentar el código


Realizar comentarios acerca de cómo funciona una rutina, e indentar el código de la
misma para que sea más fácil de leer, son dos acciones que debemos realizar siempre
al programar. Un simple renglón aclaratorio puede ahorrar horas de prueba y error el
día de mañana. Indentar significa poner cada ciclo repetitivo hacia la derecha, para lo
cual basta una presión de la tecla [TAB].

Grabar antes de ejecutar


Es una buena costumbre de programación el grabar los programas antes de
ejecutarlos. Esto es especialmente recomendado en el caso de usar alguna función
API, puesto que una mala definición de la misma, o el paso incorrecto de algún
argumento, pueden causar un GPF (Error de protección general) en Visual Basic, e
incluso en el mismo Windows.

Seleccionar varios controles


Para setear un grupo de propiedades en varios controles, podemos acelerar el trabajo
seleccionándolos a todos y seteando las propiedades una sola vez. Para ello se "dibuja"
un rectángulo que contenga a todos los controles a seleccionar. Automáticamente, VB
mostrará en la ventana de propiedades sólo las que son comunes a todos los controles
seleccionados, pudiendo setearlas en conjunto.

Borrar las variables objeto


Al terminar de usar una variable que contiene un objeto (por ejemplo, una variable
definida As Database) conviene setear su valor a Nothing. Esto libera la memoria
ocupada por dicha variable, lo que no siempre ocurre al cerrar el objeto. Por ejemplo:
Dim DB As Database
' Abro la base
Set DB = OpenDatabase ("C:\VB\BIBLIO.MDB")
...
' Cierro
DB.Close
' Libero la memoria
Set DB = Nothing
Evitar el "beep" del [ENTER]
Muchas veces, cuando se ingresa Información en una caja de texto y se presiona la
tecla [ENTER], se escucha un "beep". Para evitar esto, colocar el código siguiente en el
evento KeyPress de la caja de texto:
If KeyAscii = Asc(vbCR) Then

KeyAscii = 0
End If

TextBox de sólo lectura


Para hacer que un TextBox sea de sólo lectura, podemos setear su propiedad Enabled
a False. Sin embargo, esto le da un feo color gris que habitualmente dificulta. Otra
manera de hacerlo, más elegante, es incluir el siguiente código en el evento KeyPress
de dicho control (el cual no impide que el usuario coloque el cursor sobre él):
KeyAscii = 0

Error al utilizar SetFocus


Si utilizamos el método SetFocus sobre un control o formulario que no está visible o
habilitado (propiedad Enabled), Visual Basic puede llegar a colgar nuestra aplicación,
si es que no se utiliza control de errores. Antes de usar este método, hay que
asegurarse que el control esté visible y habilitado.

La excepción que confirma la regla


Si bien el truco del SetFocus funciona casi siempre, hay una excepción muy
importante, constituida por los métodos gráficos (Print, Line, Circle y PSet). Al
llamar a estos métodos no puede usarse la estructura With ... End With, debiéndose
anteponer el objeto a dichos métodos, aun dentro de dicha estructura. Un ejemplo
sería:
With Picture

.Move 0, 0

Picture.Print "Hola, Mundo!"


End UIT

Evitar cadenas nulas en campos de Access


Si se utiliza una base de datos de Access, los campos alfanuméricos contienen valor
NULL hasta tanto se les asigne algún valor (aunque sea una cadena vacía). Si se lee
un campo con valor NULL de un RecordSet, asignando su valor a una variable de tipo
cadena, se produce un error de ejecución. Para evitar esto, se concatena una cadena
vacía a cada campo en cuanto se lo lee.

Usar Sleep en lugar de DoEvents


En un programa que se ejecuta en Windows 95 o Windows NT, es conveniente usar la
función API Sleep. DoEvents pierde parte de su tiempo procesando mensajes del
mismo proceso, lo que en un entorno multitarea es innecesario. La declaración de la
función es:
Public Declare Sub Sleep Lib "KERNEL32" Alias Sleep (ByVal Milisegundos As
Long)
Y se usa de la siguiente manera:
Sleep 0&

Error al cambiar el tamaño de los formularios


Si intentamos cambiar el tamaño de un formulario mientras está minimizado,
obtendremos un error. Para evitar esto, ay que chequear antes todo el estado del
formulario. Esto se logra con el siguiente fragmento de código:

If Me.WindowState <> 1 Then

' NO estoy minimizado


' El código para mover o cambiar el tamaño del formulario va aqui.
End If

No genera eventos al mostrar un MessageBox

Mientras un programa se encuentra mostrando un cuadro de mensaje en la pantalla


(generado con la instrucción MsgBox) no admite que se produzca ningún evento. Esto
es para prevenir la ejecución de código que podría causar problemas, ya que un
mensaje de este tipo sólo debería aparecer en contadas ocasiones.

Cantidad de Bytes que Ocupa un Directorio

Sub Form_Load()
Dim FileName As String
Dim FileSize As Currency
Dim Directory As String
Directory = "c:\windows\"
FileName = Dir$(Directory & "*.*")
FileSize = 0

Do While FileName <> ""


FileSize = FileSize + FileLen(Directory & FileName)
FileName = Dir$
Loop

Text1.Text = "Este directorio ocupa la cantidad de bytes = " +


Str$(FileSize)
End Sub

You might also like