我以同样的方式填充ScrollBox
:
procedure TForm1.FormCreate(Sender: TObject);
var
i: word;
begin
for i := 1 to 3 do
begin
with TLabel.Create(ScrollBox1) do
begin
Parent := ScrollBox1;
Top := 1000;
AutoSize := False;
Align := alTop;
Height := 25;
Caption := 'Label' + IntToStr(i);
end;
end;
ScrollBox1.Realign;
end;
当代码在Delphi下运行时,我得到以下结果:
物品的顺序是正确的。 但是当我在Lazarus下调用相同的代码时,我得到了:
项目的顺序是相反的。我可以通过反向创建ScrollBox
子项和/或添加{IFDEF ...}
来解决问题,但我怀疑这不可靠。添加编译器开关会使代码量翻倍,使其变得庞大且难以阅读。
有没有办法为此目的做统一可靠的Delphi-Lazarus代码?
所附
关于@TomBrunberg评论的解释如果我以相反的顺序创建chidren(例如for i := 3 downto 1
),我会得到相反的结果:Delphi产生反向和Lazarus - 直接顺序。这就是为什么我说的是代码加倍。
附录2
关于Tom Brunberg的说明
当从Button onClick事件处理程序调用相同的代码时,代码行为变得相反(在Lazarus和Delphi中也是如此)。
附录3
我能相信for i := 1 to 3
... Top := 1000 + i;
因为它会给出预期的结果吗?