Перейти к содержанию
  • Регистрация
  • 0
x11

Как определить, загружена ли картинка в TListItemImage?

Вопрос

Через LiveBinding загружаются данные в ListView, в том числе и в ListItemImage.

Но у некоторых Item`ов нет картинки. И в этом случае нужно показать "пустышку" типа No image.

Делаю в событии UpdateObjects

procedure TfmMain.lvObjectsUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
Var
 ListItemImage: TListItemImage;
begin
  if Assigned(AItem) then
  begin
    ListItemImage := AItem.Objects.FindObjectT<TListItemImage>('img');
    if Assigned(ListItemImage) then
      if not assigned(ListItemImage.Bitmap) then
        ListItemImage.ImageIndex := 0;
  end;
end;

 

Но теперь у всех ListItemImage отображается пустышка, даже там, где должна быть правильная картинка.

Пробовал использовать событие UpdatingObjects, но в этом случае грузится правильная картинка, а пустышка не грузится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

Не помогло. Выводится картинка из базы, а пустышка - нет.

 

procedure TfmMain.lvObjectsUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
Var
 ListItemImage: TListItemImage;
begin
  if Assigned(AItem) then
  begin
    if Assigned(AItem.Objects.FindObjectT<TListItemText>('btnEdit')) then
      AItem.Objects.FindObjectT<TListItemText>('btnEdit').Text := '...';

    ListItemImage := AItem.Objects.FindObjectT<TListItemImage>('img');
    if Assigned(ListItemImage) then
      if assigned(ListItemImage.Bitmap) then
        if ListItemImage.Bitmap.IsEmpty then
          ListItemImage.ImageIndex := 0;

  end;// if
end;

 

без строки "if assigned(ListItemImage.Bitmap) then" вываливается AV

 

эта строка всегда возвращает FALSE

 

if assigned(ListItemImage.Bitmap) then

поэтому-то и не доходит дело до

ListItemImage.ImageIndex := 0;

 

 

Может картинку-пустышку можно подсунуть через  LiveBindings?

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 06.08.2017 в 09:31, x11 сказал:

без строки "if assigned(ListItemImage.Bitmap) then" вываливается AV

 

обратите внимание, что я написал выше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


  • Похожий контент

    • От Виталий Иванов
      Есть такая идея. 
      Загружаю в TListView много элементов (от 500 до 1000 может и более) ситуация вынуждает грузить именно столько . Так вот когда начинаю создавать их кастомно после создания приходится вызвать oItem.Adapter.ResetView(oItem) (Если этого не делать то не корректно рассчитывается высота и ещё пару багов )  что соответсвенно вызывает подвисание интерфейса на Windows все круто это не так в глаза бросается, а на Android печалька форма зависает от 10 до 30 секунд 
      Так вот сам вопрос можно ли как это сделать в отдельном потоке что бы пользователю показывать какой нибудь Waiter. Или может кто как по другому предложит реализовать ? 
      Смотрел в сторону динамической подгрузки итемов но хотелось бы что и его поиск работал . 
    • От Alex Bozhko
      Вопрос из серии "чего-то странного хочется".
      Предположим, я хочу написать собственный ListView. Если я наследую от TListView, то всё нормально. Я его регистрирую с помощью процедуры Register
      Примерно так:
      procedure Register; begin RegisterComponents('<Моя вкладка>', [TМойListView]); end; И всё работает.
      Но, как показывает практика, в том числе пример Равиля Зарипова (https://github.com/rzaripov1990/ModernListView) для того, что бы написать полноценный ListView, наследоваться надо от предков TListView, едва ли не от TStyledControl.
      Дальше возникает вопрос. Где и как правильно регистрировать вновь созданный компонент?
      Если зарегистрировать компонент с помощью процедуры Register, то при размещении компонента на форме в окне Structure к вновь созданному компоненту не привязывается ItemAppearence.

       
      Да и IDE падает.
      Прилагаю файл с кастомным ListView. Сделан по аналогии с оригинальным, изменены только названия.
       
       
      My.FMX.ListView.zip
    • От Виталий Иванов
      Вопрос к экспертам
      Возникла необходимость и хотел спросить можно ли как-то сделать TlistViewItem  прозрачным, а то получается что сам TlistView может быть прозрачным а его итем нет . Это как-то же делаться у TListBoxItem. 
      Заранее огромное спасибо.
    • От x11
      ListView в режиме appearance.
      Добавил пару TListItemGlyphButton, указал в свойстве ButtonType - CheckBox. Но при работе приложения - пустота.
      Другие типы кнопок тоже не отображает.
      ЧЯДНТ.
    • От x11
      По совету krapotkin`a
      http://fire-monkey.ru/topic/4595-listview-скрывает-повторяющийся-текст-заголовков/?do=findComment&comment=29209
       
      Забросил LiveBinding при заполнении TListView и начал заполнять ручками.
      Почти всё хорошо за исключением загрузки картинки из базы.
      При использовании LiveBinding картинка грузилась, а теперь просто пустота.
      На Windows картинки грузятся и отображаются, а на Андроиде не хотят.
       
      Вот часть кода загрузки
      Var stream: TBlobStream; ... begin .... lv.BeginUpdate; try lv.Items.Clear; qObjects2.close; qObjects2.Open; while not qObjects2.Eof do begin item := lv.Items.Add; item.Data[sItemId] := qObjects2id.AsString; item.Data[sItemPrice] := qObjects2price.AsString; item.Data[sItemType] := qObjects2type_name.Value; ... ... ... ListItemImage := Item.Objects.FindObjectT<TListItemImage>(sItemImg); stream := TBlobStream.Create(qObjects2img, bmRead); try if stream.Size <= 0 then ListItemImage.ImageIndex := 0 else ListItemImage.Bitmap := TBitmap.CreateFromStream(stream); finally stream.Free; end;  
      К ListView прикреплен список картинок, где есть картинка-пустышка, которая грузится, если у записи нет картинки.
      вот этой строкой ListItemImage.ImageIndex := 0
      картинки-пустышки нормально отображаются и на Андроид-устройстве в том числе.
      Ошибок нет, а просто пустой TListItemImage там, где должна быть картинка.
      Может, я какое-то свойство забыл включить у TListItemImage?
      При отладке видно, что картинка загружается из базы.
       
       
    • От x11
      Сделал такой эксперимент в событии OnUpdateObjects
      if AItem.Purpose in [TListItemPurpose.Header] then Memo1.Lines.Add(AItem.Text);  
      И в memo загрузилось в два раза больше строк, чем элементов списка.
      Это нормально, так и должно быть?
    • От Просто Проги
      Привет всем,Суть такова вот эта процедура не работает что не правильно ? или LsImage не может так делать напрямую как делал Listbox ?
      делаю в цикле
      for I := 0 to Length(tovar)-1 do
       begin
      TListItemImage(Item.Objects.FindDrawable('Img')). Bitmap.LoadFromUrl(tovar.img);
      end;
      В товар находится адрес картинки всё как бы правильно, но не выгружает(
    • От x11
      В TListView есть картинка и другие поля. В поля уже выводятся данные из таблицы с помощью LiveBinding.
      Добавил новое поле в DataSet типа TBlobField, но LiveBinding Designer это поле не отображает, не видит его, поэтому и к картинке не могу привязать.
      Так и должно быть или это баг?
    • От x11
      1. Почему кнопка располагается во время работы программы не так, как я её расположил в дизайне?
      2. Как привязать кнопку к правому краю? Если установить "Trailing" в свойстве Align, то кнопка вообще исчезает.
       
       


    • От x11
      Данные в ListView грузятся из таблицы через BindSourceDB1.
      Добавил кнопку TImageObjectAppearance, но у кнопки нет свойства, отвечающего за картинку. Как добавить картинку в моём случае?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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