Estoy arreglando una aplicación antigua que se basa en el código de Visual Basic 6. Existe el requisito de agregar una barra de estado en la parte inferior del formulario. Mi barra de estado es la siguiente:
Puedo mostrar el texto correctamente pero también quiero agregar un color de fondo rojo. Descubrí que no existe tal opción para el Panel StatusBar. Cuando abro la propiedad de StatusBar, se muestra a continuación:
Descubrí que puedo agregar una imagen. Pero cuando agregué la imagen en color rojo, el texto estará cubierto por la imagen. Estoy atascado. Cualquier consejo será útil. ¡¡Gracias!!
ACTUALIZAR
Simplemente utilicé el código del enlace @ Étienne Laneville provisto en el comentario . El color de fondo agregado y también el texto agregado.
Aquí está mi código para llamar a la función:
PanelText StatusBar1, 9, "ATM (" & cntATM & ")", QBColor(12), QBColor(0)
Pero la posición del texto es la siguiente:
Tengo que hacer el texto a continuación para posicionarlo, porque esta tarea era urgente por ahora y no tengo tiempo para investigar más.
PanelText StatusBar1, 9, "ATM (" & cntATM & ") ", QBColor(12), QBColor(0)
A continuación se muestra mi salida:
ACTUALIZACIÓN 2
Probé el código proporcionado por Brian M Stafford. Pero obtuve los mismos resultados. El texto todavía no está en el centro (ni a la izquierda). A continuación están mi código y captura de pantalla de la barra de estado:
La función:
Private Sub PanelText(sb As StatusBar, pic As PictureBox, Index As Long, aText As String, bkColor As Long, _
fgColor As Long, lAlign As Integer)
Dim R As RECT
SendMessage sb.hWnd, SB_GETRECT, Index - 1, R
With pic
Set .Font = sb.Font
.Move 0, 0, (R.Right - R.Left + 2) * Screen.TwipsPerPixelX, (R.Bottom - R.Top) * Screen.TwipsPerPixelY
.BackColor = bkColor
.Cls
.ForeColor = fgColor
.CurrentY = (.Height - .TextHeight(aText)) \ 2
Select Case lAlign
Case 0 ' Left Justified
.CurrentX = 0
Case 1 ' Right Justified
.CurrentX = .Width - .TextWidth(aText) - Screen.TwipsPerPixelX * 2
Case 2 ' Centered
.CurrentX = (.Width - .TextWidth(aText)) \ 2
End Select
pic.Print aText
sb.Panels(Index).Text = aText
sb.Panels(Index).Picture = .Image
End With
End Sub
La API:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const WM_USER = &H400
Private Const SB_GETRECT = (WM_USER + 10)
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" (ByVal hWnd As _
Long, ByVal wMsg As Long, ByVal wParam As _
Long, lParam As Any) As Long
Llamando a la función:
PanelText StatusBar1, picPanel, 9, "Test1", vbRed, vbBlack, 2
PanelText StatusBar1, picPanel, 10, "DFM (" & cntDFM & ")", vbRed, vbBlack, 2
No se por que. Es posible que me haya perdido algo o que haya establecido algunos valores de propiedad en StatusBar1 o picPanel (PictureBox).
SOLUCIÓN
Configuré pictureBox, propiedad AutoRedraw = True, y StatusBar, Panel, Alignment = sbrLeft. Y todo funciona.
Respuestas:
Aquí está el código al que se hace referencia en un comentario con algunas mejoras. Una mejora es un parámetro para especificar la alineación del texto:
Aquí está el código API de Windows:
El código se usa así:
fuente