var
Form2: TForm2;
cch: Integer = 0; //初始的窗体高度
ccw: Integer = 0; //初始的窗体宽度
chlst: array of Integer; //初始的控件高度数组
cwlst: array of Integer; //初始的控件宽度数组
cplst: array of Integer; //初始的控件距离窗口上端的距离数组
cllst: array of Integer; //初始的控件距离窗口左端的距离数组
carr: array of TControl; //存放所有窗体控件数组
procedure TForm2.FormCreate(Sender: TObject);
var I:Integer;
begin
cch := self.Height; //初始化窗口宽高
ccw := self.Width;
for I := 0 to ControlCount - 1 do begin
SetLength(chlst, I + 1); //给初始控件的高度数组设置大小。
chlst[I] := Controls[I].Height; //给初始控件的高度数组设置值。以下均同
SetLength(cwlst, I + 1); //宽度
cwlst[I] := Controls[I].Width;
SetLength(cplst, I + 1); //距离窗口上端的距离
cplst[I] := Controls[I].Top;
SetLength(cllst, I + 1); //距离窗口左端的距离
cllst[I] := Controls[I].Left;
SetLength(carr, I + 1); //最后一步,给存放所有窗体控件数组添加元素
carr[I] := Controls[I];
end;
end;
procedure TForm2.FormResize(Sender: TObject);
var ch,cw,I:Integer;
var avgh,avgw,avgp,avgl:Integer;
begin
ch := self.Height; //定义两个变量,用于获取窗体大小改变后的高度和宽度值。
cw := self.Width;
for I := 0 to Length(carr) - 1 do begin
avgh := round(chlst[I] * (ch / cch)); //获取平均改动值,用了【控件原高度x(窗体高度 / 窗体原高度)】公式。
avgw := round(cwlst[I] * (cw / ccw));
avgp := round(cplst[I] * (ch / cch));
avgl := round(cllst[I] * (cw / ccw));
carr[I].Height := avgh; //应用平均改动值
carr[I].Width := avgw;
carr[I].Top := avgp;
carr[I].Left := avgl;
end;
end;