[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    {

    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.

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]