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

Лидеры

  1. AngryOwl

    AngryOwl

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


    • Баллы

      4

    • Постов

      394


  2. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      3

    • Постов

      2 124


  3. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      1

    • Постов

      2 517


  4. Kitty

    Kitty

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


    • Баллы

      1

    • Постов

      792


Популярный контент

Показан контент с высокой репутацией 04.01.2017 во всех областях

  1. AngryOwl

    [ListBox] загрузка картинок

    1. Создайте свой стиль для ListBoxItem, например 'listboxitemMystyle', скопировав стандартный и переобозвав его. В своем стиле Итемов просто сделайте невидимым Detail. Или, что еще лучше, - храните Ваши ссылки в TagString Итема. 2. В Style Designer, при редактировании Вашего listboxitemMystyle, вставьте TImage задайте ему необходимые свойства: выравнивание, размеры, отступы и т.д. (не забудьте сделать "растягивание" или что там Вам требуется - просто проверьте в дизайнере). И задайте Вашему TImage имя, например, 'myimagestyle'. 3. При загрузке изображения я бы рекомендовал сначала загрузить изображение в созданный TBitmap, а потом уже грузить его в наш 'myimagestyle'. А самое оптимальное решение - загрузка изображений в "контейнер", в фоновом режиме, а при окончании загрузки, по событию, - отрисовка уже в самом итеме. В любом случае - сначала в битмап, а потом этот битмап в Итем. Иначе, вероятность того что битмап отрисуется в вашем случае - практически нулевая. 4. Далее, при создании итемов: procedure ContactList_AddItem(Sender: TObject); var newItem : TListBoxItem; newBitmap : TBitmap; begin newItem := TListBoxItem.Create(nil); newItem.StyleLooup := 'listboxitemMystyle'; // хотя будет проще не писать этого, а прописать в ListBox1.DefaultItemStyles.ItemStyle newItem.Text := 'текст'; newItem.TagString := тут может быть Ваша ссылка newBitmap := TBitmap.Create; newBitmap.LoadFrom ....... // грузим картинку newItem.TagObject := newBitmap; newItem.OnApplyStyleLookup := MyItemApplyStyle; ListBox1.AddObject(newItem); end; procedure MyItemApplyStyle(Sender: TObject); var LI : TListBoxItem; tmpBitmap : TBitmap; begin LI := Sender as TListBoxItem; if Assigned(LI) then try LI.BeginUpdate; tmpBitmap := LI.TagObject as TBitmap; if Assigned(tmpBitmap) then LI.StylesData['myimagestyle.bitmap'] := tmpBitmap; // тут вообще можно обновлять все что угодно в этом Итеме finally LI.EndUpdate; end; end; Собственно все. Сорри если что не понятно - писал "от руки", без проверки. Но вроде все просто.
    2 балла
  2. Brovin Yaroslav

    Описание TfgImageList

    Первый набросок компонента, позволяющего организовать централизованное хранение графических ресурсов для всех платформ. Основные особенности: Спроектирован для использования одного экземпляра изображения во многих компонентах. Позволяет хранить все графические ресурсы любых размеров. В будущем не будет грузить картинки в память, если они не используются. А будет подгружать их из файла по мере необходимости. Тем самым будет значительно экономиться память. Хранение именованных графических ресурсов, а не по индексу. Это позволяет отразить в названии назначение картинки. Использование папок. Группировка изображений по смыслу для удобства работы с ними. Возможность загрузки разных картинок для разных устройств, или же загрузить один набор картинок для всех устройств. Удобная и быстрая загрузка изображений путем перетаскивания Хранение отступов изображения. Наглядное отображение картинки в свойствах компонентах. При изменении имени картинки, в компонентах используемых картинку идет автоматическое обновление имени картинки. В стандартном TImageList, из-за индексной структуру все картинки съезжают и при удалении картинки, компонент начинает отображать уже другую картинку.
    1 балл
  3. Brovin Yaroslav

    Описание TfgRectangle

    Описание Назначение: Компонент предназначен для отображения прямоугольника. Главное отличие от стандартного TRectangle - это возможность округления позиции и размера прямоугольника для избежания размытия границ. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\ShapesDemo\ShapesDemo.dproj Возможности Одной из проблем графических примитивов в FMX - это размытие границ, вызванное отсутствием привязки изображения к физическим пикселям экрана. Поэтому любое смещении координат прямоугольника на дробную часть приводит к размытию границы. Это хорошо видно на скриншоте ниже (Граница самого нижнего прямоугольника размыта, по сравнению с прямоугольниками выше) Округление к физическим пикселям - TfgRectnalge.AlignToPixels Настройка отображения углов - TfgRectangle.Corners Настройка закругления внешних углов - Corners.RadiusX, Corners.RadiusY Настройка способа вывода угла - Corners.CornerType Указание какие углы выводить - Corners.Corners Настройка цвета границы - TfgRectangle.Stroke Настройка заливки - TfgRectangle.Fill
    1 балл
  4. Brovin Yaroslav

    Описание TfgImageList

    Пока сложно о чем-то говорить. Но надеюсь, что все первоначальные задумки исполнятся.
    1 балл
  5. Присоединяюсь! Желаю всем здоровья, благополучия и успехов в работе и личной жизни! С наступающим Новым Годом!
    1 балл
  6. egorea1999

    [ListBox] загрузка картинок

    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
    1 балл
  7. #WAMACO

    С Наступающим Новым Годом!

    С Новым годом! Удачи, здоровья, всех благ!
    1 балл
  8. Kitty

    С Наступающим Новым Годом!

    Шарик ветром развернуло. С Новым Годом!
    1 балл
  9. @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
    1 балл
  10. AngryOwl

    [ListBox] загрузка картинок

    Я [ZuBy] уважаю! Но не слушайте его, в данном случае! )))) Я с ним не согласен. Точнее - не совсем. У TListBox есть ряд свои преимуществ! Причем, зачастую, довольно существенных. Которые никакие TListView не перекрывают. По крайне мере пока. Во-первых - если речь идет о Винде, то это возможность плавного скроллинга. Чего нет у TListView. Не знаю кому как из разрабов, а рядового пользователя это часто бесит - прокрутка "рывками". Во-вторых - TListBox и его TListBoxItem'ы все же намного проще "рисовать". В смысле - создание своего шаблона пока еще намного проще чем у TListView. Вы можете для TListBox очень просто создавать свои элементы списка. Несмотря на то, что TListBox существенно "тормознее" TListView, часто его скорости вполне достаточно. Все, разумеется, зависит от Ваших конечных целей. А что касается картинок в Итемах TListBox, то нужно просто переопределить ApplyStyle. Создайте свою процедуру, например ItemApplyStyle; Присвойте, при создании Итема, свой обработчик. Например newItem.OnApplyStyleLookup := ItemApplyStyle; А в ItemApplyStyle сделайте обновление картинки. Типа так: procedure TContactActions.ItemApplyStyle(Sender: TObject); var StyleObject: TFmxObject; lbx : TListBox; LI : TListBoxItem; begin LI := Sender as TListBoxItem; LI.BeginUpdate; try StyleObject := LI.FindStyleResource('picture') as TCircle; if Assigned(StyleObject) then begin TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.BeginScene(); try TCircle(StyleObject).Fill.Bitmap.Bitmap := ____тут_ваш_битмап__; finally TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.EndScene; end; end; finally LI.EndUpdate; end; end; Разумеется, все проверки и прочее - это уж Вы сами. И в моем примере это TCircle, а у Вас что - сами решите. Ну и можно для краткости (если там просто TImage) не писать все через StyleObject, а покороче, через StylesData['_имя_.bitmap'] и т.д. Ну и что на Delphi - не обессудьте! ) Смысл тут простой. Думаю, что в целом идея ясна.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...