2013-04-15 2 views
0

Использование Firemonkey У меня есть TVertScrollBox, который содержит TPanel, который динамически заполняется рядом следующих объектов TDisplayItem.Delphi XE3 Проблемы автосохранения/компоновки Firemonkey

Проблема заключается в том, что не размер в TDisplayItem должным образом, поэтому текст на различные компоненты накладываются и т.д.

я могу это исправить на элементы, которые находятся в видимой области scrollbox путем, получая размеры компонентов и изготовление контейнеров размером и т. д. Я пробовал обновлять и применять приложения. ProcessMessages, чтобы получить все, чтобы изменить размер, а также различные параметры выравнивания и деформации, но безрезультатно.

Надеюсь, я пропустил ключевой фактор в этом и не разорвал ограничение Firemonkey!

Cheers,

Martin.

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; 
+0

Вы задаете размер своих TDisplayItems в любой точке (либо в компоненте, либо при их создании)? Что является родителем TDisplayItem? –

+0

Родитель устанавливается как TPanel, который визуально содержит их. Размер устанавливается путем итеративного получения высоты каждого и установки высоты каждого родителя как суммы высот дочерних элементов управления. –

+0

Извините, я имел в виду родительский класс, а не родительский контроль. Если класс TPanel, вы можете сделать каждую метку прямым ребенком и избежать дополнительной панели. Тогда вы контролируете высоту будет ребенок с наибольшей позицией. Y + Высота. Я бы посоветовал сделать это в классе элементов отображения. –

ответ

0

ОК, наконец, решил. Я был на правильном пути, думая, что это проблема с рисунком - когда текст одного из ярлыков был изменен на ярлык. Dopaint был необходим. Затем это обновление высоты метки, даже если оно не было в области отображения. Паран TPanel мог бы правильно установить его высоту, суммируя высоты дочерних компонентов.

Смежные вопросы