0

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;因为它给出了预期的结果吗?

4

0 回答 0