Здраствуйте.
В программе я заполняю Tgrid изображениями из Imagelist по имени фото который есть в ячейке . Код :
if column.index = 8 then //Загрузка картинок.
if not value.IsEmpty then
begin
column.BeginUpdate;
i:=StrToInt(maingr.Cells[column.Index,row]);
imageindex:=main_form.ImageList1.Source.IndexOf(IntToStr(i));
column.Canvas.Clear(RowColor.Color);
main_form.ImageList1.draw(column.Canvas,bounds,imageindex,100);
column.EndUpdate;
end;
Если я уберу очистку канвы то изображения накладуються. А так как есть следующий раз при вызове DrawColumnCell изображение остается только в последней записи.
Но такой код в процедуре SelectCell нормально отображает изображение. На каждый вызов. Даже если изображение в ячейке нету.
if acol = 8 then
begin
i:=maingr.Cells[Acol,Arow];
imageindex:=main_form.ImageList1.Source.IndexOf(i);
imageviewer1.Bitmap.Clear(TAlphaColors.Null);
imageviewer1.Bitmap:=main_form.ImageList1.Bitmap(size,imageindex);
end;
И по поводу памяти. Как я понял, после того как я присвою изображение ячейке, оно загружается в память. Также когда отображается в ImageViewer.
Но после удаления строки с изображениям, память остается занята для уже использованных изображений. То есть при повторном показе память больше не занимается и используется изображение которое было ранее загружено. Думаю это нормальное поведение. Так увеличивается скорость работы программы. Но я собираюсь показывать до 50 фотографий одновременно (средний размер 1мб) из 5-10 тисяч. И мне нужно чтоб после использования изображений память очищалась, иначе программа будет кушать под 10гб оперативной памяти.