SendToBack似乎在Firemonkey中不起作用?

时间:2019-01-16 08:59:00

标签: forms delphi firemonkey z-order

我正在处理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 :(得分:0)

由于我正在创建自己的控件,

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

可以替换为:

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