FIL Опубликовано 15 августа, 2015 Опубликовано 15 августа, 2015 Всем привет! Копался в примерах к версии ХЕ8 и в одном из них (Object Pascal\FireMonkey Desktop\CustomListBox) наткнулся на такую строку кода: Item := TListBoxItem.Create(nil); ... Item.StylesData['icon'] := OpenDialog1.Files[i]; // <--- которая, как я понимаю, должна грузить картинку из файла (???), т.к. icon - это TImage. По факту, ни ошибок нет, ни картинки. Объясните, что это за конструкция такая и почему она не работает? Цитата
0 FIL Опубликовано 15 августа, 2015 Автор Опубликовано 15 августа, 2015 (изменено) И еще... В том же самом примере при другом способе добавления рисунка: Item.ItemData.Bitmap := Image1.Bitmap этот самый рисунок появляется на Item'е только если его (Item) с помощью прокрутки убрать за границы ЛистБокса, а потом снова показать. Изменено 15 августа, 2015 пользователем FIL Цитата
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 16 августа, 2015 Модераторы Опубликовано 16 августа, 2015 ответ тут Цитата
0 FIL Опубликовано 16 августа, 2015 Автор Опубликовано 16 августа, 2015 (изменено) При загрузке изображения через: Item.ItemData.Bitmap := Image1.Bitmap; заставить его перерисоваться можно так: Item.NeedStyleLookup; (на эмуляторе Андроида работает) Если сделать так: Item.StylesData['icon'] := OpenDialog1.Files[i]; Item.StylesData['icon.visible'] := True; то изображение тоже появляется, но после прокрутки исчезает навсегда. Если в этом же коде переименовать icon, например, в icon1, то изображение грузится, но после прокрутки иногда исчезает, а иногда - нет, но всегда появляется у некоторых других итемов, где его быть не должно: Изменено 16 августа, 2015 пользователем FIL Цитата
0 AngryOwl Опубликовано 16 августа, 2015 Опубликовано 16 августа, 2015 (изменено) Вот уже в который раз обсуждается подобный вопрос... Я бы даже сказал - тот же самый! Почти каждый раз пишу одно и то же, но все упорно наступают на те же самые грабли. При этом пытаясь меня убедить в том, что делать то я что я пишу - необязательно, и при этом жалуются что у них с их вариантами - не получается достичь нужного результата. Отройте ссылку и в фрагменте кода найдите КЛЮЧЕВУЮ! строку: newItem.OnApplyStyleLookup := MissMessageApplyStyle; Смысл - переопределите событие OnApplyStyleLookup для создаваемых итемов, а внутри MissMessageApplyStyle (назовите как угодно..) - перерисовывайте содержимое. Т.е. - буквально, обновляйте содержимое "ручками". Тогда у Вас будет все работать как надо, картинки пропадать не будут, и т.д. и т.п. З.Ы. И да, еще. Если ваш итем ну очень сложный какой-то, например, с необходимостью отрисовки срок разными цветами или что-то еще сложнее - можете переопределить OnRepaint... З.З.Ы. В той же теме можете увидеть, насколько сложные итемы я создавал и что у них внутри есть, и все работает как надо... Изменено 16 августа, 2015 пользователем AlexG Kitty и FIL 2 Цитата
0 FIL Опубликовано 16 августа, 2015 Автор Опубликовано 16 августа, 2015 AlexG, да как правильно делать я уже примерно представляю: icon по умолчанию грузится из Item.ItemData.Bitmap или ImageList. Если добавляется свой эл-т в стиль, то он "настраивается" в обработчике OnApplyStyleLookup. Но в данной теме речь идет не о моем говнокоде, а об официальном примере от разработчиков ХЕ8. Вообще-то, некоторые при изучении ФМ пытаются ориентироваться, в том числе, и на данные примеры, т.к. качественной информации по предмету совсем не дофига, а видят в итоге наскоро слепленную фигню, которая еще больше запутывает. AlexG, по ссылке код из MissMessageApplyStyle полностью повторяется в AddMissMessageItem. По идее, его же можно заменить на вызов MissMessageApplyStyle или NeedStyleLookup, или там есть какой-то другой тайный смысл? Цитата
0 AngryOwl Опубликовано 16 августа, 2015 Опубликовано 16 августа, 2015 "можно заменить на вызов MissMessageApplyStyle или NeedStyleLookup" Можно, конечно. При написании было не до оптимизации Цитата
Вопрос
FIL
Всем привет!
Копался в примерах к версии ХЕ8 и в одном из них (Object Pascal\FireMonkey Desktop\CustomListBox) наткнулся на такую строку кода:
Item := TListBoxItem.Create(nil); ... Item.StylesData['icon'] := OpenDialog1.Files[i]; // <---которая, как я понимаю, должна грузить картинку из файла (???), т.к. icon - это TImage.
По факту, ни ошибок нет, ни картинки.
Объясните, что это за конструкция такая и почему она не работает?
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.