16 Apr

Progressbar inside Button? No problem

It’s quite cool efect, but this is also effective way to save some space in your application GUI. Let’s place progressbar of some time-consuming function right into the button, which started this function.
Place Button and Progressbar components on a form and set Visible property of Progressbar to False. Now, use the following code to do the magic.

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ProgressBar1.Parent := Button1;
  ProgressBar1.Width := Button1.Width - 7;
  ProgressBar1.Height := Button1.Height - 7;
  ProgressBar1.Left := 3;
  ProgressBar1.Top := 3;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var i : byte;
begin
  Button1.Enabled := false;
  if ProgressBar1.Visible then Exit;
  ProgressBar1.Position := 0;
  ProgressBar1.Visible := True;
 
  //replace with real code-----------
  for i := 0 to 99 do
  begin
    Sleep(100);
    ProgressBar1.Position := ProgressBar1.Position + 1;
    Application.ProcessMessages;
  end;
  //---------------------------------
 
  ProgressBar1.Visible := False;
  Button1.Enabled := true;
end;
 
end.

When you press the Button, the Progressbar will be set to visible (disabling the button itself). When the time-consuming function is over, the button will be reenabled again and progressbar will be set to invisible state.

  • Digg
  • del.icio.us
  • Facebook
  • Technorati
  • Google
  • Live
  • YahooMyWeb

Leave a Reply

You must be logged in to post a comment.