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 SubLa 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 cStatusBarEn 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 cStatusBarA la hora de descargarse el formulario, en el Form_UnLoad hay que quitarla de la memoria:
Set StatusBar1 = NothingPara 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") = sItemComo 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 SubEspero que te pueda ser útil, en otra ocasión veremos cómo usar y configurar la clase cSolapa (Tabs)
Nos vemos
Guillermo