Jump to content
Message added by Viktor Akselrod,

Please be aware that these comments were copied here from another source and that the date and time shown for each comment may not be accurate.

  • Status: Fixed
  • Priority: Normal
  • Resolution: Fixed
  • Platform: Android
  • Affects version 1.17.0.0
  • Fix version: 1.18.0.0

размещаю фрейм на стиле, collectionView находится на отдельной форме, причем, не важно, прописываю я количество элементов в GetItemCount или нет

ошибка : Project raised exception class EClassNotFound with message 'Class TfreTovCardForView not found'.

Ошибка возникает при открытии формы, содержащей этот CollectionView, причем, если разместить этот же фрейм на любом контейнере формы все работает отлично, но если разместить в стиле выходит эта ошибка.

 


User Feedback

Recommended Comments

Alan

Active subscription

Where is TfreTovCardForView?

Is this something you created? Do you need to add the unit to the uses?

I think you will need to supply a small test project.

Аскар Джакишев

Active subscription

TfreTovCardForView это tframe, где размещены базовые элементы карточки товара в списке, в модуле uses он объявлен, если разместить этот frame на форме, то все отлично, если взять все элементы с фрейма и разместить внутри стиля, тоже все отлично, но, разместив фрейм на стиле приложение закрывается с критической ошибкой.

Провел эксперимент : создал фрейм с минимальной вложенностью элементов, только tlabel и tmemo возникла та же самая ошибка "Project raised exception class EClassNotFound with message 'Class Tframe1 not found", но уже с новым фреймом.

Пока нашел выход, заполнять стили вручную, без фреймов, в конце концов, не так много сценариев применения, надеюсь, это только в collectionview конфликт с фреймами, но благо всегда найдется выход. 

  • Administrators

На вашей стороне проблема решается регистрацией класса фрейма в RTL:

program Project1;
uses
  FGX.Application,
  FGX.Forms,
  System.Classes,
  Form.Main in 'Form.Main.pas' {FormMain: TfgForm},
  main in 'main.pas' {Frame1: TfgFrame},
  Unit2 in 'Unit2.pas' {Frame2: TfgFrame};

{$R *.res}

begin
  RegisterClass(TFrame1);

Особенность в реализации механизма серилизациии/десерилизации компонентов в RTL. А именно в поиске класс типа по имени. Когда фрейм лежит на форме, то при десерилизации класс тип берется из RTTI информации о поле класса содержащего фрейм и из класс группы (где все компоненты себя регистрируют). 

image_2024-03-14_22-01-23.png

В ходе работы TfgCollectionView клонирует стиль, которые может содержать фрейм. Однако, в этом случае форма не используется и как результат класс фрейма нигде не найти. Это решается ручной регистрацией класса фрейма в RTL.

В ходе фикса, мы добавили автоматическую регистрацию новых добавляемых фреймов в IDE. Однако, это буде работать только для новых фреймов. Для уже созданных необходимо вручную добавить этот код:

uses
  FGX.ClassStorage;

initialization
  TfgClassStorage.RegisterClass(<Имя класса фрейма>);
end.
  • Administrators

Изменено Статус на Fixed

Изменено Резолюция на Fixed

Изменено Версия с исправлением на 1.18.0.0

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.