Code:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;

Panel: TStatusPanel; const Rect: TRect);

begin

with statusbar1.Canvas do

begin

   Brush.Color := clRed;

   FillRect(Rect);

   TextOut(Rect.Left, Rect.Top, 'Панель '+IntToStr(Panel.Index));

end;

end;

 

 

Этот StatusBar позволит размещать на себе любые другие контролы.

Создаем новый компонент от StatusBar и првим код как внизу. Потом инсталлируем и все.

 

Статусбар, это стандартный элемент управления Windows и как все отображает шрифт, заданный в параметре clBtnText, который устанавливается через Панель управления. Поумолчанию этот цвет чёрный, но он может менятся в зависимоти пользовательской темы. StatusBar и связанные с ним панели имеют возможность самостоятельной перерисовки (owner-draw), позволяющей рисовать текст различными цветами. Для этого необходимо в TStatusBar.Panels установить свойство Style в OwnerDraw.

 

 

Вставить ProgressBar в StatusBar:

 

Вот эту функцию применять вместо стандартного Create

 

 

Я покажу как сделать так, чтобы строка состояния (Status Bar) показывала все всплывающие подсказки (Hint) элементов управления формы при нахождении курсора мыши в области компонента. Имеется пара решений данной задачи, но в любом случае вы должны создать код для каждой формы (пока я не знаю другого решения).

 

В строке состояния TStatusBar выводится только 127 символов.

Можно ли как-нибудь увеличить это число?

 

 

Предположим, у вас есть StatusBar с 4-мя панелями, плюс таймер. Тогда вы можете сделать:

Code:

{

To use this example, you need a TStatusBar and at least one Panel.

Then change the style of StatusBar1.Panels[0] to

psOwnerDraw and add the code below to the OnDrawPanel handler.

}

 

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;

  Panel: TStatusPanel; const Rect: TRect);

var

  SomeText: string;

begin

  if Panel = StatusBar1.Panels[0] then

  begin

    SomeText    := 'Hello!';

    Panel.Width := Trunc(StatusBar1.Canvas.TextWidth(SomeText) * 1.5);

    with StatusBar.Canvas do

     begin

      Brush.Color := clWhite;

      FillRect(Rect);

      Font.Name := 'Arial';

      Font.Color := clRed;

      Font.Style := Font.Style + [fsItalic, fsBold];

      TextRect(Rect, Rect.Left + 1, Rect.Top, SomeText);

    end;

  end;

end;

 

 

Code:

With StatusBar1.Panels[1] do

begin

Text := Edit1.Text;

Canvas.Font.Size := StatusBar1.Font.Size;

Width := Canvas.TextWidth(Text) + 10;

end;