cStatusBar

Clase para simular el control StatusBar

 

Publicado el 8/Jul/1998


Esta clase es una versi�n "muy" reducida, que simula el control StatusBar que incluye el Visual Basic en el OCX de los controles para Windows 95.
La raz�n de hacerlo es porque, despu�s de muchas comprobaciones, descubr� que ese control me daba error de automatizaci�n, as� que decid� crearme una clase simple para poder usarlo casi de la misma forma. Realmente s�lo lo he usado en una aplicaci�n: la de mensajer�a interna, que pronto pondr� en l�nea la versi�n "nueva", con icono en la barra de tareas y esas chorradillas.

Adem�s de esta clase, tambi�n tengo otra que la uso para simular las solapas (Tabs), ya que el control antes mencionado tambi�n lo incluye y claro, al estar juntos, no me permit�a usarlo, aunque esa "clase de solapas" ya la he usado antes, (y publicado en el Sentinel95), aunque ahora la tengo hecha en una clase... un d�a de estos la publicar�.

Ya te comento que no es ninguna virguer�a, pero que lo hice para no tener que cambiar demasiado c�digo y por supuesto tiene muchas cosas que se pueden mejorar y sobre todo cosas que a�adir para mejorar "la prestaci�n".
Pero por ahora estoy es lo que hay... as� que...

Este es el c�digo de las clases: (despu�s te indicar� c�mo usarla)

'
'------------------------------------------------------------------
'cPanel                                                 (31/Mar/98)
'
'Descripci�n:
'   Clase para simular los paneles de un StatusBar
'
'�Guillermo 'guille' Som, 1998
'------------------------------------------------------------------
Option Explicit

Private mControl As Control
Private mKey As String
Private mText As Variant


Public Property Get Text() As Variant
    Text = mText
End Property

Public Property Let Text(ByVal NewText As Variant)
    mText = " " & NewText
    mControl = mText
End Property

Public Property Get Key() As String
    Key = mKey
End Property

Public Property Let Key(ByVal NewKey As String)
    Static Asignada As Boolean
    
    If Not Asignada Then
        Asignada = True
        mKey = NewKey
    End If
End Property

Public Property Get Control() As Control
    Set Control = mControl
End Property

Public Property Set Control(NewControl As Control)
    Set mControl = NewControl
End Property

Public Property Get Caption() As Variant
    Caption = mText
End Property

Public Property Let Caption(ByVal NewCaption As Variant)
    'Esta propiedad es para que haya tambi�n un caption
    Text = NewCaption
End Property
'
'------------------------------------------------------------------
'cStatusBar                                             (31/Mar/98)
'
'Descripci�n:
'   Clase para simular el control StatusBar
'   Se tiene que usar tambi�n la clase cPanel
'
'�Guillermo 'guille' Som, 1998
'------------------------------------------------------------------
Option Explicit

Dim colPaneles As New Collection


Public Function Panels(Optional Index As Variant) As Variant
    'Devolver� / asignar� el caption de una de las etiquetas
    Dim tPanel As New cPanel
    
    On Local Error Resume Next
    
    If IsMissing(Index) Then
        Set Panels = colPaneles
    Else
        Set Panels = colPaneles(Index)
        If Err Then
            Set tPanel = Nothing
            tPanel.Key = Index
            colPaneles.Add tPanel, tPanel.Key
            Set Panels = tPanel
        End If
    End If
    Set tPanel = Nothing
    
    Err = 0
End Function

Public Sub Nuevo(ByVal sKey As String, unControl As Control)
    'A�ade un nuevo Panel
    Dim tPanel As New cPanel
    
    With tPanel
        .Key = sKey
        Set .Control = unControl
        'Asigna al Text el valor por defecto de este control
        'Si es un Label, se asignar� el Caption
        'en caso de un TextBox ser� el Text...
        .Text = unControl
        colPaneles.Add tPanel, sKey
    End With
    
    Set tPanel = Nothing
End Sub

Public Sub Add(unControl As Control, ByVal sKey As String)
    'Este m�todo est� por compatibilidad
    'F�jate que se usa al rev�s que Nuevo:
    'Primero el Objeto y luego la Clave
    Nuevo sKey, unControl
End Sub

La forma de usarla es muy simple:
A�ade las clases cPanel y cStatusBar al proyecto.
A�ade un array de etiquetas o textboxes que har�n las veces del panel (realmente ser� donde se muestre el mensaje que quieras)

Declara una variable cStatusBar en el form en el que vayas a usarla:
Dim StatusBar1 As cStatusBar

En el Form_Load le das vida a la nueva variable, asign�ndola para que apunte a un nuevo objeto de este tipo:
Set StatusBar1 = New cStatusBar

A la hora de descargarse el formulario, en el Form_UnLoad hay que quitarla de la memoria:
Set StatusBar1 = Nothing

Para asignar los "paneles", se har� normalmente en el evento Load, usa cualquiera de las dos formas que se muestran a continuaci�n.
En este ejemplo se supone que el control que vamos a usar en el form para simular los paneles del StatusBar es :lblStatusBar, que ser� un array con los paneles que vamos a usar:

'
    With StatusBar1
        .Nuevo "Status", lblStatusBar(0)
        .Nuevo "Mensajes", lblStatusBar(1)
        '.Nuevo "Nuevos", lblStatusBar(2)
        'Tambi�n se permite
        .Add lblStatusBar(2), "Nuevos"
    End With

'
'Cuando quieras usarlo, por ejemplo para asignar un nuevo "contenido" en uno de los paneles:
'
StatusBar1.Panels("Status") = sItem

Como ves no tiene ninguna complicaci�n y tampoco hace mucho por ayudarnos, ya que tendr�s que "situarlas" manualmente en el sitio que quieras.
Normalemente suelo colocar las etiquetas en un pictureBox (u otro contenedor), le asigno la propiedad Align=Botton, para que se situe en la parte baja del formulario y en el evento Resize situo las etiquetas.
En este caso el contenedor es un PictureBox que se llama picStatus.

'Aqu� ya tengo calculados los tama�os y se ajustan autom�ticamente cuando se redimensiona
Private Sub picStatusBar_Resize()
    If WindowState <> vbMinimized Then
        'Posicionar los lblStatusBar 1 y 2
        lblStatusBar(2).Left = picStatusBar.ScaleWidth - 1140
        lblStatusBar(1).Left = lblStatusBar(2).Left - 1155
        lblStatusBar(0).Width = picStatusBar.ScaleWidth - 2370
    End If
End Sub

Espero que te pueda ser �til, en otra ocasi�n veremos c�mo usar y configurar la clase cSolapa (Tabs)

Nos vemos
Guillermo


ir al índice