我们的版本是2827的,界面是模仿25版本做的,窗体上放个panel,align是client,上面放着6个panel的align是alnone,位置是代码控制的.如下:
//初始化
procedure TMAINFORM.InitPanels;
var
I: Integer;
begin
SetLength(FPanels, 2);
for I := Low(FPanels) to High(FPanels) do
SetLength(FPanels[I], 2);
FPanels[0][0] := pnlLeft1;
FPanels[0][1] := pnlRight1;
FPanels[1][0] := pnlLeft2;
FPanels[1][1] := pnlRight2;
end;
//位置
procedure TMAINFORM.pnlClientResize(Sender: TObject);
const
cSpaceWidth = 8;
var
I, J: Integer;
lWidth: Integer;
lHeight: Integer;
lColCount, lRowCount, lRowOffs, lColOffs: Integer;
begin
lRowCount := High(FPanels) - Low(FPanels) + 1;
lColCount := High(FPanels[0]) - Low(FPanels[0]) + 1;
lWidth := pnlClient.Width div lColCount;
lHeight := pnlClient.Height div lRowCount;
for I := Low(FPanels) to High(FPanels) do
begin
if I > 0 then
lRowOffs := cSpaceWidth div 2
else
lRowOffs := 0;
// TODO: 需要考虑一行中列没有值的情况,列没值时融合可能会比较好
for J := Low(FPanels[I]) to High(FPanels[I]) do
begin
if J > 0 then
lColOffs := cSpaceWidth div 2
else
lColOffs := 0;
FPanels[I][J].BoundsRect := Classes.Bounds(
lWidth * J + cSpaceWidth - lColOffs,
lHeight * I + cSpaceWidth - lRowOffs,
lWidth - (cSpaceWidth + cSpaceWidth div 2),
lHeight - (cSpaceWidth + cSpaceWidth div 2));
end;
end;
end; |