Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как поместить ProgressBar в StatusBar


Автор: Vyacheslav 30.5.2002, 09:56
В FAQ по http://www.forum.vingrad.ru/cgi-bin/newforum/ikonboard.cgi?act=ST;f=32;t=1287 было показано решение как выполнить эту задачу. Я обычно поступаю несколько по другому.
ProgressBar просто кладется на форму в любом месте.Добавляем панели TStatusPanel(сколько нужно, минимум одну) в StatusBar.  Далее также в дизайн-режиме для панели TStatusPanel, в которую хотим вставить ProgressBar( в примере это будет первая слева панель) устанавливаем свойство Style в  psOwnerDraw.
В конструкторе добавляем строку
Код

//конструктор
_fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)

{
....
   ProgressBar->Parent = StatusBar;
....
}


Определяем обработчик  OnDrawPanel для  StatusBar

Код

void __fastcall TForm1::StatusBarDrawPanel(TStatusBar *StatusBar,
     TStatusPanel *Panel, const TRect &Rect)
{
   if (Panel->Index == 0)
   {
     ProgressBar->SetBounds(Rect.Left - 1, Rect.Top - 1,  Rect.Right - Rect.Left + 2, Rect.Bottom - Rect.Top + 2 );
   }
}

Далее ProgressBar используем в обычном порядке
Как видим набиваемый код минимален.
Можно создать ProgressBar и в рантайме. Соответственно изменится и конструктор

ProgressBar = new TProgressBar(this);
ProgressBar->Parent = StatusBar;
ProgressBar->Visible = true;

далее все также

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)