Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизException: Not enough storage is available to process this .. Найти похожие ветки
← →
Defunct © (2004-09-30 02:41) [0]Программа (MDI) работает с множеством файлов (векторных изображений), каждый файл редактируется в отдельной MDIChild форме, прога вываливается с сабжевым экcепшином, при попытке открыть или создать очередной файл.
вылетает при создании рабочей области с исключением "Not enough storage is available to process this command"
Код на котором появляется исключение простой.. Не могу понять как решить проблему..
TDrawBox = class(TPaintBox)
...Constructor TDrawBox.Create(AOwner: TComponent);
Begin
inherited Create(AOwner);
ResetMap;
TextBoxList := TTextBoxList.Create;
FShadowLength := 20;
ControlStyle := ControlStyle + [csReplicatable];
FrameShown := False;
FrameCanBeShown := False;
FUpdating := False;
BText := Graphics.TBitmap.Create;
BText.Canvas.Font.Name := "Courier New CE";
BFig := Graphics.TBitmap.Create;
Picture := Graphics.TBitmap.Create;
Picture.Width := Screen.Width;
Picture.Height := Screen.Height; // <-- вылетает на этой строчке
...
End;
Пробовал уменьшить размер рабочей области (Screen.Width-xxx, screen.height - yyy), позволило создать на 1 файл больше, потом вылетело с тем же исключением.. Ограничение на кол-во файлов поставить не могу, пользователь сам определяет сколько должно быть открыто документов. (да и вылетает на смешном количестве - 5 открытых файлов и приехали..)
Можно ли как-то выйти из сложившейся ситуации?
← →
Defunct © (2004-09-30 06:21) [1]Вот зараза... вроде бы XP...
создаю новых форм, на 6-й выскакивает EOutOfResources..Млин, 5 несчастных Bitmap"ов.. TaskManager показывает, что процесс занимает всего ~5Mb..
EOutOfResources is raised when an application attempts to create a Windows or widget handle and there are no more handles to allocate.
(перезагружал комп не раз, так же история)
Это как-то лечится?
← →
ЮЮ © (2004-09-30 08:26) [2]>процесс занимает всего ~5Mb
>and there are no more handles to allocate
память и ресурсы - вешь разная. Очевидно, имеет место дикая утечка ресурсов, причем не в указанном месте, а ,например, в TDrawBox.Paint
← →
Defunct © (2004-09-30 09:52) [3]> ЮЮ © (30.09.04 08:26) [2]
Если открыто 5 форм, одну из них закрываю, потом создаю опять и все ок. И так хоть 100 раз подряд, т.е. утечки вроде бы и нет..
Но вот когда пытаюсь создать шестую форму - пиши пропало.. EOutOfResources на создании области битмапа..
← →
Defunct © (2004-09-30 09:55) [4]перекрытый Paint выглядит так:
procedure TDrawBox.Paint;
begin
If (Picture.Width<>Width) Or (Picture.Height<>Height) Then
Begin
Try
Picture.Width := Width;
Picture.Height := Height;
Except
On Exception:EOutOfResources do
ShowMessage(emOutOfResources);
End;
RePaint;
End Else
Begin
Canv.Font := Font;
Canv.Brush.Color := Color;
if csDesigning in ComponentState then
with Canv do
begin
Pen.Style := psDash;
Brush.Style := bsClear;
Rectangle(0, 0, Width, Height);
end;
Canvas.Draw(0,0, Picture);
End;
end;
← →
Defunct © (2004-10-01 02:43) [5]UP
может быть есть иной способ формирования картинки без использования TBitmap?
← →
ЮЮ © (2004-10-01 04:21) [6]Попробуй device independent bitmap (есть open source библиотеки Graphics32 и FastDIB)
← →
Defunct © (2004-10-06 16:35) [7]> ЮЮ © (01.10.04 04:21) [6]
Эх, посмотрел FastDIB и сделал так, TBitmap заменил на TMemoryStream ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.076 c