Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

# Работа со свойствами компонентов в FireMonkey: сохранение значений свойств `TPosition` в Delphi 10.1

Delphi , Компоненты и Классы , Компоненты

Работа со свойствами компонентов в FireMonkey: сохранение значений свойств TPosition в Delphi 10.1

Разработчики, работающие с Delphi и его возможностями для создания мобильных и десктопных приложений, часто сталкиваются с особенностями работы со свойствами компонентов, особенно в режиме FireMonkey. В данной статье рассмотрим проблему сохранения значений свойств типа TPosition в компонентах, созданных на основе TLayout, и способы её решения.

Проблема и её описание

При создании нового компонента на основе TLayout с использованием вложенных компонентов, таких как TDateEdit, разработчики могут столкнуться с проблемой сохранения значений свойств TPosition после компиляции и запуска программы. Свойства, созданные для управления положением вложенных компонентов, не сохраняют заданные значения и сбрасываются на значения, установленные в конструкторе компонента.

Пример кода

property EditDate_Position: TPosition read FDateEdits_Position write FDateEdits_PositionSet stored True;

Конструктор компонента инициализирует свойство FDateEdits_Position с помощью создания объекта TPosition:

PointF.X:=10;
PointF.Y:=30;
FDateEdits_Position:=TPosition.Create(PointF);

Поведение свойства TPosition

Свойства объекта TPosition определены как nodefault, что означает их обязательное сохранение в файле FMX независимо от значения. Это приводит к тому, что при загрузке формы или фрейма в режиме дизайна, или при запуске проекта в режиме выполнения, значения свойств TPosition перезаписываются на значения по умолчанию, заданные в конструкторе.

Решение проблемы

Чтобы избежать сброса значений свойств TPosition на значения по умолчанию при загрузке FMX файла, необходимо проверить свойство ComponentState и переопределить виртуальный метод Loaded. Также, для применения изменений свойств TPosition в дизайнере, необходимо назначить обработчик события OnChange.

Пример кода с решением проблемы:

constructor TLayout1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // Инициализация компонентов
  FPosition := TPosition.Create(PointF);
  FPosition.OnChange := FPositionChanged;
  // Установка значений только если не загружаем компонент
  if not (csLoading in ComponentState) then
    FBtn.Position.Assign(FPosition);
end;

procedure TLayout1.Loaded;
begin
  inherited;
  // Установка положения кнопки после загрузки
  FBtn.Position.Assign(FPosition);
end;

procedure TLayout1.FPositionChanged(Sender: TObject);
begin
  // Переустановка положения кнопки, если она существует и не загружается
  if (FBtn <> nil) and not (csLoading in ComponentState) then
    FBtn.Position.Assign(FPosition);
end;

Заключение

При работе со свойствами TPosition в FireMonkey важно понимать их поведение и использовать проверку состояния компонента и переопределение метода Loaded для корректного сохранения и применения значений свойств. Это позволит избежать неожиданного сброса значений и обеспечит стабильную работу компонентов в вашем приложении.

Создано по материалам из источника по ссылке.

Разработчики столкнулись с проблемой сохранения положения компонентов в FireMonkey из-за особенностей свойства `TPosition`, и предлагается решение, включающее проверку состояния компонента и переопределение метода `Loaded` для сохранения позиций.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-16 03:18:07/0.0036327838897705/0