| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Timagelist |
| Автор: Illusion Dolphin 5.4.2004, 18:16 |
| пишу: procedure TForm1.Button1Click(Sender: TObject); var i:integer; b:tbitmap; begin for i:=1 to 20000 do begin b:=tbitmap.create; b.PixelFormat:=pf24bit; b.Width:=100; b.Height:=100; if -1=ImageList_AddMasked(imagelist1.Handle,b.Handle, 0) then break; b.Free; label1.Caption:=inttostr(i); application.ProcessMessages; end; end; В imagelist1 установлена высота и ширина на 100 - где-то после 1200 изображений добавления не происходит (ImageList_AddMasked выдаёт -1), не могу понять, почему... Если все зразмеры установить на 50 пикселей, то добавляется ровно в четре раза больше изображений! Неужели существует предел на количество занятой памяти в Timagelist? Если не использовать этот компонент, то что можно сделать иначе? Можно тогда простой примерчик, как это сделать? |
| Автор: x77 5.4.2004, 19:16 |
| ограничение существует не на кол-во изображений, а на максимальный размер битмапа в системе. а ImageList все картинки хранит как один битпам. и если он становится слишком большим - увы, это клиника. а иначе - всё что угодно. ba: array of TBitmap; , например, чем поганый вариант? и далее: SetLength (ba, 20000); for i := 0 to High (ba) do begin ba [i] := TBitmap.Create; ... end; Finalize (ba); для гурманов - наследование TCollection/TCollectionItem. да масса способов, короче. |