Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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.

да масса способов, короче.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)