Delphi 10.1 Firemonkey Создание элементов управления в TScrollBox во время выполнения запускает повторный заказ
Я использую Delphi 10.1 и Firemonkey и хочу добавить элементы управления в TScrollBox во время выполнения и столкнулся с некоторыми странными действиями.
В этом примере я создаю метки и добавляю их в поле TScroll.
Метка установлена как TAlignLayout.Top, поэтому я предполагаю, что каждая новая созданная метка будет располагаться ниже предыдущей.
- Первый созданный ярлык идет вверх.
- Второй созданный ярлык располагается ниже первого.
- Третья создаваемая метка находится между первой и второй метками.
- Любые другие ярлыки, которые были созданы, затем складываются под первым ярлыком.
Я хочу, чтобы ярлыки создавались сверху вниз в порядке создания. Есть идеи, что я сделал не так?
Это код для создания ярлыков: -
procedure TForm1.Button4Click(Sender: TObject);
var
lbFileDate: TLabel;
begin
ScrollBox2.BeginUpdate;
lbFileDate := TLabel.Create(ScrollBox2);
lbFileDate.Parent := ScrollBox2;
lbFileDate.Align := TAlignLayout.Top;
lbFileDate.Text := DateTimeToStr(Now);
ScrollBox2.EndUpdate;
end;
Я сделал что-то очень похожее в Delphi 10.1 VCL, и процесс создания работает, всегда помещая последнюю метку наверх.
тиа
1 ответ
Похоже, что для уже размещенных элементов управления любые дополнительные элементы управления перемещаются туда, где их можно втиснуть в зависимости от их координат, которые по умолчанию равны 0,0. Вы можете дать новому элементу управления большой
y
поэтому он начинается под остальными. Прежде чем они будут размещены, как внутри блока обновления начала/конца, они могут быть размещены друг над другом и будут размещены в соответствии с порядком создания.
procedure TForm1.Button1Click(Sender: TObject);
var
lbFileDate: TLabel;
begin
ScrollBox2.BeginUpdate;
for var I : integer := 1 to 10 do
begin
lbFileDate := TLabel.Create(ScrollBox2);
lbFileDate.Parent := ScrollBox2;
lbFileDate.Position.Y := 1E10;
lbFileDate.Align := TAlignLayout.Top;
lbFileDate.Text := DateTimeToStr(Now) + ' ' + IntToStr(I);
end;
ScrollBox2.EndUpdate;
end;