Как поместить ProgressBar в строку состояния
Поместите 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 помещен в строку состояния.
Комментарии