Размещение Progress Bar в панели строки состояния |
Автор Александр Бельбаков | |
21.12.2001 г. | |
Каждый из вас видел Progress Bar, помещённый в панель строки состояния (Status Bar), например в Internet Explorer или даже в самом Visual Basic такое есть. Я попытался сделать такое и сам, и создал удобную функцию, чтобы размещать Progess Bar.
Каждый из вас видел Progress Bar, помещённый в панель строки состояния (Status Bar), например в Internet Explorer или даже в самом Visual Basic такое есть. Я попытался сделать такое и сам, и создал удобную функцию, чтобы размещать Progess Bar. Для начала объявим пару API функций, первая будет устанавливать родителя дочернему окну, а вторая будет получать координаты определённой панели: Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Any) As Long Private Type RECT Private Const SB_GETRECT As Long = (WM_USER + 10) Обратите внимание, что параметр lParam функции SendMessage должен быть установлен как Any, чтобы передавать структуру. Теперь создадим и саму функцию (точнее процедуру) для размещения Progress Bar в панели строки состояния. У процедуры будет три параметра: PB - объект Progress Bar, SB - объект Status Bar и pIndex - номер панели. Private Sub ProgressToStatus(PB As ProgressBar, SB As StatusBar, pIndex As Integer) Dim TR As RECT 'объявляем структуру для получения координат панели SendMessage SB.hwnd, SB_GETRECT, pIndex, TR 'получаем координаты TR.Top = (TR.Top * Screen.TwipsPerPixelY) 'переводим координаты в твипы TR.Left = (TR.Left * Screen.TwipsPerPixelX) TR.Bottom = (TR.Bottom * Screen.TwipsPerPixelY) - TR.Top TR.Right = (TR.Right * Screen.TwipsPerPixelX) - TR.Left SetParent PB.hwnd, SB.hwnd 'устанавливаем Progress Bar дочерним к строке состояния PB.Move TR.Left + 15, TR.Top + 15, TR.Right - 30, TR.Bottom - 30 'перемещаем Progress Bar по полученным нами координатами. End Sub Вот всё и готово! Скачать пример |