SendToBack, кажется, не работает в Firemonkey? - PullRequest
0 голосов
/ 16 января 2019

Я работаю над приложением Firemonkey с основной формой, в которой много элементов управления.Я хочу создать еще несколько элементов управления и отправить их обратно, используя SendToBack.По какой-то причине это не работает, как ожидалось.Элементы управления не отправляются в полный возврат, они не доходят до 1 элемента управления.

Вот пример настройки:

  • Создайте новую TForm.
  • Поместите на него 3 кнопки, накладывающиеся друг на друга (Button1, Button2, Button3).
  • Во время выполнения кнопка Button3.SendToBack - возвращает кнопку назад, но только на 1 позицию.Button1 по-прежнему остается самым задним.

Проверка исходного кода TForm показывает, что SendToBack вызывает SendChildToBack, что определяет заднее местоположение как:

function TCommonCustomForm.GetBackIndex: Integer;
begin
  Result := 1;
end;

, не должно ли оно быть 0?

Вопросы:

  • Почему SendToBack отправляет элементы управления в «последнюю, но одну» позицию вместо крайней?Есть ли особая причина, по которой GetBackIndex возвращает 1?
  • Как отправить назад элементы управления?Учитывая, что в моей форме много элементов управления, отправка всего, кроме необходимых элементов управления с BringToFront, была бы нежелательной.

1 Ответ

0 голосов
/ 16 января 2019

Поскольку я создаю собственные элементы управления,

ctrl := TSomeControl.Create(aForm);
ctrl.Parent := aForm;
ctrl.SendToBack;

можно заменить на:

ctrl := TSomeControl.Create(aForm);
aForm.InsertObject(0 {desired index}, ctrl);
...