Sreenath Krishnakumar
Sreenath Krishnakumar

Reputation: 15

Dynamically created buttons with equal alignment

I am a newbie to this Delphi. I have been given an assignment that to create buttons dynamically. But the problem is that all buttons have to be aligned in a manner that it should fit inside the whole screen. i.e, if 10 buttons created the whole screen should be filled. Or if 9 is given 9 should be present and filled in the screen. Is it possible to do that? I tried and searched everywhere. But was helpless.

Please help me if its possible. A good example is also appreciated since I mentioned earlier I am really new to this. The code I did follows here.

procedure TfrmMovieList.PnlMovieClick(Sender: TObject);
begin
  for i := 0 to 9 do
  begin
    B := TButton.Create(Self);
    B.Caption := Format('Button %d', [i]);
    B.Parent := Panel1;
    B.Height := 23;
    B.Width := 100;
    B.Left := 10;
    B.Top := 10 + i * 25;
  end;
end;

Upvotes: 1

Views: 1542

Answers (1)

AlexSC
AlexSC

Reputation: 1943

This looks workable to me:

procedure TForm1.CreateButtons(aButtonsCount, aColCount: Integer; aDestParent: TWinControl);
var
  rowCount, row, col, itemWidth, itemHeight: Integer;
  item: TButton;
begin
  if aColCount>aButtonsCount then
    aColCount := aButtonsCount;
  rowCount := Ceil(aButtonsCount / aColCount);
  itemHeight := aDestParent.Height div rowCount;
  itemWidth := aDestParent.Width div aColCount;
  for row := 0 to rowCount-1 do begin
    for col := 0 to aColCount-1 do begin
      item := TButton.Create(Self);
      item.Caption := Format('Button %d', [(row*aColCount)+col+1]);
      item.Left := itemWidth*col;
      item.Top := itemHeight*row;
      item.Width := itemWidth;
      item.Height := itemHeight;
      item.Parent := aDestParent;
      Dec(aButtonsCount);
      if aButtonsCount=0 then
        Break;
    end; // for cols
  end; // for rows
end;

An example of usage is:

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateButtons(10, 4, Panel1);
end;

The function Ceil requires the uses of unit Math.

The method receives the count of buttons and the numbers of columns to calculate the number of rows. It also receives the destination parent where the buttons will be located.

Upvotes: 2

Related Questions