Nov 222009
 

Control de Usuario para autocompletar un TextBox (o ventana «Edit»), a medida que vamos escribiendo en ella se carga una lista con todas las sugerencias, por ejemplo en una base de datos tenemos un listado de usuarios y tenemos que escribir en un TextBox un usuario, entonces al tipear «J» nos mostrará una lista que aparecerá debajo de la caja de texto con todos los usuarios que comiencen con dicha letra.
No sólo funciona con TextBox sino con toda ventana que utiliza la clase «Edit» dentro de ella.
Tiene tres formas de autocompletado «Append» autocompleta con la primer coincidencia, «Suggest» despliega una lista con todas las coincidencias encontradas y «AppendSuggest» las dos primeras juntas.
Traté de simular la lista tal como la que utiliza Windows con el api SHAutoComplete de la dll shlwapi.dll.

AutoCompletar TextBox

Nov 172009
 

Control de Usuario de que utiliza la clase SysMonthCal32 para crear un Calendario tal como que utiliza el Microsoft Windows Common Controls OCX de la versión 26.0, lo bueno de utilizar este UserControl es no tener que depender del OCX que muchas veces nos encontramos con que queremos utilizar este control y tenemos que recurrir si o si al OCX por sólo un control. Además este trae como ventaja que sí se le pueden aplicar los estilos visuales de Windows ya que con el OCX siempre mostraba el aspecto de Windows 98.
Las propiedades son prácticamente iguales al del M$ Common Controls excepto la de poder poner los días en negritas, no pude encontrar la forma de que funcione, también me trajo algunos problemas de compatibilidad en XP y en Vista. ya que al parecer la clase de por si tiene sus propias fallas.

SysMonthCal32

Nov 082009
 

Este es un Control de Usuario que utiliza la clase SysDateDimePick32 para crear un DTPicker tal como es el Microsoft Windows Common Controls OCX de la versión 26.0, éste sirve para seleccionar la fecha y hora, lo bueno de utilizar el UserControl es no tener que depender del OCX, muchas veces nos encontramos con que tenemos que trabajar con fechas y horas y tenemos que recurrir si o si al suite completa del OCX por sólo un control. Además este trae como ventaja que se pueden aplicar los estilos visuales de Windows ya que con el OCX siempre mostraba el aspecto de Windows 98. Junto al UC está lla clase clsSubClass, la cual sirve para capturar el evento Chage, no incluí ésta dentro del UC porque tengo como idea en un futuro crear una suite con varios de estos controles y sería conveniente mantenerlos por separado para no repetir código.

ucDateTime

Nov 032009
 

Este es un pequeño módulo para convertir archivos de imágenes de un formato a otro. Es muy sencillo de usar, sólo basta con llamar a la función ConvertFileImage, donde pasamos como primer parámetro el Path de la imágen de origen y como segundo parámetro el Path de destino más el nombre y extensión. El tercer parámetro es opcional y es un valor de 0 a 100 en los caso que la extensión de destino sea .JPG, para elegir la calidad de conversión.
También cuenta con una función llamada IsGdiPlusInstaled que es para averiguar si el PC que ejecute el programa tiene instalado GDI Plus.
No tiene muchas opciones ya que el módulo intenta ser algo pequeño para pocas pretensiones.
Las extensiones de de lectura soportadas son: «BMP, DIB, JPG, JPEG, JPE, JFIF, GIF, PNG, TIF, TIFF, EMF, WMF, ICO, CUR».
y las extensiones de conversión soportadas son: «BMP, DIB, JPG, JPEG, JPE, JFIF, GIF, PNG, TIF, TIFF».

* Edit 06/02/2010, corrección en el código, me confundí en poner PGN, por PGN.

Option Explicit
'--------------------------------------------
'Autor: Leandro Ascierto
'Web: www.leandroascierto.com.ar
'Date: 01/11/2009
'--------------------------------------------
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdipLoadImageFromFile Lib "GdiPlus.dll" (ByVal mFilename As Long, ByRef mImage As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long)
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
 
Private Type GUID
    Data1           As Long
    Data2           As Integer
    Data3           As Integer
    Data4(0 To 7)   As Byte
End Type
 
Private Type EncoderParameter
    GUID            As GUID
    NumberOfValues  As Long
    type            As Long
    Value           As Long
End Type
 
Private Type EncoderParameters
    Count           As Long
    Parameter(15)   As EncoderParameter
End Type
 
Private Type GdiplusStartupInput
    GdiplusVersion           As Long
    DebugEventCallback       As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs   As Long
End Type 
 
Const ImageCodecBMP = "{557CF400-1A04-11D3-9A73-0000F81EF32E}"
Const ImageCodecJPG = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
Const ImageCodecGIF = "{557CF402-1A04-11D3-9A73-0000F81EF32E}"
Const ImageCodecTIF = "{557CF405-1A04-11D3-9A73-0000F81EF32E}"
Const ImageCodecPNG = "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
 
Const EncoderQuality = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"
Const EncoderCompression = "{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}"
 
Const TiffCompressionNone = 6
Const EncoderParameterValueTypeLong = 4
 
Public Function ConvertFileImage(ByVal SrcPath As String, ByVal DestPath As String, Optional ByVal JPG_Quality As Long = 85) As Boolean
 
    On Error Resume Next
    Dim GDIsi As GdiplusStartupInput, gToken As Long, hBitmap As Long
    Dim tEncoder  As GUID
    Dim tParams     As EncoderParameters
    Dim sExt        As String
    Dim lPos        As Long
 
    DestPath = Trim(DestPath)
 
    lPos = InStrRev(DestPath, ".")
    If lPos Then
        sExt = UCase(Right(DestPath, Len(DestPath) - lPos))
    End If
 
    Select Case sExt
        Case "PNG"
            CLSIDFromString StrPtr(ImageCodecPNG), tEncoder 
        Case "TIF", "TIFF"
            CLSIDFromString StrPtr(ImageCodecTIF), tEncoder
 
            With tParams
                .Count = 1
                .Parameter(0).NumberOfValues = 1
                .Parameter(0).type = EncoderParameterValueTypeLong
                .Parameter(0).Value = VarPtr(TiffCompressionNone)
                CLSIDFromString StrPtr(EncoderCompression), .Parameter(0).GUID
            End With
 
        Case "BMP", "DIB"
            CLSIDFromString StrPtr(ImageCodecBMP), tEncoder
 
        Case "GIF"
            CLSIDFromString StrPtr(ImageCodecGIF), tEncoder
 
        Case "JPG", "JPEG", "JPE", "JFIF" 
            If JPG_Quality > 100 Then JPG_Quality = 100
            If JPG_Quality < 0 Then JPG_Quality = 0
 
            CLSIDFromString StrPtr(ImageCodecJPG), tEncoder
 
            With tParams
                .Count = 1
                .Parameter(0).NumberOfValues = 1
                .Parameter(0).type = EncoderParameterValueTypeLong
                .Parameter(0).Value = VarPtr(JPG_Quality)
                CLSIDFromString StrPtr(EncoderQuality), .Parameter(0).GUID
            End With
 
        Case Else
            Exit Function
 
    End Select
 
    GDIsi.GdiplusVersion = 1& 
    GdiplusStartup gToken, GDIsi
 
    If gToken Then
        If GdipLoadImageFromFile(StrPtr(SrcPath), hBitmap) = 0 Then 
            If GdipSaveImageToFile(hBitmap, StrPtr(DestPath), tEncoder,ByVal  tParams) = 0 Then
                ConvertFileImage = True
            End If 
            GdipDisposeImage hBitmap 
        End If 
        GdiplusShutdown gToken
    End If
 
End Function 
 
Public Function IsGdiPlusInstaled() As Boolean
    Dim hLib As Long
 
    hLib = LoadLibrary("gdiplus.dll")
    If hLib Then
        If GetProcAddress(hLib, "GdiplusStartup") Then
            IsGdiPlusInstaled = True
        End If
        FreeLibrary hLib
    End If
 
End Function

Nov 022009
 

Módulo bas con una función para obtener el PageRank de Google. Para los que no están muy al tanto de que se trata el PageRank, es un valor numérico de cero  a diez, que utiliza Google para marcar la importancia de una página web. Si tienen la barra Google instalada en su navegador podrán ver un botón donde figura una pequeña barra de progreso color verde.
Este código lo traduje de una fuente en PHP por lo que me dio algo de trabajo con algunas funciones propias del lenguaje.

Nota: este modulo a quedado obsoleto ya que Google no ofrece mas este servicio.

Insertar imágenes png en un ImageList