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

Кнопка с картинкой


Вольдемар

Вопрос

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

  • 0
4 часа назад, valdemar сказал:

кидаешь на форму ImageList1, в неё загружаешь картинку, в TButton в images выбираешь ImageList1 и ставишь индекс картинки.

Странно ведет себя ImageList. Он заточен под размер 16 на 16 ?

Ссылка на комментарий
  • 0
10 часов назад, wamaco сказал:

valdemar и Вольдемар :))

совпадение?

 

Не думаю.

16 часов назад, Вольдемар сказал:

Странно ведет себя ImageList. Он заточен под размер 16 на 16 ?

Да, действительно, только 16х16. Тогда советую использовать ImageControl1 вместо кнопки, чтобы была полноразмерная картинка.

Ссылка на комментарий
  • 0
55 минут назад, valdemar сказал:

Да, действительно, только 16х16. Тогда советую использовать ImageControl1 вместо кнопки, чтобы была полноразмерная картинка.

59f97b9a667cf_shoot(87).gif.0a67c9c99f1e6a622018e33ce7634efa.gif

Ссылка на комментарий
  • 0
2 часа назад, Rusland сказал:

в ImageList размер может быть любой

Там да, а на кнопке отображается 16х16 при любом размере загруженной картинки.

Ну или можно использовать стили, и забыть image - как пережиток VCL

Изменено пользователем valdemar
Ссылка на комментарий
  • 0
В 01.11.2017 в 15:50, Вольдемар сказал:

вот -вот

Вольдемар + valdemar 

Компонент TImageList - один из самых задокументированных компонентов FM, также имеется демонстрационное приложение входящее в поставку Delphi, кроме того есть две статьи на русском языке про TImageList и видео с примерами работы, не говоря уже об обсуждениях на этом сайте... к чему это я? А... вот вспомнил, это я к тому, что если вы не смогли найти подходящей информации по теме, то это хороший повод задуматься о своём месте в мироздании. Кажется, программирование это не ваше призвание. Возможно в качестве кондуктора, или дворника вы бы принесли гораздо больше пользы человечеству.

Спасибо за понимание.

Изменено пользователем RoschinSpb
Ссылка на комментарий
  • 0
2 часа назад, RoschinSpb сказал:

Вольдемар + valdemar 

Компонент TImageList - один из самых задокументированных компонентов FM, также имеется демонстрационное приложение входящее в поставку Delphi, кроме того есть две статьи на русском языке про TImageList и видео с примерами работы, не говоря уже об обсуждениях на этом сайте... к чему это я? А... вот вспомнил, это я к тому, что если вы не смогли найти подходящей информации по теме, то это хороший повод задуматься о своём месте в мироздании. Кажется, программирование это не ваше призвание. Возможно в качестве кондуктора, или дворника вы бы принесли гораздо больше пользы человечеству.

Спасибо за понимание.

Функционал TImageList конечно хорош, но совершенно невозможно становится работать, когда в TImageList в designtime загружено например 50 Мб изображений и больше. IDE просто начинает вставать, например просто выделение любого компонента на экране может длится 5 секунд (и это на весьма и весьма хорошем компе), в папке __history общий размер версий файла формы  начинает измеряться в гигабайтах.

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

неясно, в чем проблема-то

ImageList виноват, что вы запихали 50 мб в него ???

или что IDE сохраняет полные версии форм в history ?

ну так переработайте алгоритм

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

Так суть TImageList в том и состоит, что он является коллекцией изображений. И конфигурируем мы его как правило именно в design-time, не? А если его нельзя использовать для управления 50 Мб картинками, то возникает вопрос необходимости использования этого компонента в принципе. Отключить в IDE сохранение истории конечно можно, но зачем тогда люди старались, делали такую фишку? :) Мне иногда пригождается.

И да, я переделал работу с картинками - картинки хранятся в файлах, я их загружаю при старте приложения в TList<TImage> (вернее какие то изображения сразу, какие то при необходимости, какие то после использования в памяти уничтожаю). Работает быстро, проблемы тормозов при разработке нет.

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

основная фишка TImageList в том, что он умеет хранить в одном большом изображении набор иконок одного размера. И еще умеет выбирать Scale. Это удобно, когда делаешь дизайн программы

Все остальное вы предположили самостоятельно

поэтому подбирайте алгоритм и инструменты в соответствии с задачей

по мне так для вашей задачи больше подходит TObjectList<TBitmap>

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

Да, я сначала использовал именно TObjectList<TBitmap>, но столкнулся с тем, что на андроиде у TBitmap не было выделенного дескриптора, а если использовать bitmap у TImage, то всё ок. Честно скажу, что гуглил мало, возможно что то не допонял / не доделал. 

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

нет, речь про андроид

суть в том, что когда я делал

var
  LBitmap: TBitmap;
begin
  LBitmap := TBitmap.Create;
  try
    LBitmap.LoadFromFile(LSomeFileName);  // здесь ок, загрузка успешна
    // начинаем что нибудь делать с этим битмапом в андроиде, получаем экспешн
  finally
    LBitmap.DisposeOf;
  end;
end;

 

Ссылка на комментарий
  • 0
5 часов назад, Tumaso сказал:

А если его нельзя использовать для управления 50 Мб картинками, то возникает вопрос...

Любопытно было бы взглянуть на приложение которое работает на телефоне и грузит 50Мб картинок в кнопки во время старта.

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

я использовал подобный код. все было совершенно нормально. только вместо DisposeOf обычное Free. 

нужно только помнить, что битмап до Токио -не работает в потоках

Ссылка на комментарий
  • 0
1 час назад, RoschinSpb сказал:

Любопытно было бы взглянуть на приложение которое работает на телефоне и грузит 50Мб картинок в кнопки во время старта.

Узко мыслите, коллега. Картинки используются не только на кнопках, а еще как фоновые картинки на фреймах, локализация изображений для разных стран (все помнят про разный символ земного шара в разных странах?) и т.д, вариантов применения статических изображений в приложении миллиард. А 50 Мб не предел, у дизайнеров UI в моей компании очень много идей.

По идее TImageList и должен брать на себя всю черновую работу по работе с изображениями, чтобы не приходилось использовать свои TList<TImage>, не правда ли?

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

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

в TImageList тоже можно загружать картинки динамически

Ссылка на комментарий
  • 0
13 часа назад, Tumaso сказал:

По идее TImageList и должен брать на себя всю черновую работу по работе с изображениями, чтобы не приходилось использовать свои TList<TImage>, не правда ли?

Всю работу, так он выполняет, или рисовать тоже должен не хуже фотошопа? Как я понял у вас проблема, IDE долго работает с 50Мб формой? Так это наверно вопрос к IDE, диску, SVN... и да TImageList не предназначен для хранения архива фотографий. Он предназначен для хранения пиктограмм для интерфейсных элементов. Были мысли по расширению возможностей и подзагрузки изображений в RunTime из разных источников (файлы, ресурсы, интернет), но не судьба уже видимо.

Ну, как я понимаю скриншотика мобильного приложения с 50Мб картинок мы не дождемся. Я даже подозреваю почему.

Ссылка на комментарий
  • 0
3 часа назад, RoschinSpb сказал:

Были мысли по расширению возможностей и подзагрузки изображений в RunTime из разных источников (файлы, ресурсы, интернет), но не судьба уже видимо

Почему не судьба?

Ссылка на комментарий
  • 0
31 минуту назад, RoschinSpb сказал:

Ну, как я понимаю скриншотика мобильного приложения с 50Мб картинок мы не дождемся. Я даже подозреваю почему.

Намекаете, что приложения не существует? Существует :D 

00.png

01.png

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

Да, мило. Как уже было сказано можно подгружать фотографии и в TImageList в RunTime, примеров тут есть.

begin
  Button1.Images := ImageList1;
  Button1.ImageIndex := ImageList1.AddOrSet('Add', [1, 1.5, 2],
    ['D:\Мои веселые картинки\Icons\add16.png',
     'D:\Мои веселые картинки\Icons\add24.png',
     'D:\Мои веселые картинки\Icons\add32.png']);
end;

Тогда в отличие от TList будет автоматически разруливаться ситуация с большим количеством одновременно созданных TBitmap.
TBitmap это довольно ресурсоёмкий объект (отсюда и возможные ошибки с дескрипторами) их количество ограничено, особенно на телефонах, TImageList хранит данные хоть и в памяти но просто в виде двоичных данных (в формате PNG), при этом системные объекты создаются и уничтожатся по мере использования, максимальное их количество можно задать свойством CacheSize (должно быть не меньше чем максимальное количество одновременно видимых картинок на экране).

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

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

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

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

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

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

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

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

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

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

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