В статье рассматривается проблема разработчика, столкнувшегося с трудностями при использовании компонента TListView из библиотеки FMX в Delphi 10.1 Berlin при переключении между целевыми платформами Windows и Android. Проблема заключается в возникновении ошибок при работе с кастомными объектами внешнего вида (Appearance Objects) и при попытке назначения изображений для этих объектов.
Описание проблемы
Разработчик создал приложение в Delphi 10.1 Berlin с использованием Windows в качестве основной платформы. В приложении используется TListView, к которому были добавлены кастомные объекты внешнего вида, включая TImageObjectAppearance. При переключении на целевую платформу Android (Android 10" Tablet) разработчик столкнулся с ошибками, указывающими на проблемы с назначением изображений для TImageObjectAppearance и удалением объектов внешнего вида в дизайнере.
Подтвержденный ответ
Исходя из предоставленного контекста, проблема, с которой столкнулся разработчик, связана с ошибками в IDE Delphi при работе с кастомными объектами внешнего вида TListView в режиме дизайна для Android. Ошибка "Cannot assign a TAppearanceObjectItem to a TAppearanceObjectItem" была зарегистрирована как баг в системе отслеживания ошибок Embacadero:
Проблема может быть связана с некорректной работой дизайнера, когда после удаления объектов внешнего вида в одном стиле (Windows) и переключении на другой (Android), IDE не корректно отображает изменения. Также разработчик столкнулся с проблемой при назначении изображений в коде, который работал корректно для Windows, но не для Android.
Рекомендации по решению проблемы
Убедитесь, что все компоненты, используемые для TImageObjectAppearance, корректно объявлены и инициализированы в ресурсах проекта.
Проверьте, что код, назначающий изображения, не зависит от платформы и корректно работает с типами данных и методами, доступными в FMX для Android.
Очистите проект и пересоберите его, чтобы исключить возможные проблемы с кэшем проекта.
Обновите версию Delphi до последней доступной, так как в новых версиях могут быть исправлены известные баги.
Пример кода
Пример кода для назначения изображения в TListView для Android может выглядеть следующим образом:
function TdmVisual.AddOrUpdateItem(AItem: TListViewItem; AMGDL: Integer): TListViewItem;
var
LObject: TListItemImage;
begin
Result := AItem;
LObject := Result.Objects.FindObjectT<TListItemImage>('imgRating');
if Supports(TVirtualImage, LObject) then
begin
with LObject as TListItemImage do
begin
Bitmap.Clear;
case AMGDL of
// Назначение соответствующего изображения в зависимости от AMGDL
end;
EndUpdate;
end;
// Здесь должен быть код для создания и назначения изображения, соответствующего AMGDL
// Важно использовать методы, совместимые с FMX для Android
end;
Заключение
Разработчикам, столкнувшимся с аналогичными проблемами, рекомендуется внимательно следить за обновлениями от Embacadero и использовать сообщества разработчиков для обмена опытом и решений возникающих проблем.
В статье рассматривается проблема разработчика, связанная с ошибками в IDE Delphi при работе с кастомными объектами внешнего вида TListView в среде FMX на Delphi 10.1 Berlin при переходе от разработки под Windows к Android, особенно к
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS