Внешний вид сайта:

Как поместить ProgressBar в строку состояния

В большинстве приложений информацию о работе программы выводят в строке состояния. Можно туда же поместить и ProgressBar. Заодно и поменяем цвет индикатора.

ProgressBar в строке состояния (StatusBar)

Поместите TStatusBar на форму, добавьте туда две панели. В первой будет содержаться текст, а вторую мы будем изменять в процессе выполнения программы. TProgressBar также поместите на форму в любое место, т.к. при выполнении программы, она будет перемещена в строку состояния. Установите свойство Position, чтобы просмотреть, как будет выглядеть приложение в работе.

Вот код с комментариями:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, CommCtrl, ComCtrls;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  pbStyle: integer;
begin
  // Устанавливаем цвет фона ProgressBar
  ProgressBar1.Brush.Color:= $00DDF9F8;
  // Устанавливаем цвет индикатора
  SendMessage(ProgressBar1.Handle,
              PBM_SETBARCOLOR, 0, $00DDA04F);


   // разрешаем прорисовать вторую панель строки состояния
  StatusBar1.Panels[1].Style := psOwnerDraw;
  // помещаем ProgressBar внутрь панели
  ProgressBar1.Parent := StatusBar1;
  // удаляем границы ProgressBar
  pbStyle := GetWindowLong(ProgressBar1.Handle,
                                    GWL_EXSTYLE);
  pbStyle := pbStyle
                      - WS_EX_STATICEDGE;
  SetWindowLong(ProgressBar1.Handle,
                GWL_EXSTYLE,
                pbStyle);
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  if Panel = StatusBar.Panels[1] then
  with ProgressBar1 do begin
    Top := Rect.Top;
    Left := Rect.Left;
    Width := Rect.Right - Rect.Left - 15;
    Height := Rect.Bottom - Rect.Top;
  end;
end;

end.

ProgressBar помещен в строку состояния.

Комментарии

Нет комментариев. Ваш будет первым!