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

marsden

Пользователи
  • Постов

    6
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные marsden

  1. Вот это самое сообщение - это как сноб сверху глядя, цедит - "понаехали тут...."

    В 09.03.2016 в 15:11, Error сказал:

    Да, действительно компоненты можно удалять только в мастере, т.к. мультивью работает через наследование форм, а в нем как и в наследовании классов нельзя просто взять и удалить поле/процедуру/функцию/проперти

    Вот если бы на "не самом редком языке" более вменяемые сообщения были - насколько было бы проще. Сложно было добавить "change "View" to "Master""?

    А еще непонятные "internal error", которые элементарно излечиваются очисткой проекта - но до этого же надо додуматься самому...

    А еще невозможность запустить сэмпл с длинным именем на андроиде - элементарно из за того, что не хватает длины командной строки. И сборка опять же обламывается с весьма "информативным" сообщением "не могу выполнить..."

     

  2. 15 часов назад, Евгений Корепов сказал:

    О, спасибо! Значит  ListItemImage.OwnsBitmap управляет типом ссылки на Bitmap - False - слабая ссылка, True нормальная ссылка. Вот почему в документации это не указать?

    потому что сделано через жжж. Зажми Ctrl и щелкни по OwnsBitmap, затем по SetOwnsBitmap - меня увиденное повергло в ступор и я понял, что ходить по этому канату надо со страховкой, иначе acces violation & invalid pointer обеспечен

  3. В 09.04.2017 в 22:51, Евгений Корепов сказал:

    Кстати, если кто объяснит что делает строчка ListItemImage.OwnsBitmap:=True, буду безмерно благодарен. Не люблю копипастить, без понимания что именно делает код. А лезть в исходники пока некогда.

    судя по исходникам, при установленном свойстве картинка считается собственностью ListItemImage и при ListItemImage.Destroy уничтожается. То есть для того, чтобы не было проблем с памятью и сегфолтами надо битмап копировать

  4. такая же проблема, но сделано все проще- у ListView выставлено свойство Images, Items создаются программно, у них выставляется ImageIndex.

    Как бы стандартный путь, но... В винде работает, а на смартфоне нет картинок (((

    UPD:

    Моё решение проблемы неотображаемых картинок в ListBoxItem на смартфоне (Android)

    1. Картинки находятся в ImageList1, размер 40х40

    2. ListView обычный стандартный без переделок,

    3. Delphi 10.2 Tokyo

    procedure TMyForm.ListView1UpdateObjects(const Sender: TObject;
      const AItem: TListViewItem);
    var I:TListItemImage;
        B:TBitmap;
    begin
      I:=AItem.Objects.FindDrawable('I') as TListItemImage; // такое имя у стандартного ListViewItem без всяких кастомизаций
      if I<>nil then begin
        B:=ImageList1.Bitmap(tsizef.Create(40,40),I.ImageIndex); // вытаскиваем картинку по индексу, который задан ранее при заполнении ListView
        I.OwnsBitmap:=true; // указываем ListViewItem, чтобы он уничтожал экземпляр картинки при своем уничтожении
        I.Bitmap:=TBitmap.Create; //создаем картинку, которая будет автоматом уничтожена
        I.Bitmap.Assign(B); // и копируем в нее контент
      end;
    end;

    Если не пользовать Assign, а напрямую присваивать I.Bitmap=ImageList1.Bitmap(.... , то при уничтожении ListViewItem возникает invalid Pointer, поскольку в TListItemImage.Destroy картинка уничтожается без всяких проверок - есть ли жизнь на марсе, нет ли жизни на марсе ли она вообще.

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