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;

