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

Загрузка картинок из папки в ImageList


gonzales

Вопрос

Доброго всем!

Вот процедура загрузки картинок *png в imagelist

procedure TForm1.LoadImages;
var
  Layer: TLayer;
  c: TCustomSourceItem;
  B: TCustomBitmapItem;
  d: TCustomDestinationItem;
  Item: TListBoxItem;
  i: integer;
  sRec: TSearchRec;
  isFound: boolean;
  filecount: integer;
begin
  isFound := FindFirst(Form1.imagefolder + '*.png', faAnyFile, sRec) = 0;
  while isFound do
  begin
    showmessage(sRec.Name);
    d := ImageList1.Destination.Add;
    Layer := ImageList1.Destination[d.index].Layers.Add;
    Layer.SourceRect.Rect := TRectF.Create(TPoint.Zero, 48, 48);
    c := ImageList1.Source.Add;
    Layer.Name := c.Name;
    c.MultiResBitmap.TransparentColor := TAlphaColorRec.Fuchsia;
    B := c.MultiResBitmap.Add;
    B.Bitmap.Assign(B.CreateBitmap(Form1.imagefolder + sRec.Name));
    application.ProcessMessages;
    isFound := FindNext(sRec) = 0;
  end;
  FindClose(sRec);
end;

Она работает, но есть проблема. Картинки в папке пронумерованы: 001.png, 002.png и т.д.

В винде, как и положено обработка начинается с первой и кончается последней картинкой. Соответственно ImageIndex у картинок соответствует названию файла (практически).

В Андроиде файлы из папки берутся в порядке их деплоя. Почему - не понятно.

Решение конечно есть - задеплоить файлы в нужном порядке, но в Deployment менеджере нет сортировок или перемещений вверх вниз. Придется каждый файл удалить и заново прописать. Может кто знает, как это сделать правильно?

Заранее спасибо за ответы

 

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

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

  • 0

Вообще deplyment менеджер работает странно. При добавлении файла он не добавляется в конец списка а падает хаотично в середину. Логику данного процесса понять не удалось. 

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

Добрый день.

Если все ваши картинки пронумерованы по порядку, и вы знаете номера первой и последней картинки, то просто грузите их в цикле

for i:= n1 to nn do

 

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

Добрый день gonzales.


Не проще ли будет сначала загрузить имена файлов в List (Подойдет даже TStringList), отсортировать как необходимо, а затем уже по этому списку грузить картинки? 

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

Не проще ли будет сначала загрузить имена файлов в List (Подойдет даже TStringList), отсортировать как необходимо, а затем уже по этому списку грузить картинки? 

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

И вторая странность, почему в деплой-менеджере при добавлении файла он попадает не в конец списка а куда-то в середину, причем, например файл 017.png в 3-ю строчку, а файл 018.png в 15 строку(((

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

http://docwiki.embarcadero.com/Libraries/Seattle/en/System.IOUtils.TDirectory.GetFiles

и никаких проблем с сортировкой )

Спасибо за наводку.
На новых версиях Delphi редко приходится работать :(.

Но по поводу

Цитата

и никаких проблем с сортировкой)

позвольте усомниться.

 

В System.IOUtils стоит следующее:

class function TDirectory.DoGetFiles(...): : TStringDynArray;
....
begin
....
....
{$IFDEF LINUX}
  TArray.Sort<string>(ResultArray); 
{$ENDIF}
  Result := ResultArray; 
end;

Смотрел в Berlin'е и Tokyo. 
 

 

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

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

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

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

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

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

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

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

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

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

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