Q&A

  • 화면 캡처를 계속하면 '사용가능한 저장소가 부족합니다'-_;;
function TForm1.scrcap:TBitmap;
var
DC : HDC;
des:TBitmap;
begin
DC := GetDC (GetDesktopWindow);
try
des:=TBitmap.Create;
Des.Width := 300; //GetDeviceCaps (DC, HORZRES);
Des.Height := 200; //GetDeviceCaps (DC, VERTRES);
BitBlt(Des.Canvas.Handle,
0-(form1.Left+8),
0-(form1.top+8),
form1.Left+300+8,
form1.top+200+8,
DC,
0,
0,
SRCCOPY);
scrcap:=des;
finally
ReleaseDC (GetDesktopWindow, DC);
end;
end;




요렇게 함수를 만들어서요,

타이머에서 5/1000 간격으로 계속 호출하면 얼마 가지 못하고 사용 가능한 저장소가 부족합니다 라고 뜹니다.

srccap:=des; 밑에

혹시나 해서 des.free; 넣어주면 invalid pointer opration라고 에러뜨네요.

타이머 시간을 늘릴 수는 없고..,.

어떻게 해야 할까요?

1  COMMENTS
  • Profile
    김홍유 2004.08.06 04:56
    답변이 될런지는 모르겠군요
    우리도 저장소 부족 메시지가 떠 원인 파악중에 있습니다.
    먼저 의심돼는 부분은  scrcap:=des; 입니다.
    TBitmap객체인 des가 scrcap에 할당이 돼고있는데
    TBitmap객체의  객체전부가 아니라 pointer만 copy가 될겁니다.
    이로인해  des.free;를 넣어주면
    scrcap의 data도 해제가 돼므로 접근 불가가돼겠지요.
    즉 scrcap.free나 des.free나 같은 역활을 하게돼는거지요.