Использование 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;
Вы задаете размер своих TDisplayItems в любой точке (либо в компоненте, либо при их создании)? Что является родителем TDisplayItem? –
Родитель устанавливается как TPanel, который визуально содержит их. Размер устанавливается путем итеративного получения высоты каждого и установки высоты каждого родителя как суммы высот дочерних элементов управления. –
Извините, я имел в виду родительский класс, а не родительский контроль. Если класс TPanel, вы можете сделать каждую метку прямым ребенком и избежать дополнительной панели. Тогда вы контролируете высоту будет ребенок с наибольшей позицией. Y + Высота. Я бы посоветовал сделать это в классе элементов отображения. –