Rubrik: Controls · StatusBar/ProgressBar | VB-Versionen: VB4, VB5, VB6 | 14.07.03 |
ProgressBar in der StatusBar Wie bekommt man eine ProgressBar in eine StatusBar? Die Lösung finden Sie hier. | ||
Autor: Dietmar G. Bayer | Bewertung: | Views: 18.607 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
"Wie bekomme ich einen Progressbar in den Statusbar?"
Hat es Sie auch schon öfters gestört, eine ProgressBar immer auf die Hauptform zu setzen oder gar ein eigenes Fenster anzuzeigen, nur um den User darüber zu informieren, dass ein Vorgang einmal etwas länger dauert?
Damit ist ab sofort Schluß!
Sollten Sie sowieso schon eine StatusBar in Ihrer Form verwenden, warum dann nicht den Fortschrittsbalken direkt in der StatusBar anzeigen? Der Internet-Explorer beispielsweise macht das ja genauso! Und was der IE kann, können wir schon lange
Nachfolgender Tipp gibt einer ProgressBar ein neues zuhause - und zwar in einem beliebigen Panel (Bereich) der StatusBar.
Fügen Sie hierzu folgenden Code in ein MODUL ein:
Option Explicit ' Benötigte API-Deklarationen Private Declare Function SetParent Lib "user32" ( _ ByVal hWndChild As Long, _ ByVal hWndNewParent As Long) As Long Private Declare Function SendMessageAny Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal msg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Declare Function MoveWindow Lib "user32" _ Alias "MoveWindow" ( _ ByVal hwnd As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal bRepaint As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const WM_USER As Long = &H400 Private Const SB_GETRECT As Long = (WM_USER + 10)
' ProgBar in StatusBar setzen Public Sub SetProgressBarToStatusBar( _ ByVal hWnd_PBar As Long, _ ByVal hWnd_SBar As Long, _ ByVal nPanel As Long) Dim R As RECT ' Ausmaße des Panel ermitteln SendMessageAny hwnd_SBar, SB_GETRECT, nPanel - 1, R ' ProgressBar ein neues zuhause geben... SetParent hwnd_PBar, hWnd_SBar ' ... und korrekt positionieren MoveWindow hwnd_PBar, R.Left, R.Top, R.Right - R.Left, _ R.Bottom - R.Top, True End Sub
So, das war's dann auch schon. Ein kleines Beispiel gefällig? Kein Problem
Setzen Sie auf die Form eine StatusBar mit mehreren Panels, eine ProgressBar, sowie einen Timer und einen CommandButton. Beim Klick auf den CommandButton wird der der Fortschritt dann in der StatusBar angezeigt.
Private Sub Form_Load() ' ProgressBar unsichtbar machen und in die ' StatusBar setzen (2. Panel) With ProgressBar1 .Visible = False .Value = 0 SetProgressBarToStatusBar .hWnd, StatusBar1.hWnd, 2 End With End Sub
Private Sub Command1_Click() ' ProgressBar sichtbar machen ProgressBar1.Visible = True ' Timer initialisieren Timer1.Interval = 25 Timer1.Enabled = True ' CommandButton deaktivieren Command1.Enabled = False End Sub
Private Sub Timer1_Timer() ' Fortschritt anzeigen With ProgressBar1 If .Value < .Max Then .Value = .Value + 1 Else Timer1.Enabled = False Command1.Enabled = True ProgressBar1.Visible = False End If End With End Sub