В большинстве приложений информацию о работе программы выводят в строке состояния. Можно туда же поместить и 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 помещен в строку состояния.
|