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

RoschinSpb

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

    187
  • Зарегистрирован

  • Посещение

  • Победитель дней

    10

Сообщения, опубликованные RoschinSpb

  1. Если всё кидать на Tabы то очень скоро форма превратится в венегрет, где ничего невозможно найти. Гораздо удобнее работать с формой/фреймом на котором есть минимально необходимый набор контролов. А фреймы можно уже кидать на табы, панели или еще куда - дело вкуса.

  2. 3 минуты назад, Tumaso сказал:

    В чем беда - у TRectangle и TImage нет свойств .Images и .ImageIndex, получать изображения из TImageList приходится вручную. Не проблема, но хотелось бы это делать также просто, как у TButton

    Этого делать не стоит. Используйте http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.ImgList.TGlyph

    TImage уже сам по себе содержит изображение и разные методы для работы с ним, если там будет в дополнение ко всему ссылка на другое изображение, то не понятно что же все таки рисовать если задано и то и другое. Это была бы полная путаница (коей и так достаточно), поэтому для рисования изображений из TImageList сделан отдельный компонент который используется в TButton и т.п.

  3. Да, мило. Как уже было сказано можно подгружать фотографии и в 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 (должно быть не меньше чем максимальное количество одновременно видимых картинок на экране).

  4. 13 часа назад, Tumaso сказал:

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

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

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

  5. 5 часов назад, Tumaso сказал:

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

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

  6. В 01.11.2017 в 15:50, Вольдемар сказал:

    вот -вот

    Вольдемар + valdemar 

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

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

  7. На кнопках размер картинки определяется только стилем кнопки, из TImageList берется картинка наиболее подходящего размера (если их несколько) и растягивается, или  сжимается до нужного размера с учетом масштаба дисплея. ActionList вообще ни как на картинку не влияет, там хранится только номер.
    Кстати что за вопрос-то?

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

  9. Делать привязку к KeyDown я бы вообще не рекомендовал. Была б моя воля я бы такие события, которые работают с физическими устройствами (OnMouseXXX, OnKeyYYY) вообще выпилил, ну нету на телефоне ни физической мыши, ни клавиатуры. Сенсорный экран есть и голосовой ввод есть, но это несколько иные вещи. Попытка эмулировать виндовое поведение, ради совместимости которой всё равно нет, приводит к таким вот проблемам.

    Если надо что-то сделать, с введенным текстом, то реагировать можно в OnChange, OnExit или вообще по нажатию на кнопку "Ok" делать подмену десятичного разделителя.

  10. Во-первых посмотрите работает ли демо. Если нет, то пишите жалобу, при мне работало :)
    Во-вторых, если работает демо, найдите десять отличий своего проекта и демонстрационного.

    Например, поскольку у Вас есть связь с набором данных, то лучше использовать не TStringGrid, а TGrid.

    Screen.thumb.png.4cad5a19dceb443713c94fed5ed45839.png

     

  11. Цитата

    есть колонка "status" со значениями от 0 до 10 ... в StringGgrid вместо значений выводить картинку из imageList равную значению (значение 3 = номер imageList = 3 и тд) ...  я имел ввиду  динамически загрузить.

    В хорошо поставленном вопросе содержится половина ответа, но это не про Вас...

    И так чего не понятно из рекомендованного примера? Назначаете свойство Images у вашей сетки (StringGrid). Делаете щелчок правой кнопкой мыши где-то на заголовке GtringGrid, добавляете колонку TGlyphColumn (используя пункт открывшегося контекстного меню). Эта колонка теперь будет отображать картинку с соответствующим номером, вместо текста 0, 1,2,3 и т.п. В том же примере есть варианты работы с наборами данных.

  12. Про 

    bmp.Clear(TAlphaColorRec.Null)

    надо не забывать. В Windows новая картинка создается уже заполненной нулями, хотя гарантий нет, а вот на других платформах — память содержит мусор, хотя гарантий тоже нет, поэтому вполне может работать на одном дэвайсе нормально, а на другом выдавать мусор.

  13. 4 часа назад, kami сказал:

    Не знаю... ни в D7, ни в D2010 не  сталкивался с изменением dfm-ок в плане картинок. В том числе - в ImageList.

    А что я постоянно сталкиваюсь в Delphi6... если любые изменения были, то TImageList тоже меняется. Может, конечно, тоже от картинки зависит.

  14. 15 часов назад, kami сказал:

    Если я правильно понял, то таких багов уже зарепортена толпа. Начиная от того, что каждое сохранение формы со StyleManager (даже если на форме вообще ничего не трогали) приводит к практически полному изменению картинок в стиле. В любой системе контроля версий это видно великолепно. Задалбывает каждый раз выборочно ревертить изменения.

    Картинки меняются даже в Delphi 6 (не XE6), но вот заметных артефактов не наблюдается.

  15. Да, проблема в стрим. И скорее всех на уровне ОС Windows. Сама Fire Monkey не занимается кодированием-декодированием png-файлов.

    procedure TForm2.UpdateBitmap(var Bitmap: TBitmap);
    var
      Stream: TMemoryStream;
    begin
      if Bitmap <> nil then
      begin
        Stream := TMemoryStream.Create;
        try
          Bitmap.SaveToStream(Stream);
          FreeAndNil(Bitmap);
          Stream.Position := 0;
          Bitmap := TBitmap.Create;
          Bitmap.LoadFromStream(Stream);
        finally
          FreeAndNil(Stream);
        end;
      end;
    end;

    При однократном перекодировании артефакты практически не заметны так что на других платформах это не столь критично.

    Заметно становится только при многократном перекодировании, что и происходит в IDE. Есть кто с честной версией? Может продублируете багрепорт со ссылкой на https://quality.embarcadero.com/browse/RSP-18210.

×
×
  • Создать...