Снова привет.
Объясните недалекому. Есть:
Код:
function CaptureScreenRect( ARect: TRect )
: TBitmap;
var
ScreenDC: HDC;
begin
Result := TBitmap.Create;
Result.Width := ARect.Right - ARect.Left;
Result.Height := ARect.Bottom - ARect.Top;
ScreenDC := GetDC( 0 );
try
BitBlt ( Result.Canvas.Handle, 0, 0, Result.Width,
Result.Height, ScreenDC,
ARect.Left, ARect.Top, SRCCOPY );
finally
ReleaseDC( 0, ScreenDC );
end;
end;
Вызов А - вылет АV в последней строке
Код:
procedure GetSceen;
var
pt : TPoint;
r : TRect;
h : HWND;
bit: TBitmap;
begin
bit:=TBitmap.Create;
GetCursorPos(pt);
h:=WindowFromPoint( pt );
GetWindowRect( h, r );
bit:=CaptureScreenRect( r );
bit.SaveToFile(ExtractFilePath(Application.ExeName)+'123.bmp');
with ScreenFRM do
begin
Image1.Picture.Bitmap:=bit;
Причем картинка сейвится хорошо, но загрузить в имейдж не хочет.
Вызов В: Если вызвать в OnShow То все прекрасно работает.
Код:
procedure TScreenFRM.FormShow(Sender: TObject);
var
pt : TPoint;
r : TRect;
h : HWND;
bit: TBitmap;
begin
bit:=TBitmap.Create;
h:=WindowFromPoint( Mouse.CursorPos );
GetWindowRect( h, r );
Image1.Picture.Bitmap:= CaptureScreenRect( r );
В чем дело? все же идентично? имейдж пустой и там и там, на начало вызова.