Chcete umístit ProgressBar do StatusBaru tak, jako to je třeba v Internet Exploreru?
Pokud ano, čtete ten správný návod. Pokud nevíte, co je ProgressBar, tak je to komponenta, která ukazuje stav načítání, kopírování&helli; Tak to je jen tak něco málo na úvod. Teď už přejdeme k samotnému programování.
Na formulář (je jedno, jestli SDI nebo MDI) vložte 1× ProgressBar a 1× Statusbar. Nyní již budem jen psát zdrojový kód.
Do deklarační části vložte následující řádky:
Private Declare Function SetParent Lib "user32.dll" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
'SendMessage
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) 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)
Do procedury Form_Load() napište následující kód.
Dim rectPanel As RECT
'1 - je druhý panel StatusBaru (index se počítá od 0)
SendMessage StatusBar1.hWnd, SB_GETRECT, 1, rectPanel
'souřadnice se přepočítají z pixelů na twipy
rectPanel.Top = (rectPanel.Top * Screen.TwipsPerPixelY)
rectPanel.Left = (rectPanel.Left * Screen.TwipsPerPixelX)
rectPanel.Bottom = (rectPanel.Bottom * Screen.TwipsPerPixelY) - rectPanel.Top
rectPanel.Right = (rectPanel.Right * Screen.TwipsPerPixelX) - rectPanel.Left
'přesune ProgressBar do panelu Statusbaru
SetParent ProgressBar1.hWnd, StatusBar1.hWnd
ProgressBar1.Move rectPanel.Left, rectPanel.Top, rectPanel.Right, rectPanel.Bottom
A to je celé. Výsledek můžete vidět níže.