Estou corrigindo um aplicativo antigo, construído com base no código do Visual Basic 6. Há um requisito para adicionar uma barra de status na parte inferior do formulário. Minha barra de status é a seguinte:
Posso mostrar o texto corretamente, mas também quero adicionar uma cor de fundo vermelha. Descobri que não existe essa opção para o Painel StatusBar. Quando abro a propriedade StatusBar, ela é mostrada abaixo:
Eu descobri que posso adicionar uma foto. Mas quando adicionei a figura em vermelho, o texto será coberto pela figura. Estou preso. Qualquer conselho será útil. Obrigado!!
ATUALIZAR
Simplesmente usei o código no link @ Étienne Laneville fornecido no comentário . A cor de fundo adicionada e também o texto adicionado.
Aqui está o meu código para chamar a função:
PanelText StatusBar1, 9, "ATM (" & cntATM & ")", QBColor(12), QBColor(0)
Mas a posição do texto é como abaixo:
Eu tenho que fazer o texto como abaixo para posicioná-lo, porque esta tarefa era urgente por enquanto e não tenho tempo para investigar mais.
PanelText StatusBar1, 9, "ATM (" & cntATM & ") ", QBColor(12), QBColor(0)
Abaixo está a minha saída:
ATUALIZAÇÃO 2
Eu tentei o código fornecido por Brian M Stafford. Mas obtive os mesmos resultados. O texto ainda não está no centro (ou à esquerda). Abaixo estão o meu código e a captura de tela da barra de status:
A função:
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
A 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
Chamando a função:
PanelText StatusBar1, picPanel, 9, "Test1", vbRed, vbBlack, 2
PanelText StatusBar1, picPanel, 10, "DFM (" & cntDFM & ")", vbRed, vbBlack, 2
Eu não sei porque. Pode ser que eu tenha perdido algo ou posso definir alguns valores de propriedade para StatusBar1 ou picPanel (PictureBox).
SOLUÇÃO
Defino pictureBox, propriedade AutoRedraw = True e StatusBar, Panel, Alignment = sbrLeft. E tudo funciona.
Respostas:
Aqui está o código mencionado em um comentário com alguns aprimoramentos. Um aprimoramento é um parâmetro para especificar o alinhamento do texto:
Aqui está o código da API do Windows:
O código é então usado assim:
fonte