ресурс не найден после создания подкласса формы firemonkey - PullRequest
0 голосов
/ 12 апреля 2019

Пожалуйста, помогите. Я работаю над долгосрочным проектом Delphi с несколькими формами Firemonkey, которые я хотел сделать изменяемого размера. Я поместил релевантный для изменения размера код в новую форму, которая произошла от TForm, и изменил свои существующие формы, чтобы они переходили из новой формы. Казалось, что это работает, но теперь это не удается во время компиляции с ошибками типа «ресурс TLessonStudent не найден» Удивительно, но возвращение кода в прежнее состояние не устраняет ошибку. Что происходит? Есть ли какой-нибудь способ создать файл ресурсов, который понравится компилятору? Спасибо! Art

Я пытался добавлять и удалять директивы компилятора, такие как {$ R * .DFM}, в разных местах. Я также попытался вернуть код обратно, как это было раньше, с моими формами, снова нисходящими непосредственно из TForm. Все та же ошибка.

Вот как объявляется новая форма верхнего уровня:

type
  TFluentTutorForm = class(TForm)
  protected
    ...
    resizableLayout: TScaledLayout;
    procedure FormCreate(Sender: TObject);
  private
    ...
    function getScreenSize(var retWidth: integer; var retHeight: integer): boolean;
  public
  end;  //TFluentTutorForm

var
  fluentTutorForm: TFluentTutorForm;

implementation

{$R *.fmx}

Вот одна из моих старых форм, измененная для того, чтобы сходить с вышеприведенной

type
  TLessonStudent = class(TFluentTutorForm)
    ...
    procedure FormCreate(Sender: TObject);
  private
    unitTester:  IftUnitTester;
  public
  end;  //TStudentForm

var
  studentForm: TLessonStudent; 

implementation

{the formCreate method shown above calls "inherited formCreate" on it's 
new parent, shown at top}

А вот часть кода проекта, которая создает форму:

{$R *.res}

begin
  Application.Initialize;
  Application.FormFactor.Orientations := [TFormOrientation.Portrait];//  InvertedPortrait];
  Application.CreateForm(TlessonStudent, studentForm); //<here!!
  Application.CreateForm(TClientModule1, ClientModule1);
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TmemTableForm, memTableForm);
  Application.Run;
end.

1 Ответ

0 голосов
/ 12 апреля 2019

Неважно, я понял.Оказалось, что ответ имеет директиву {$ R * .FMX} в дочерней форме, а НЕ в новой родительской форме.

Я до сих пор понятия не имею, почему эти магические символы должны быть такими, но это помогло.:)

...