Contributor: D.F. HARTLEY

{

Here is a unit that creates a row of buttons and a label at run time and
displays which button is clicked on. Thanks go to a number of people who pushed
me in the right direction. Like all things in programing 'it's obvious when you
know how'!

All you need to do is start a new project, then paste all the code below
into Unit1.

-------------------------------------------------------------------------------------
}

unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

const
  b = 4;  {Total number of buttons to create}

var
  ButtonArray : Array[0..b-1] of TButton; {Set up an array of buttons}
  MessageBox: TLabel;                     {...and a label!}

procedure TForm1.FormCreate(Sender: TObject);
  var
    loop : integer;
begin
  ClientWidth:=(b*60)+10;               {Size the form to fit all the}
  ClientHeight:=65;                     {components in.}

  MessageBox:=TLabel.Create(Self);      {Create a label...}
  MessageBox.Parent:=Self;
  MessageBox.Align:=alTop;              {...set up it's properties...}
  MessageBox.Alignment:=taCenter;
  MessageBox.Caption:='Press a Button';

  for loop:= 0 to b-1 do                {Now create all the buttons}
      begin
        ButtonArray[loop]:=TButton.Create(Self);
        with ButtonArray[loop] do       {Note the use of the with command.}
          begin	                        {This lets you leave out the first}
            Parent  :=self;             {bit of the description and}
            Caption :=IntToStr(loop);   {(I think) makes the code easier}
            Width   :=50;               {to read.}
            Height  :=25;
            Top	    :=30;
            Left    :=(loop*60)+10;
            Tag	    :=loop;     	{Used to tell which button is pressed}
            OnClick :=ButtonClick;	{The important bit!}
          end;
      end;
end;

procedure TForm1.ButtonClick(Sender: TObject);
  var
    t : Integer;
begin
  t:=(Sender as TButton).Tag;		{Get the button number}
  MessageBox.Caption:='You pressed Button '+IntToStr(t);
end;

end.