gpt4 book ai didi

delphi - 调整按钮的大小,使它们都具有相同的宽度

转载 作者:行者123 更新时间:2023-12-03 19:11:47 25 4
gpt4 key购买 nike

我有一个“宽” TPanel,上面有几个按钮(本质上是一个工具栏)。所有按钮都具有Align = Left。我创建了一个函数,该函数会将按钮的大小调整为相同的大小并计算它们的宽度,以便它们填充整个TPanel。我在TPanel的OnResize事件处理程序中调用此函数。

procedure ScaleButtonsOnPanel;
var i: Integer;
begin
for i:=0 to mPanel.ControlCount-1 do begin
mPanel.Controls[i].Width := round(mPanel.width/mPanel.ControlCount-1)
end;
end;


问题是,如果我最小化然后还原表单,则按钮的布局将从设计布局更改。

任何人都可以提供一种解决方案,使面板上的按钮可以调整大小,但可以保持设计时间顺序(从左到右放置)?

最佳答案

我看不到您的问题。但是,当然,您必须设置按钮的位置,而不仅仅是按钮的大小。

procedure TForm1.Panel1Resize(Sender: TObject);
var
i: Integer;
btnWidth: integer;
begin
btnWidth := Panel1.Width div Panel1.ControlCount;
for i := 0 to Panel1.ControlCount - 1 do
begin
Panel1.Controls[i].Left := i * btnWidth;
Panel1.Controls[i].Width := btnWidth;
end;
end;


这很好。

请参见 https://privat.rejbrand.se/panelresize.wmv

好,现在知道了我认为 alLeft实际上是您的问题。具有相同对齐方式的控件倾向于更改其顺序。这是众所周知的德尔福烦恼。就像我上面做的一样。只要确保您以正确的顺序浏览按钮即可。如果您不能依赖 Panel1.Controls的顺序,则可以这样做:将每个工具栏按钮的 Tag属性设置为在工具栏中的位置(0、1,...),然后执行

procedure TForm1.Panel1Resize(Sender: TObject);
var
i: Integer;
btnWidth: integer;
begin
btnWidth := Panel1.Width div Panel1.ControlCount;
for i := 0 to Panel1.ControlCount - 1 do
begin
Panel1.Controls[i].Left := Panel1.Controls[i].Tag * btnWidth;
Panel1.Controls[i].Width := btnWidth;
end;
end;

关于delphi - 调整按钮的大小,使它们都具有相同的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com