FlowPanel, как обернуть каждое данное количество компонентов? - PullRequest
0 голосов
/ 07 мая 2019

Есть ли способ, не сложный ли обернуть компоненты FlowPanel, например, каждые 3 компонента?

, как это работает с автоматическим переносом свойства, но с заданным количеством элементов управления.

заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2019

Вы оставили открытые фактические размеры изображений, так что здесь это общая идея с некоторыми примерами размеров, которые вам придется принять по своему вкусу. Я сделал несколько начальных тестов с кнопками (нормальная ширина = 75), поэтому я выбрал размер TFlowPanel до 235 пикселей в ширину.

Идея состоит в том, чтобы иметь TFlowPanel с фиксированной шириной (Constraints.MaxWidth = 235; Constraints.MinWidth = 235;), но AutoSize=True, чтобы он мог расти вниз. Если вы добавите, например, Компоненты шириной 75px, 3 из них идеально помещаются в один ряд. Если шире, только 2 или даже только 1 помещаются в ряд. Насколько вы хотите. Но если ширина всего 56px (среднее значение) или меньше, число компонентов будет равно четырем или более.

Я предлагаю решение разместить такой меньший компонент на отдельной панели шириной 75 пикселей и эту панель на 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 с) - всегда создавать TImage с шириной не менее 75px . Изображение (если оно меньше) может быть центрировано в TImage, если хотите. Это основано на том факте, что изображение не влияет на размер элемента управления TImage (если вы этого не хотите).

Кроме того, если вам действительно не нужно показывать изображения в полном натуральном размере, вы можете установить свойство Proportional true. Из документов:

Если для параметра Пропорционально задано значение true, изображения, которые слишком велики, чтобы поместиться в элемент управления изображением, уменьшаются (при сохранении того же соотношения сторон) до тех пор, пока они не поместятся в элемент управления изображением.

...