Уважаемые форумчане!
Поздравляю Вас с Наступающим Новым Годом и Рождеством!
Пусть 2017 год станет новым этапом на Вашем пути и принесет успех, самореализацию и, конечно же, счастье.
@AlexG я проверил то что вы описали. в принципе работает, но для статики
почему не работает для динамической подгрузке, точней не совсем работает.
порядок действий
1) получаю с сервера список картинок
2) заполняю текстом Item'ы
3) присваиваю событие OnApplyStyleLookup для Item'а
4) в событии ItemApplyStyleLookup пишу следующее
procedure TForm13.ItemApplyStyleLookup(Sender: TObject);
begin
LoadBitmapFromURL((Sender as TListBoxItem).TagString, (Sender as TListBoxItem).ItemData.Bitmap);
end;
как видим на картинках несколько айтемов не обновились, т.к. они не могут выйти за пределы области (чтобы обнулить стиль и вызвать событие OnApplyStyleLookup)
и при таком подходе все время картинка будет скачиваться из интернета, что не есть хорошо
UPDATE: добавил проект
LB_dload.zip
Под спойлером я оставил скриншот, там раскрывается проблема.
>Проблема будет при кешировании стиля и восстановлении стиля из хеша
Исправить проблему, в принципе можно, как мне кажется, но вот кому оно нужно, разработчики сами не могут этого сделать, было бы желание...
Я хотел поковырять FMX, но вот желание отпало по некоторым причинам...
var
Img: TImage;
begin
Img := TImage.Create(nil);
try
Img.Bitmap.LoadFromFile(FileName);
//Img.Bitmap.LoadFromStream();
Button1.StylesData['Image.MultiResBitmap'] := Img.MultiResBitmap;
finally
Img.Free;
end;
end;
Не самый лучший пример, при том, что в вашем случае работать все-равно не будет, а что конкретнее:
bitmap.zip
Битмап нужно где-то хранить.
При вызове OnApplyStyleLookup просто обновляйте его. Как в моем примере. Только в Вашем случае это будет TImage (как понимаю).
var
StyleObject: TFmxObject;
........
StyleObject := FindStyleResource('picturechat') as TImage;
if Assigned(StyleObject) then
try
TImage(StyleObject).Visible := // TRUE/FALSE
TImage(StyleObject).OnClick := // Ваш обработчик, если надо
if not MBitmap.IsEmpty then
try
if not GlobalUseGPUCanvas then
TImage(StyleObject).Bitmap.Canvas.BeginScene;
TImage(StyleObject).Bitmap := MBitmap; // ваш битмап
finally
if not GlobalUseGPUCanvas then
TImage(StyleObject).Bitmap.Canvas.EndScene;
end;
finally
end;
типа того.
'picturechat' - ваша картинка в стиле Итема
а хранить изображения можно как контейнерах, так и читать из файлов (все достаточно быстро по скорости!)
а вот с подгрузкой из инета - не знаю - Вам самим решать. Оптимально, думаю, загружать в контейнер, предварительно изменив размер до минимально необходимого.
P.S. Забыл про StylesData
можно так:
вместо всего что написано выше, записать просто
StylesData['picturechat.bitmap'] := MBitmap;