How to create an array of buttons at runtime (Views: 27)
Problem/Question/Abstract: How to create an array of buttons at runtime Answer: Here is a unit that creates a row of buttons and a label at run time and displays which button is clicked on. 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; procedure TForm1.FormCreate(Sender: TObject); var loop: integer; begin {Size the form to fit all the components in} ClientWidth := (b * 60) + 10; ClientHeight := 65; 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 begin Parent := self; Caption := IntToStr(loop); Width := 50; Height := 25; Top := 30; Left := (loop * 60) + 10; Tag := loop; {Used to tell which button is pressed} OnClick := ButtonClick; 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. |