FlowPanel如何包装每个给定数量的组件?

时间:2019-05-06 21:18:31

标签: delphi vcl

有什么方法,例如,每3个组件包装一个FlowPanel的组件不是那么复杂吗?

与属性自动换行一起使用,但具有一定数量的控件。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您未打开实际图像尺寸,因此这里是您的一般想法,并提供了一些您喜欢的示例尺寸。我使用按钮(正常宽度= 75)进行了一些初始测试,因此将TFlowPanel的大小调整为235像素。

想法是让TFlowPanel的宽度固定为{Constraints.MaxWidth = 235; Constraints.MinWidth = 235;,但宽度为AutoSize=True,这样它可以向下生长。如果您添加例如75像素宽的组件,其中3个完全适合一行。如果较宽,则只能容纳2个,甚至只有1个适合。只要你想。但是,如果宽度只有56px(均值)或更小,则组件数将为四个或更多。

我建议一种解决方案,将较小的组件放在自己的面板上,宽度为75px,并将该面板放在TFlowPanel上。因此,一行中最多只能容纳三个组件。

这是在TFlowPanel上放置许多按钮的代码。

procedure TForm3.Button1Click(Sender: TObject);
var
  btn: TButton;
  pan: TPanel;
begin
  inc(count);
  btn := TButton.Create(self);
  btn.Width := random(60)+35;
  if btn.Width < 75 then
  begin
    pan := TPanel.Create(self);
    pan.Width := 75;
    pan.Height := 30;
    pan.BevelOuter := bvNone;
    btn.Parent := pan;
    pan.Parent := FlowPanel1;
  end
  else
  begin
    btn.Parent := FlowPanel1;
  end;
  btn.Caption := IntToStr(count);
end;

最终结果

enter image description here


替代解决方案

另一种解决方案(自从您提到TImage以来)是始终创建宽度至少为75px TImage。如果您愿意,图片(如果小于该图片)可以位于TImage的中心。这是基于以下事实:图像不会影响TImage控件的大小(除非您希望这样做)。

此外,如果您确实不是绝对需要以完整的实际大小显示图像,则可以设置Proportional属性true。从文档中:

  

当“比例”为true时,将太大(无法保持在图像控件中的图像)按比例缩小(同时保持相同的宽高比),直到它们适合图像控件为止。