Owner Draw Status Panels

//----------------------------------------------
// Demo of how to use owner-draw status panels
//----------------------------------------------
unit SBUnit;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;
type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
const
// Types of text alignments corresponding to WinAPI types
 Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
 R        : TRect;
begin
 R     := Rect;
// R.Top := R.Top +1;        // simple hack
 With StatusBar.Canvas do
  begin
  Pen.Color   := clGreen;   // border color
  Brush.Color := clGreen;   // panel color
// Draw panel
  Rectangle(Rect.Left+1, Rect.Top+1, Rect.Right-1, Rect.Bottom-1);
{
  Font properties:
  ----------------
  changing font color only affects owner-draw panels!
}
  DrawText(Handle, PChar(Panel.Text), -1, R, Alignments[Panel.Alignment]);
 end; {with StatusBar.Canvas}
end;
end.