Создаю 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
Создаю DLL для Inno Setup, через которую передаю FMX-формы и интерфейсы как COM-сервер.
В Delphi 12 всё работало корректно: при установке
контейнер занимал всю площадь родителя. В 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, и т. д.)?0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.