.  . . : : Hackerss oNe : : . .  .

 

  

 

 

 

 

 

- Trucos Para Visual Basic -

 

- Menu -

  Inicio
  Webmasters
  Servidores eMule
  Contacto

 

 
 

 

 

- Recomendados -

Alta Rapida en Buscadores

 

 

 

 

- Obtener el directorio de Windows y el directorio de Sistema 


En un módulo copiar estas líneas:

Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA"_
 (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA"_
 (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Ponga dos Labels o etiquetas y un botón en el formulario:
Label1, Label2, Command1

Hacer doble click sobre el botón y escribir el código siguiente:

Private Sub Command1_Click()
    Dim Car As String * 128
    Dim Longitud, Es As Integer
    Dim Camino As String
    
    Longitud = 128
    
    Es = GetWindowsDirectory(Car, Longitud)
    Camino = RTrim$(LCase$(Left$(Car, Es)))
    Label1.Caption = Camino
    
    Es = GetSystemDirectory(Car, Longitud)
    Camino = RTrim$(LCase$(Left$(Car, Es)))
    Label2.Caption = Camino

End Sub

- Ocultar la barra de tareas en Windows 95 y/o Windows NT


En un módulo copiar estas líneas:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName_
 As String, ByVal lpWindowName As String) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter
As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long,_
ByVal wFlags As Long) As Long
Global Ventana As Long
Global Const Muestra = &H40
Global Const Oculta = &H80

En un formulario ponga dos botones y escriba el código correspondiente
a cada uno de ellos:

'Oculta la barra de tareas
Private Sub Command1_Click()
    Ventana = FindWindow("Shell_traywnd", "")
    Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Oculta)
End Sub

'Muestra la barra de tareas
Private Sub Command2_Click()
    Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Muestra)
End Sub

- Imprimir el contenido de un TextBox en líneas de X caracteres


Añadir un TextBox con las propiedades "Multiline=True" y "ScrollBars=Vertical", 
y un CommandButton. Hacer doble click sobre él y escribir este código:

Private Sub Command1_Click()
    'X es 60 en este ejmplo
    imprimeLineas Text1, 60
End Sub

En las declaraciones "Generales" del formulario, escribimos:

Public Sub imprimeLineas(Texto As Object, Linea As Integer)
    Dim Bloque As String
    'Numero de caracteres = NumC
    'Numero de Bloques = NumB
    Dim NumC, NumB As Integer
    NumC = Len(Texto.Text)
    If NumC > Linea Then
        NumB = NumC \ Linea
        For I = 0 To NumB
            Texto.SelStart = (Linea * I)
            Texto.SelLength = Linea
            Bloque = Texto.SelText
            Printer.Print Bloque
        Next I
    Else
        Printer.Print Texto.Text
    End If
    Printer.EndDoc
End Sub


- Leer y escribir un fichero Ini 


Declaraciones generales en un módulo:

Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA"_
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As_
String ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As_
String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias_
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As_
Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Leer en "Ejemplo.Ini":

Private Sub Form_Load()
    Dim I As Integer
    Dim Est As String
    Est = String$(50, " ")
    I = GetPrivateProfileString("Ejemplo", "Nombre", "", Est, Len(Est), "Ejemplo.ini")
    If I > 0 Then
        MsgBox "Tu Nombre es: " & Est
    End If
End Sub

Escribir en "Prueba.Ini":

Private Sub Form_Unload(Cancel As Integer)
    Dim I As Integer
    Dim Est As String
    Est = "Ejemplo - Apartado"
    I = WritePrivateProfileString("Ejemplo", "Nombre", Est, "Ejemplo.ini")
End Sub

(Nota: si I=0 quiere decir que no existe Información en la línea de fichero Ini a la
que hacemos referencia. El fichero "Ejemplo.Ini" se creará automáticamente).

- Crear una barra de estado sin utilizar controles OCX o VBX


Crear una PictureBox y una HScrollBar:

Propiedades de la HScrollBar:
Max -> 100
Min -> 0

Propiedades de la PictureBox:
DrawMode -> 14 - Merge Pen Not
FillColor -> &H00C00000&
Font -> Verdana, Tahoma, Arial; Negrita; 10
ForeColor -> &H00000000&
ScaleHeight -> 10
ScaleMode -> 0 - User
ScaleWidth -> 100

Insertar en el formulario o módulo el código de la función:

Sub Barra(Tam As Integer)
    If Tam > 100 Or Tam <>
Insertar en el evento Change del control HScrollBar:

Private Sub HScroll1_Change()
    Barra (HScroll1.Value)
End Sub

En el evento Paint del formulario, escribir:

Private Sub Form_Paint()
    Barra (HScroll1.Value)
End Sub


- Calcular el espacio total y espacio libre de una Unidad de disco 


Crear un módulo y escribir:

Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA"_
(ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector_
As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long

Crear 7 Labels:

Escribir el código siguiente:

Private Sub Form_Load()
    Dim I1 As Long
    Dim I2 As Long
    Dim I3 As Long
    Dim I4 As Long
    Dim Unidad As String
    Unidad = "C:/"
    GetDiskFreeSpace Unidad, I1, I2, I3, I4
    Label1.Caption = Unidad
    Label2.Caption = I1 & " Sectores por cluster"
    Label3.Caption = I2 & " Bytes por sector"
    Label4.Caption = I3 & " Número de clusters libres"
    Label5.Caption = I4 & " Número total de clusters"
    Label6.Caption = "Espacio total en disco: " & (I1 * I2 * I4)
    Label7.Caption = "Espacio libre en disco: " & (I1 * I2 * I3)
End Sub


- Crear un efecto Shade al estilo de los programas de instalación 


Crear un proyecto nuevo y escribir el código siguiente:

Private Sub Form_Resize()
    Form1.Cls
    Form1.AutoRedraw = True
    Form1.DrawStyle = 6
    Form1.DrawMode = 13
    Form1.DrawWidth = 2
    Form1.ScaleMode = 3
    Form1.ScaleHeight = (256 * 2)
    For i = 0 To 255
       Form1.Line (0, Y)-(Form1.Width, Y + 2), RGB(0, 0, i), BF
       Y = Y + 2
    Next i
End Sub


- Situar el cursor encima de un determinado control (p. ej.: un botón)


Escribir el código siguiente en el módulo:

Declare Sub SetCursorPos Lib "User32" (ByVal X As Integer, ByVal Y As Integer)

Insertar un botón en el formulario y escribir el siguiente código:

Private Sub Form_Load()
     X% = (Form1.Left + Command1.Left + Command1.Width / 2 + 60) / Screen.TwipsPerPixelX
     Y% = (Form1.Top + Command1.Top + Command1.Height / 2 + 360) / Screen.TwipsPerPixelY
     SetCursorPos X%, Y%
End Sub


- Menú PopUp en un TextBox


Ejemplo para no visualizar el menú PopUp implícito de Windows:

En el evento MouseDown del control TextBox escriba:

Private Sub Editor1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
    If Button = 2 Then
        Editor1.Enabled = False
        PopupMenu MiMenu
        Editor1.Enabled = True
        Editor1.SetFocus
    End If
End Sub


- Hacer sonar un fichero Wav o Midi


Insertar el siguiente código en un módulo:

Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

Insertar un botón en el formulario y escribir el siguiente código:

Private Sub Command1_Click()
    iResult = mciExecute("Play c:\windows\ringin.wav")
End Sub

- Hacer un formulario flotante al estilo de Visual Basic


Crear un nuevo proyecto, insertar un botón al formulario que inserte un formulario más y un módulo.
 Pegue el siguiente código en el 
módulo:

Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) 
As Long

Peguar el siguiente código en el formulario principal:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Unload Form2
End Sub

Private Sub Command1_Click()
   Dim ret As Integer
   If doshow = False Then 
   ret = SetParent(Form2.hWnd, Form1.hWnd) 
   Form2.Left = 0 
   Form2.Top = 0
   Form2.Show 
   doshow = True
      Else
         Form2.Hide
     doshow = False
   End If
End Sub


- Comprobar si el programa ya está en ejecución


Crear un nuevo proyecto e insertar el siguiente código:

Private Sub Form_Load()
    If App.PrevInstance Then
        Msg = App.EXEName & ".EXE" & " ya está en ejecución"
        MsgBox Msg, 16, "Aplicación."
        End
    End If
End Sub

- Hallar el nombre del PC en Windows 95 o Windows NT


Cree un nuevo proyecto e inserte dos ButtonClick y un Módulo:

Pegue el siguiente código en el formulario:

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim nPC as String
    Dim buffer As String
    Dim estado As Long
    buffer = String$(255, " ")
    estado = GetComputerName(buffer, 255)
    If estado <> 0 Then
        nPC = Left(buffer, 255)
    End If
    MsgBox "Nombre del PC: " & nPC
End Sub

Private Sub Command2_Click()
    Unload Form1
End Sub

Pegue el siguiente código en el módulo:

Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA"
(ByVal lpBuffer As String, nSize As Long) As Long

- Eliminar el sonido "Beep" cuando pulsamos Enter en un TextBox


Crear un nuevo proyecto e insertar un TextBox:

Peguar el siguiente código en el formulario:

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Or KeyAscii = 9 Then KeyAscii = 0
End Sub


- Ocultar y mostrar el puntero del ratón


Crear un nuevo proyecto e insertar dos ButtonClick y un Módulo:

Pegue el siguiente código en el formulario:

Private Sub Command1_Click()
    result = ShowCursor(False)
End Sub

Private Sub Command2_Click()
    result = ShowCursor(True)
End Sub

Usar las teclas alternativas Alt+O para ocultarlo y Alt+M para mostrarlo.

Peguar el siguiente código en el módulo:

Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long


- Calcular el número de serie de un disco


Crear un nuevo proyecto e insertar el siguiente código en el formulario:

Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA"
(ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize
As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags
As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)

Private Sub Form_Load()
    Dim cad1 As String * 256
    Dim cad2 As String * 256
    Dim numSerie As Long
    Dim longitud As Long
    Dim flag As Long
    unidad = "C:\"
    Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)
    MsgBox "Numero de Serie de la unidad " & unidad & " = " & numSerie
End Sub


- 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

 


 

- Entrar en las Propiedades de Accesibilidad


1. Crear un nuevo formulario, Form1 por defecto
2. Añadir un boton al formulario "Command Button control"
3. Añadir el siguiente codigo a la propieded Clik del boton.

Private Sub Command1_Click()
X = Shell("Rundll32.exe shell32.dll,Control_RunDLL main.cpl @2")
End Sub

 

 

 

 

- Publicidad -

 

 
 

- Vótanos -

 

 

- Encuesta -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 -= Hackerss oNe =-

 
     
Hosted by www.Geocities.ws

Hosted by www.Geocities.ws

1