Перейти к содержанию
Fire Monkey от А до Я
  • 0

Наследник от TListItemSimpleControl


DirtyBorov

Вопрос

Пробовал кто то наследоваться от TListItemSimpleControl? Печаль-беда

Меня собственно не устроил TListItemTextButton. Захотел я сделать свою кнопочку. Для этого создал свой unit и наследовался от TListItemSimpleControl. Но тут меня ждал большой сюрприз. Дело в том что многие поля и даже методы оказались не доступны! Беглое изучение кода в файле FMX.ListView.Types показали что "не боги горшки обжигают". Досадных ошибок в нем хватает. Когда разработчики писали этот модуль, у них все было хорошо, потому что как известно в пределах видимости unit можно в одном классе иметь доступ к полям private другого класса. Это известная "болезнь".

 

В чем собственно проблемы?  Сначала не нашлось некоторые константы и поля классов. Эти поля активно используются в наследниках, хотя объявлены они так:

  TListItemSimpleControl = class(TListItemObject)
  private const
    DisabledOpacity = 0.6;
  private
    FEnabled: Boolean;
    FPressed: Boolean;
    FMouseOver: Boolean;
    FOnClick: TNotifyEvent;
    FTouchExpand: Single;
   ...

Дальше оказалось еще интересней.  Есть такой метод:

procedure SetData(const AValue: TValue); override;

Как видим, метод перекрытый. Это значит что он где то в родительском классе объявлен как virtual, однако компилятор бодро сообщил что такой метод не найден в базовом классе. Внезапно! Смотрим базовые классы и что же мы видим:

 TListItemObject = class(TInterfacedPersistent)
  private
    .....
    procedure SetData(const Value: TValue); virtual;

Браво! Аплодирую стоя! 

Дальше копать я не стал. Уже и так стало ясно что затея с наследованием обречена на провал. Единственное пожалуй решение из данной ситуации это скопировать модуль FMX.ListView.Types  в папку с проектом, добавить его в проект и внести нужные изменения. Ну или дописать в этом модуле свои классы.
 
Написал я это с горяча. Достали нелепые ошибки. Может кому то пригодится мои исследования и сэкономят немного времени.
Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...