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

Ошибка при использовании кастомного класса `TFrame` в Firemonkey Delphi 10.3: проблема наследования и свойство `Size.Width`

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Ошибка при использовании кастомного класса TFrame в Firemonkey Delphi 10.3

Введение

В процессе разработки приложений с использованием Firemonkey в Delphi 10.3 пользователи могут столкнуться с проблемой, связанной с наследованием кастомных классов TFrame. В частности, при наследовании TFrameObserver от TCustomFrame и последующем наследовании TfStore от TFrameObserver возникает ошибка, связанная с несуществующим свойством Size.Width.

Проблема

При создании кастомного типа TCustomFrame, который является производным от TFrame, и добавлении функциональности через интерфейс IObserver в классе TFrameObserver, а затем наследовании TfStore от TFrameObserver, разработчики могут столкнуться с ошибкой при открытии проекта в режиме дизайна или выполнения:

Property fStore.Size.Width does not exist

Ошибка связана с тем, что в файле .fmx удаляются свойства Size.Width, Size.Height и Size.PlatformDefault, а вместо них добавляются свойства ClientWidth и ClientHeight. Если использовать прямое наследование от TFrame вместо TCustomFrame, проблема исчезает.

Репродукция проблемы

Для воспроизведения ошибки необходимо создать новый проект Firemonkey и добавить в него TFrame, который наследуется от тестового класса, аналогичного представленному в вопросе.

Подробное описание

В приведенном коде из контекста использования интерфейса IFrameTest и класса TFrameTest для создания производных классов TFrameITest и TFrame1 может возникнуть ошибка, аналогичная описанной выше. Ключевым моментом является использование кастомного класса TCustomFrame в качестве базового для наследования.

Решение

Для корректного наследования кастомных TFrame необходимо использовать специальные возможности IDE. Создайте базовый кастомный TFrame с помощью IDE, а затем создайте производный класс также через IDE, выбрав "Файл / Новый / другой... / Наследуемые элементы / выбрать первый кастомный TFrame". Если требуется использовать интерфейс, определите его в базовом классе и добавьте в классную декларацию.

unit Unit3;
interface
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls;
type
  IFrameTest = interface
    procedure Test;
  end;
  TFrame3 = class(TFrame)
  private
    { Private declarations }
  public
    procedure Test; virtual;
  end;
implementation
{$R *.fmx}
{ TFrame3 }
procedure TFrame3.Test;
begin
  ShowMessage('TFrame3.Test');
end;
end.

И соответствующий файл .fmx будет содержать определение TFrame3 с заданными размерами.

Для производного класса TFrame4 код будет следующим:

unit Unit4;
interface
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
  Unit3;
type
  TFrame4 = class(TFrame3)
  private
    { Private declarations }
  public
    procedure Test; override;
  end;
var
  Frame4: TFrame4;
implementation
{$R *.fmx}
{ TFrame4 }
procedure TFrame4.Test;
begin
  ShowMessage('TFrame4.Test');
end;
end.

И соответствующий файл .fmx должен содержать наследование Frame4: TFrame4 с заданными размерами.

Заключение

Ошибка связана с особенностями работы IDE и необходимо следовать определенным правилам для корректного наследования кастомных TFrame. Если требуется использование IDE для управления кастомными TFrame, важно соблюдать порядок и процедуры, предусмотренные в IDE.

Важное примечание

Это не проблема в Delphi, а скорее особенность использования кастомных компонентов, для которых IDE выполняет специальную магию. Следование правилам и рекомендациям разработчиков позволит избежать подобных ошибок.

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

При использовании кастомного класса `TFrame` в Firemonkey Delphi 10.3 возникает ошибка, связанная с наследованием и удалением свойств в IDE.


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

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




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


:: Главная :: Диалоги и Фреймы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:58:14/0.0037648677825928/0