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라고 에러뜨네요.
타이머 시간을 늘릴 수는 없고..,.
어떻게 해야 할까요?
우리도 저장소 부족 메시지가 떠 원인 파악중에 있습니다.
먼저 의심돼는 부분은 scrcap:=des; 입니다.
TBitmap객체인 des가 scrcap에 할당이 돼고있는데
TBitmap객체의 객체전부가 아니라 pointer만 copy가 될겁니다.
이로인해 des.free;를 넣어주면
scrcap의 data도 해제가 돼므로 접근 불가가돼겠지요.
즉 scrcap.free나 des.free나 같은 역활을 하게돼는거지요.