I don't know of an easy way to do this using the Form Designer (though there may well be one).
You can achieve this in code thus:
unit LayoutButtons;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, StdCtrls;
type
TBtnRange = 1..6;
TBArray = array[TBtnRange] of TButton;
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FButtons: TBArray;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
hw: TPoint;
function NewButton(anIdx: integer): TButton;
var
r, c: integer;
begin
r:=(anIdx-1) div 3;
c:=(anIdx-1) mod 3;
Result:=TButton.Create(Self);
Result.AutoSize:=False;
Result.Name:=Format('FButtons_%d',[anIdx]);
Result.SetBounds(c*hw.x-(c+1), r*hw.y-(r+1), hw.x, hw.y);
Result.Parent:=Self;
end;
function GetHW: TPoint;
begin
Result.x:=ClientWidth div 3;
Result.y:=ClientHeight div 2;
end;
begin
hw:=GetHW;
for i in TBtnRange do
FButtons[i]:=NewButton(i);
Height:=FButtons[High(TBtnRange)].BoundsRect.Bottom;
Width:=FButtons[High(TBtnRange)].BoundsRect.Right;
end;
end.