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

Доступ к объекту стиля через StylesData в одном из примеров для XE8


FIL

Вопрос

Всем привет!

 

Копался в примерах к версии ХЕ8 и в одном из них (Object Pascal\FireMonkey Desktop\CustomListBox) наткнулся на такую строку кода:

      Item := TListBoxItem.Create(nil);
      ...
      Item.StylesData['icon'] := OpenDialog1.Files[i]; // <---

которая, как я понимаю, должна грузить картинку из файла (???), т.к. icon - это TImage.

По факту, ни ошибок нет, ни картинки.

 

Объясните, что это за конструкция такая и почему она не работает?

Ссылка на комментарий

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

  • 0

И еще...

В том же самом примере при другом способе добавления рисунка:

Item.ItemData.Bitmap := Image1.Bitmap

этот самый рисунок появляется на Item'е только если его (Item) с помощью прокрутки убрать за границы ЛистБокса, а потом снова показать.

post-1506-0-30281200-1439667020_thumb.jp

Изменено пользователем FIL
Ссылка на комментарий
  • 0

При загрузке изображения через:

Item.ItemData.Bitmap := Image1.Bitmap;

заставить его перерисоваться можно так:

Item.NeedStyleLookup;

(на эмуляторе Андроида работает)

 

 

 

Если сделать так:

Item.StylesData['icon'] := OpenDialog1.Files[i];
Item.StylesData['icon.visible'] := True;

то изображение тоже появляется, но после прокрутки исчезает навсегда.

 

Если в этом же коде переименовать icon, например, в icon1, то изображение грузится, но после прокрутки иногда исчезает, а иногда - нет, но всегда появляется у некоторых других итемов, где его быть не должно:

post-1506-0-06295400-1439717963.jpg

Изменено пользователем FIL
Ссылка на комментарий
  • 0

Вот уже в который раз обсуждается подобный вопрос...

Я бы даже сказал - тот же самый!

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

Отройте ссылку и в фрагменте кода найдите КЛЮЧЕВУЮ! строку:

newItem.OnApplyStyleLookup := MissMessageApplyStyle;

Смысл - переопределите событие OnApplyStyleLookup для создаваемых итемов, а внутри MissMessageApplyStyle (назовите как угодно..) - перерисовывайте содержимое. Т.е. - буквально, обновляйте содержимое "ручками".

Тогда у Вас будет все работать как надо, картинки пропадать не будут, и т.д. и т.п.

 

З.Ы. И да, еще. Если ваш итем ну очень сложный какой-то, например, с необходимостью отрисовки срок разными цветами или что-то еще сложнее - можете переопределить OnRepaint...

 

З.З.Ы. В той же теме можете увидеть, насколько сложные итемы я создавал и что у них внутри есть, и все работает как надо...

Изменено пользователем AlexG
Ссылка на комментарий
  • 0

AlexG, да как правильно делать я уже примерно представляю: icon по умолчанию грузится из Item.ItemData.Bitmap или ImageList. Если добавляется свой эл-т в стиль, то он "настраивается" в обработчике OnApplyStyleLookup.

 

Но в данной теме речь идет не о моем говнокоде, а об официальном примере от разработчиков ХЕ8.

Вообще-то, некоторые при изучении ФМ пытаются ориентироваться, в том числе, и на данные примеры, т.к. качественной информации по предмету совсем не дофига, а видят в итоге наскоро слепленную фигню, которая еще больше запутывает.

 

AlexG, по ссылке код из MissMessageApplyStyle полностью повторяется в AddMissMessageItem. По идее, его же можно заменить на вызов MissMessageApplyStyle или NeedStyleLookup, или там есть какой-то другой тайный смысл?

Ссылка на комментарий

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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