Codigos Fuente

|


Preguntar

|


Comunicaciones

|


Tutoriales

|


Contactenos

 


  Buscador del Site  

 

 Se Recomienda Resolución de 800x600 pixels


 

1ra PARTE

9.-Scroll horizontal para un List Box usando SendMessage

-------------------------------------------------------------------------------

Como poner una barra de scroll horizontal en un List Box.

"Truco" tomado de Microsoft Knowledge Base Articles.

How to Add a Horizontal Scroll Bar to Visual Basic List Box; Article ID: Q80190

Función: SendMessage

--------------------------------------------------------------------------------

'Declaraciones de las funciones para 16 y 32 bits

'Para 16 bits (VB3 y VB4)

Declare Function SendMessage Lib "user" (ByVal hWnd%, ByVal wMsg%, ByVal wParam%, ByVal lParam&) As Integer

'

'Para 32 bits usar:

'Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

'

'

'Poner en Form_Activate

Const LB_SETHORIZONTALEXTENT = &H400 + 21

Const NULO = &O0

Dim ListhWnd As Integer  'Handle del List Box

Dim ListLen As Integer   'Ancho del List Box

Dim iTmp As Integer      'Para el valor devuelto por SendMessage

Dim ScaleTmp As Integer  'Valor anterior de ScaleMode

 

ScaleTmp = ScaleMode

ScaleMode = 3            'wParam is in PIXEL(3)

ListhWnd = List1.hWnd

ListLen = 32767          'TextWidth(String$(256, "A"))

iTmp = SendMessage(ListhWnd, LB_SETHORIZONTALEXTENT, ListLen, NULO)

ScaleMode = ScaleTmp     'Restablecer el valor anterior de ScaleMode

10.-TextBox con 64 KB en lugar de 32 KB

---------------------------------------------------------------------

Usando SendMessage del Api de Windows, poder tener text-box con 64 KB

en lugar de los 32 que admite Visual Basic.

---------------------------------------------------------------------

'Declaración de la función API

Declare Function sendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long

'

'Para 32 bits usar:

'Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

'

'Declaración de las constantes

Global Const WM_USER = &H400

Global Const EM_LIMITTEXT = WM_USER + 21

'En el Form_Load del text-box:

Dim LTmp as long

LTmp=SendMessage(Text1.hWnd,EM_LIMITTEXT,0,byval 0&)

11.-Comprobar si un programa cargado con Shell está ejecutandose

----------------------------------------------------------------------

Por ser extenso para un "simple" truco, los ejemplos están comprimidos

También se muestra como asignar el icono de un programa a un picture

Hay un fichero para VB4 (16 y 32 bits) y otro para VB3

----------------------------------------------------------------------

La idea básica es:

1.- Cargar el programa usando Shell

2.- Comprobar si aún está activo (bucle)

3.- Continuar el programa principal una vez finalizado el programa cargado con Shell

Las funciones del API de Windows utilizadas son:

    Para extraer el icono del programa:

    ExtractIcon

    GetClassWord

    DrawIcon

    Para comprobar las ventanas activas:

    GetWindow

    GetWindowText

    GetWindowTextLength

    IsWindowVisible

12.- Catálogo de CD's musicales

Ejemplo para leer el volumen de un disco, esta función se puede usar para ¡catalogar los CD's musicales!

Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Dim lVSN As Long, n As Long, s1 As String, s2 As String
s1=String$(255,Chr$(0))
s2=String$(255,Chr$(0))
l= GetVolumeInformation("unidad", s1, Len(s1), lVSN, 0, 0, s2, Len(s2))
'lVSN tendrá el valor del Volume Serial Number (número de serie del volumen)

Si "unidad" es el CD-ROM y tenemos un disco de música, podemos usar el VSN para hacer un catálogo de CD's ya que cada CD tiene un número diferente.

Para comprobar si es un CD-ROM (o CD-musical):

' Valores de retorno de GetDriveType

Public Const DRIVE_REMOVABLE = 2

Public Const DRIVE_FIXED = 3

Public Const DRIVE_REMOTE = 4

Public Const DRIVE_CDROM = 5

Public Const DRIVE_RAMDISK = 6

Declare Function GetDriveType Lib "Kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Dim lDrive As Long

Dim szRoot As String

szRoot="D:\" 'Poner aquí la unidad del CD-ROM o la que queramos comprobar

lDrive= GetDriveType(szRoot)

If lDrive = DRIVE_CDROM Then

    'Es un CD-ROM/Compact-Disc

End If

13.- Seleccionar el texto al entrar en un TextBox

Este truco, creo que es conocido por todos, pero lo "recuerdo" por si hay alguno no lo sabe...

'Para un control

Private Sub Text1_GotFocus()

                Text1.SelStart = 0

                Text1.SelLength = Len(Text1)

End Sub

 

'Para un array

Private Sub Text1_GotFocus(Index As Integer)

                Text1(Index).SelStart = 0

                Text1(Index).SelLength = Len(Text1(Index))

End Sub

14.- Mostrar la posición del cursor en un TextBox

Este truco, muestra la posición actual del cursor y la longitud total del TextBox. Por supuesto el tamaño máximo permitido, debemos asignarlo a Text1.MaxLength, yo lo uso en mis programas, para saber cuando tengo que empezar a abreviar lo que estoy escribiendo, no siempre se dispone de todo el espacio que uno quiere, sobre todo cuando no quieres que las bases de datos se hagan enormes!

'Se puede cambiar StatusBar por cualquier control que nos muestre la información...

Private Sub Text1_Click()

        miForm!StatusBar1.Panels("Posic").Text = " Pos: " & Text1.SelStart + 1 _

                 & "/" & Text1.MaxLength

End Sub

 

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)

        miForm!StatusBar1.Panels("Posic").Text = " Pos: " & Text1.SelStart + 1 _

                & "/" & Text1.MaxLength

End Sub

15.- Refrescar el contenido de un control con DoEvents

¿Cuantas veces has asignado a un Label un nuevo Caption y no lo ha mostrado?, prueba a poner DoEvents después de la asignación y verás como se muestra enseguida.

Puedes usar Sleep 0& en lugar de DoEvents.

  16.- Mostrar el texto de un CheckBox seleccionado cuando está marcado

Bueno, esto no es realmente un truco, pero podría serlo.
Cuando seleccionamos una opción de un CheckBox, algunas veces, nos puede interesar que el texto se quede "marcado".
Por ejemplo, si quisieramos hacer un list box al estilo del que viene con las FM 2.0 de Microsoft. Y que seguramente estará (o ya está?) en VB5

El truco consiste en cambiar el color del checkbox cuando este está seleccionado.

Private Sub Check1_Click()

     If Check1 Then

        Check1.ForeColor = colForeSelect

        Check1.BackColor = colBackSelect

    Else

        Check1.ForeColor = colForeNormal

        Check1.BackColor = colBackNormal

    End If

End Sub

Las variables colForeSelect, colBackSelect, colForeNormal, colBackNormal, deben estar definidas con los colores que queramos usar. Por ejemplo:

Dim colBackNormal As Long

Dim colForeNormal As Long

Dim colBackSelect As Long

Dim colForeSelect As Long

 

colBackNormal = Check1.BackColor

colForeNormal = QBColor(0)  'Negro

colBackSelect = QBColor(1)   'Azul

colForeSelect = QBColor(15)  'Blanco brillante

17.- Crear una lista de CheckBox, ChkList

Este tipo de control existe en VB5 pero no en los anteriores, salvo que sea en un VBX/OCX externo.
De lo que se trata es de simular un ListBox, pero en lugar de usar sólo un texto como contenido, se usa un CheckBox. En los listados que se acompañan, hay también un ejemplo de cómo crear un panel deslizable (Picture con Scroll). Para que al mover el scroll vertical u horizontal, se desplace el contenido del CheckList, realmente esta es "la madre del cordero". También he creado un Picture dimensionable, usando el API de Windows, para poder cambiar "manualmente" el tamaño del contenedor del ChkList en tiempo de ejecución.

18.- Usa tu computadora para ganar dinero fácil y rápido...

De nuevo Joe LeVasseur... La rutina es para saber si puedes ganar dinero rápido... sin hacer nada.

Public Function Dinero_Rapido() As Boolean

    Dim Tonto

    Dim No_Quiere_Trabajar

    If No_Quiere_Trabajar And Tonto Then

                Dinero_Rapido = True

    Else

                Dinero_Rapido = False

                Tonto = False

    End If

End Function

 

Private Sub Command1_Click()

    Print Dinero_Rapido

End Sub

 'Pruebalo, siempre tiene el mismo resultado.

Bueno, como comprenderás, se trata de una broma. Esta "rutina" fue la respuesta de Joe a Jorge E. Mora en las news, a la propuesta de éste último para ganar $$$$$ DINERO RAPIDO $$$$$$
Te prometo que el próximo truco será de "verdad."

19.- Otra forma de usar VScroll y HScroll...

En realidad es comentar que si al asignar los valores Mínimos y Máximos de estos controles de manera que el valor Máximo sea inferior al Mínimo, se desplazarán al revés.
Cuando se usa de la forma habitual, al pulsar en la flecha superior del VScroll, el valor disminuye.
De esta otra forma, al pulsar arriba, se incrementa

 

 


©1998-2001 FMC Webs® Todos los derechos Reservados. Ferraro Mauro - San Nicolás - Argentina

El Codigo del Mes

Aqui le mostraremos el Codigo Fuente del Mes, Votalo Ya!!!

Preguntar

Dudas

Trucos

API de windows

Tutoriales

Trucos

Api de Windows

Bajate el manual de VB

Contactenos

Enviar Codigos Fuente

Links y Banners

Publicite en nuestro Site

Pone Tu link Gratis!!!

Crea tu Web

Redirecciona tu Pagina Gratis!!!

Votanos en La web del Programador

Sugerencias