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 评论的解释
如果我以相反的顺序创建孩子(例如for i := 3 downto 1
),我会得到相反的结果:Delphi 产生反向和 Lazarus - 直接顺序。这就是我说代码加倍的原因。
附加 2
关于汤姆·布伦伯格
当从 Button onClick 事件处理程序调用相同的代码时,代码行为变得相反(在 Lazarus 和 Delphi 中再次不同)。
附加 3
我可以相信for i := 1 to 3
……Top := 1000 + i;
因为它给出了预期的结果吗?