Перейти к содержанию
Fire Monkey от А до Я
  • 0

Проблема с Align в Delphi 13 (FMX + COM DLL для Inno Setup)


audiofeel

Вопрос

Опубликовано (изменено)

Создаю DLL для Inno Setup, через которую передаю FMX-формы и интерфейсы как COM-сервер.
В Delphi 12 всё работало корректно: при установке

Код:
Layout.Align(Client)

контейнер занимал всю площадь родителя. В Delphi 13 поведение изменилось — TLayout теперь размещается почти произвольно, с размерами по умолчанию, как будто Align не применяется.
Фрагмент:

Спойлер
function TFLayout.FCreate(FParent: TFMXObject): TLayout;
begin
  Result := TLayout.Create(nil);
  Result.Parent := FParent;
  ControlLayout := Result;
end;

procedure TFLayout.Cursor(FCursor: TCursor);
begin
  ControlLayout.Cursor := FCursor;
end;

procedure TFLayout.Left(FLeft: Single);
begin
  ControlLayout.Position.X := FLeft;
end;

procedure TFLayout.Top(FTop: Single);
begin
  ControlLayout.Position.Y := FTop;
end;

procedure TFLayout.Height(FHeight: Single);
begin
  ControlLayout.Height := FHeight;
end;

procedure TFLayout.Width(FWidth: Single);
begin
  ControlLayout.Width := FWidth;
end;

procedure TFLayout.SetBounds(FLeft, FTop, FWidth, FHeight: Single);
begin
  ControlLayout.SetBounds(FLeft, FTop, FWidth, FHeight);
end;

procedure TFLayout.Position(X, Y: Single);
begin
  ControlLayout.Position.X := X;
  ControlLayout.Position.Y := Y;
end;

procedure TFLayout.Align(Al: TAlignLayout);
begin
  ControlLayout.Align := Al;
end;

procedure TFLayout.Margins(FLeft, FTop, FRight, FBottom: Single);
begin
  ControlLayout.Margins.Left := FLeft;
  ControlLayout.Margins.Top := FTop;
  ControlLayout.Margins.Right := FRight;
  ControlLayout.Margins.Bottom := FBottom;
end;

procedure TFLayout.Padding(FLeft, FTop, FRight, FBottom: Single);
begin
  ControlLayout.Padding.Left := FLeft;
  ControlLayout.Padding.Top := FTop;
  ControlLayout.Padding.Right := FRight;
  ControlLayout.Padding.Bottom := FBottom;
end;

procedure TFLayout.SetHint(const FText: WideString);
begin
  ControlLayout.ShowHint := True;
  ControlLayout.Hint := FText;
end;

procedure TFLayout.SetClipChildren(FValue: Boolean);
begin
  ControlLayout.ClipChildren := FValue;
end;

procedure TFLayout.BringToFront;
begin
  ControlLayout.BringToFront;
end;

procedure TFLayout.SendToBack;
begin
  ControlLayout.SendToBack;
end;

procedure TFLayout.SetClipParent(FValue: Boolean);
begin
  ControlLayout.ClipParent := FValue;
end;

procedure TFLayout.SetTag(FTag: Integer);
begin
  ControlLayout.Tag := FTag;
end;

procedure TFLayout.Opacity(FOpacity: Single);
begin
  ControlLayout.Opacity := FOpacity;
end;

procedure TFLayout.RotationAngle(FValue: Single);
begin
  ControlLayout.RotationAngle := FValue;
end;

procedure TFLayout.RotationCenter(X, Y: Single);
begin
  ControlLayout.RotationCenter.X := X;
  ControlLayout.RotationCenter.Y := Y;
end;

procedure TFLayout.Enabled(FEnabled: Boolean);
begin
  ControlLayout.Enabled := FEnabled;
end;

procedure TFLayout.Visible(FVisible: Boolean);
begin
  ControlLayout.Visible := FVisible;
end;

procedure TFLayout.HitTest(FEnabled: Boolean);
begin
  ControlLayout.HitTest := FEnabled;
end;

function TFLayout.IsVisible: Boolean;
begin
  Result := ControlLayout.Visible;
end;

function TFLayout.GetTag: Integer;
begin
  Result := ControlLayout.Tag;
end;

function TFLayout.GetLeft: Single;
begin
  Result := ControlLayout.Position.X;
end;

function TFLayout.GetTop: Single;
begin
  Result := ControlLayout.Position.Y;
end;

function TFLayout.GetHeight: Single;
begin
  Result := ControlLayout.Height;
end;

function TFLayout.GetWidth: Single;
begin
  Result := ControlLayout.Width;
end;

function TFLayout.GetObject: LongInt;
begin
  Result := LongInt(ControlLayout);
end;

procedure TFLayout.OnClick(Event: TNotifyEvent);
begin
  ControlLayout.OnClick := Event;
end;

procedure TFLayout.OnMouseDown(Event: TMouseEvent);
begin
  ControlLayout.OnMouseDown := Event;
end;

procedure TFLayout.OnMouseEnter(Event: TNotifyEvent);
begin
  ControlLayout.OnMouseEnter := Event;
end;

procedure TFLayout.OnMouseLeave(Event: TNotifyEvent);
begin
  ControlLayout.OnMouseLeave := Event;
end;

procedure TFLayout.OnMouseUp(Event: TMouseEvent);
begin
  ControlLayout.OnMouseUp := Event;
end;

function TFLayout.Handle: TFMXObject;
begin
  Result := ControlLayout;
end;

 

Вопрос: кто сталкивался с подобным? Изменилось ли что-то в механизме вычисления Align или нужно вызывать дополнительный метод (RecalcSize, Realign, UpdateEffects, и т. д.)?

 
Изменено пользователем audiofeel

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...