EOutOfResources Delphi

Не понимаю в чём проблема.. Программа работает отлично.. минут 20, потом вылетает исключение.. Код для захвата экрана и отрисовки курсора.

Всё работает в потоке. Вот код который в потоке:

procedure ScreenViewer.Execute;
var
bmp:TBitmap;
jpg:TJpegImage;
status: boolean;
memory:TMemoryStream;
    ci: TCursorInfo;
    ii: TIconInfo;
    bf: TBlendFunction;
    cb: TBitmap;
    cx,cy: integer;
    DC:THandle;
    Width,Height,i:integer;
begin

   status:=true;

i:=0;

  while screen_thread=true do

  begin

if status = true then
begin
status:=false;


    Width:=Screen.Width;
    Height:=Screen.Height;

    bmp:=TBitmap.Create;
    cb:=TBitmap.Create;
    jpg:=TJpegImage.Create;
    memory:=TMemoryStream.Create;

   try

   try

    bmp.PixelFormat := pf32bit;   // ЕСЛИ ЭТО НЕ ПОСТАВИТЬ ВЫЛАЗИТ ОШИБКА OutOfSystemResources
    bmp.Width := Width;
    bmp.Height := Height;
    bmp.Canvas.Lock;
    DC:=GetDC(0);
    BitBlt(bmp.Canvas.Handle, 0,0, bmp.Width, bmp.Height, DC, 0,0,SRCCOPY);

    ci.cbSize:=SizeOf(ci);
    GetCursorInfo(ci);
    GetIconInfo(ci.hCursor, ii);
    cb.Handle:=ii.hbmColor;
    cx:=ci.ptScreenPos.X-ii.xHotspot;
    cy:=ci.ptScreenPos.Y-ii.yHotspot;



          if not cb.Empty then
           begin
            bf.BlendOp:=AC_SRC_OVER;
            bf.BlendFlags:=0;
            bf.SourceConstantAlpha:=$ff;
            bf.AlphaFormat:=AC_SRC_ALPHA;
            AlphaBlend(bmp.Canvas.Handle, cx,cy,32,32,
              cb.Canvas.Handle, 0,0,cb.Width,cb.Height, bf);
          end;


     bmp.Canvas.Unlock;

        DeleteDC(bmp.Canvas.Handle);
        ReleaseDC(0,DC);






        jpg.Assign(bmp);
        jpg.CompressionQuality:=50;
        jpg.Compress;
        jpg.SaveToStream(memory);
        jpg.Free;

        bmp.Free;
        cb.Free;


        memory.Position:=0;

        memory.SaveToFile('test'+inttostr(i)+'.jpg');
        inc(i);
        memory.Free;
     except
     writeln('screen - exception');
     screen_thread:=false;

     end;

  finally


    status:=true;
  end;
 sleep(1);
end;

  end;

end;

error

error2


Ответы (0 шт):