Delphi XE3 Firemonkey自动调整大小/布局问题

时间:2013-04-15 11:32:43

标签: delphi firemonkey autosize

使用Firemonkey我有一个TVertScrollBox,其中包含一个TPanel,它可以动态填充以下多个TDisplayItem对象。

问题是TDisplayItem的大小不正确,因此各个组件上的文本会叠加等。

我可以通过获取组件部分的大小并使容器大小等来修复滚动框可见区域中的项目。我尝试过刷新和application.ProcessMessages来调整大小以及各种对齐和扭曲选项,但无济于事。

希望我错过了一个关键因素,并没有发现Firemonkey限制!

干杯,

马丁。

Constructor TDisplayItem.Create(owner : TComponent);
begin
  inherited Create(owner);
  Align := TAlignLayout.alTop;
  pnlLabels := TPanel.Create(nil);
  pnlLabels.Align := TAlignLayout.alTop;
  pnlLabels.Height := 50;
  pnlLabels.Parent := self;

  lblICAO := TLabel.Create(nil);
  lblICAO.Parent := pnlLabels;
  with lblICAO do
  begin
    text := 'ICAO';
    Height := 30;
    Position.X := 10;
    align := TAlignLayout.alTop;
    TextAlign := TTextAlign.taCenter;
    Font.Size := 18;
    FontColor :=  $FF00D000 ;
    Visible := False;
    StyledSettings := [TStyledSetting.ssFamily];//, TStyledSetting.ssFontColor];
  end;

  lblFrom := TLabel.Create(nil);
  lblFrom.Parent := pnlLabels;
  with lblFrom do
  begin
    text := 'From : ';
    Height := 30;
    Position.X := 10;
    Position.y := 2;
    width := 150;
    FontColor :=  $FFFF0000 ;
    StyledSettings := [TStyledSetting.ssFamily];//, TStyledSetting.ssFontColor];
  end;

  lblTo := TLabel.Create(nil);
      lblTo.Parent := pnlLabels;
  with lblTo do
  begin
    text := 'To : ';
    Height := 30;
    Position.X := 170;
    Position.y := 2;
    width := 150;
    FontColor :=  $FFFF0000 ;
    StyledSettings := [TStyledSetting.ssFamily];//, TStyledSetting.ssFontColor];
  end;



 lblStatus := TLabel.Create(nil);
  lblStatus.Parent := pnlLabels;
  with lblStatus do
  begin
    text := 'Status : ';
    Height := 30;
    Position.X := 330;
    Position.y := 2;
    width := 100;
    Font.Size := 10;
    FontColor :=  $FFFF0000 ;
    StyledSettings := [TStyledSetting.ssFamily];//, TStyledSetting.ssFontColor];
  end;

  lblNonGeog  := TLabel.Create(nil);
  with lblNonGeog do
  begin
    text := 'Non-Geog : ';
    Height := 30;
    Position.X := 440;
    Position.y := 2;
    width := 150;
    Font.Size := 10;
    FontColor :=  $FFFF0000 ;
    StyledSettings := [TStyledSetting.ssFamily];//, TStyledSetting.ssFontColor];
  end;
  lblNonGeog.Parent := pnlLabels;

  memItem := TLabel.Create(nil);
  memItem.Parent := self;
  with memItemE do
  begin
    Align := TAlignLayout.alTop;
    DisableFocusEffect := False;
    AutoSize := True;
    WordWrap := True;
  end;

1 个答案:

答案 0 :(得分:0)

好的,终于解决了。我认为这是一个绘图问题 - 当其中一个标签的文本被更改时,需要label.dopaint。然后,即使它不在显示区域,也会更新标签的高度。然后TPAnel可以通过总结子组件的高度来正确设置它的高度。