{下面是给楼主重新整理的代码(以创建Button为例)}(* 初始创建显示时并不一定是每行5个,请楼主运行后调整Form的大小看效果*)const iHtoH = 20; //行间距 iWtoW = 10; //列间距 iWidth = 80; //按钮宽度 var iPerLine : integer;//每行个数 BtnArr : array[1..10] of TButton;procedure TForm1.FormCreate(Sender: TObject); var I : integer; begin iPerLine := Self.Width div (iWidth+iWtoW); for I := 1 to 10 do begin BtnArr[I] := TButton.Create(Self); with BtnArr[I] do begin Name := 'Btn' + InttoStr(I); Parent := Self; Caption := Name; Top := iHtoH + (30+iHtoH) * (I div iPerLine - integer((I mod iPerLine)=0)); Left := iWtoW + (iWidth+iWtoW) * ((I-1) mod iPerLine); Show; end; end; end;procedure TForm1.FormResize(Sender: TObject); var I : integer; begin iPerLine := Self.Width div (iWidth+iWtoW); for I := 1 to 10 do with BtnArr[I] do begin Top := iHtoH + (30+iHtoH) * (I div iPerLine - integer((I mod iPerLine)=0)); Left := iWtoW + (iWidth+iWtoW) * ((I-1) mod iPerLine); end; end;
iHtoH = 20; //行间距
iWtoW = 10; //列间距
iWidth = 80; //按钮宽度
var
iPerLine : integer;//每行个数
BtnArr : array[1..10] of TButton;procedure TForm1.FormCreate(Sender: TObject);
var
I : integer;
begin
iPerLine := Self.Width div (iWidth+iWtoW);
for I := 1 to 10 do begin
BtnArr[I] := TButton.Create(Self);
with BtnArr[I] do begin
Name := 'Btn' + InttoStr(I);
Parent := Self;
Caption := Name;
Top := iHtoH + (30+iHtoH) * (I div iPerLine - integer((I mod iPerLine)=0));
Left := iWtoW + (iWidth+iWtoW) * ((I-1) mod iPerLine);
Show;
end;
end;
end;procedure TForm1.FormResize(Sender: TObject);
var
I : integer;
begin
iPerLine := Self.Width div (iWidth+iWtoW);
for I := 1 to 10 do
with BtnArr[I] do begin
Top := iHtoH + (30+iHtoH) * (I div iPerLine - integer((I mod iPerLine)=0));
Left := iWtoW + (iWidth+iWtoW) * ((I-1) mod iPerLine);
end;
end;
其他的细节修饰,楼主自行处理吧,算法已经表达得很清楚了,已经可以实现了。
以上代码可以实现.