Ich behebe eine alte Anwendung, die auf Visual Basic 6-Code aufbaut. Es ist erforderlich, dass am unteren Rand des Formulars eine Statusleiste hinzugefügt wird. Meine Statusleiste lautet wie folgt:
Ich kann den Text korrekt anzeigen, möchte aber auch eine rote Hintergrundfarbe hinzufügen. Ich habe herausgefunden, dass es für das StatusBar-Panel keine solche Option gibt. Wenn ich die Eigenschaft von StatusBar öffne, wird Folgendes angezeigt:
Ich habe herausgefunden, dass ich ein Bild hinzufügen kann. Aber wenn ich das rote Farbbild hinzugefügt habe, wird der Text vom Bild verdeckt. Ich stecke fest. Jeder Rat wird hilfreich sein. Vielen Dank!!
AKTUALISIEREN
Ich habe einfach den Code aus dem Link @ Étienne Laneville verwendet, der im Kommentar angegeben ist . Die Hintergrundfarbe hinzugefügt und auch der Text hinzugefügt.
Hier ist mein Code zum Aufrufen der Funktion:
PanelText StatusBar1, 9, "ATM (" & cntATM & ")", QBColor(12), QBColor(0)
Die Textposition ist jedoch wie folgt:
Ich muss den Text wie folgt gestalten, um ihn zu positionieren, da diese Aufgabe vorerst dringend war und ich keine Zeit habe, weitere Nachforschungen anzustellen.
PanelText StatusBar1, 9, "ATM (" & cntATM & ") ", QBColor(12), QBColor(0)
Unten ist meine Ausgabe:
UPDATE 2
Ich habe den Code von Brian M Stafford ausprobiert. Aber ich habe die gleichen Ergebnisse erzielt. Der Text befindet sich immer noch nicht in der Mitte (oder links). Unten sind mein Code und ein Screenshot der Statusleiste:
Die Funktion:
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
Die 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
Aufruf der Funktion:
PanelText StatusBar1, picPanel, 9, "Test1", vbRed, vbBlack, 2
PanelText StatusBar1, picPanel, 10, "DFM (" & cntDFM & ")", vbRed, vbBlack, 2
Keine Ahnung warum. Möglicherweise habe ich etwas verpasst oder einige Eigenschaftswerte für StatusBar1 oder picPanel (PictureBox) festgelegt.
LÖSUNG
Ich setze pictureBox, Eigenschaft AutoRedraw = True und StatusBar, Panel, Alignment = sbrLeft. Und alles funktioniert.