statusbar

How to make statusbar with images..?

we can draw icon on statusbar using canvas, or assign from imagelist. for this example we use imagelist, so we need 3 images to put in to imagelist : green, yellow and red.

Now ,

create new application, add button, imageslist, timer and statusbar. Add 3 images into imagelist and then double click on statusbar

  • add new status panel
  • Click on the second status panel
  • Change the style from psText to psOwnerDraw
  • on  StatusBar1DrawPanel
  • Write this procedure :

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
// clear panel
StatusBar1.Canvas.Pen.Color := StatusBar1.Canvas.Brush.Color;
StatusBar1.Canvas.Rectangle(rect);
StatusBar1.Canvas.Pen.Color := clWindowText;
// draw icon and message
ImageList1.Draw(StatusBar1.Canvas, Rect.Left, Rect.Top, StatusIconIndex);
ImageList1.Draw(StatusBar1.Canvas, Rect.Left+15, Rect.Top, StatusIconIndex1);
ImageList1.Draw(StatusBar1.Canvas, Rect.Left+30, Rect.Top, StatusIconIndex2);
StatusBar1.Canvas.TextOut(Rect.left + 51, Rect.top+1, StatusText);
end;

Create procedure to send message on statusbar

procedure TForm1.showstatus(msg: string=”;  panel : Integer=0; busy: integer=0);
begin
if panel = 1 then begin
StatusText := msg;
case busy of
0:
begin

StatusIconIndex := 0;
StatusIconIndex1 := 0;
StatusIconIndex2 := 0;
end;
1:
begin

StatusIconIndex := 2;
StatusIconIndex1 := 1;
StatusIconIndex2 := 0;
end;
2:
begin

StatusIconIndex := 0;
StatusIconIndex1 :=2;
StatusIconIndex2 := 1;
end;
3:
begin
StatusIconIndex := 1;
StatusIconIndex1 := 0;
StatusIconIndex2 := 2;
end;
end;

end
else
StatusBar1.Panels[panel].Text := msg;
StatusBar1.Repaint;
end;

Complete source

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ImageList1: TImageList;
StatusBar1: TStatusBar;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
StatusBar2: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
procedure showstatus(msg: string=”;  panel : Integer=0; busy: integer=0);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
StatusText          : String = ‘Initializing…’;
StatusIconIndex     : Integer = 0;
StatusIconIndex1     : Integer = 0;
StatusIconIndex2     : Integer = 0;
i:byte;
implementation

{$R *.dfm}

procedure TForm1.showstatus(msg: string=”;  panel : Integer=0; busy: integer=0);
begin
if panel = 1 then begin
StatusText := msg;
case busy of
0:
begin
StatusIconIndex := 0;
StatusIconIndex1 := 0;
StatusIconIndex2 := 0;
end;
1:
begin
StatusIconIndex := 2;
StatusIconIndex1 := 1;
StatusIconIndex2 := 0;
end;
2:
begin
StatusIconIndex := 0;
StatusIconIndex1 :=2;
StatusIconIndex2 := 1;
end;
3:
begin
StatusIconIndex := 1;
StatusIconIndex1 := 0;
StatusIconIndex2 := 2;
end;
end;
end
else
StatusBar1.Panels[panel].Text := msg;
StatusBar1.Repaint;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showstatus(’Disconnect….’,1,1);
//StatusBar1.Repaint;
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
// clear panel
StatusBar1.Canvas.Pen.Color := StatusBar1.Canvas.Brush.Color;
StatusBar1.Canvas.Rectangle(rect);
StatusBar1.Canvas.Pen.Color := clWindowText;
// draw icon and message
ImageList1.Draw(StatusBar1.Canvas, Rect.Left, Rect.Top, StatusIconIndex);
ImageList1.Draw(StatusBar1.Canvas, Rect.Left+15, Rect.Top, StatusIconIndex1);
ImageList1.Draw(StatusBar1.Canvas, Rect.Left+30, Rect.Top, StatusIconIndex2);
StatusBar1.Canvas.TextOut(Rect.left + 51, Rect.top+1, StatusText);
end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
if i>3 then i:=0;

showstatus(’Connected….’,1,i);
inc(i);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
showstatus(’Connected….’,1,0);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
showstatus(’Connected….’,1,1);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
showstatus(’Connected….’,1,2);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
showstatus(’Connected….’,1,3);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if i>3 then i:=0;

showstatus(’Connected….’,1,i);
sleep(50);
inc(i);
end;

end.

Source download