Вверх ↑
Разработчик
Ответов: 26303
Рейтинг: 2146
#1: 2017-03-28 12:33:11 ЛС | профиль | цитата
Леонид писал(а):
Но этот ID не Handle, и не работает

И не должно работать -- ID устройства не есть дескриптор окна

--- Добавлено в 2017-03-28 13:06:38

Леонид, если у тебя несколько мониторов, то попробуй вот этот метод заменить на мой в компоненте ScreenShort. К сожалению, я не могу проверить, у меня тупо нет нескольких мониторов. Если это работает, то я обновлю компонент.

procedure THIScreenShort._work_doCapture;
const
SM_CXVIRTUALSCREEN = 78;
SM_CYVIRTUALSCREEN = 79;
var wnd:HWND;
dc:HDC;
Bmp:PBitmap;
r:TRect;
rgn: HRGN;
RgnDword: DWORD;
RgnData: PRgnData;

function SWidth: integer;
begin
Result := GetSystemMetrics( SM_CXVIRTUALSCREEN );
end;

function SHeight: integer;
begin
Result := GetSystemMetrics( SM_CYVIRTUALSCREEN );
end;

begin
wnd := ReadInteger(_data,_data_Handle,0);
if _prop_UseRegion then
begin
if wnd = 0 then dc := GetDC(0)
else dc := GetWindowDC(wnd);
rgn := CreateRectRgn(0, 0, 0, 0);
if 0 = CombineRgn(rgn, ReadInteger(_Data, _data_Region), 0, RGN_COPY) then Bmp := NewBitmap(0,0)
else
begin
RgnDword := GetRegionData(rgn, 0, nil);
GetMem(RgnData, SizeOf(RgnData) * RgnDword);
GetRegionData(rgn, RgnDword, RgnData);
r.Left := RgnData.rdh.rcBound.Left;
r.Top := RgnData.rdh.rcBound.Top;
r.Right := RgnData.rdh.rcBound.Right - r.Left;
r.Bottom := RgnData.rdh.rcBound.Bottom - r.Top;
FreeMem(RgnData);
Bmp := NewBitmap(r.Right,r.Bottom);
Bmp.BkColor := _prop_Color;
Bmp.Canvas.Brush.BrushStyle := bsSolid;
Bmp.Canvas.FillRect(Bmp.BoundsRect);
OffsetRgn(rgn, -r.Left, -r.Top);
SelectClipRGN(Bmp.Canvas.Handle, rgn);
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,dc,r.Left,r.Top,SRCCOPY);
DeleteObject(rgn);
end;
end
else
begin
if wnd = 0 then
begin
dc := GetDC(0);
// Bmp := NewBitmap(ScreenWidth,ScreenHeight);
Bmp := NewBitmap(SWidth,SHeight);
end
else
begin
dc := GetWindowDC(wnd);
GetWindowRect(wnd,r);
Bmp := NewBitmap(r.Right-r.Left,r.Bottom-r.Top);
end;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,0,0,SRCCOPY);
end;
_hi_OnEvent(_event_onCapture, bmp);
bmp.Free;
ReleaseDC(wnd,dc);
end;

карма: 22

0
Редактировалось 3 раз(а), последний 2017-03-28 13:08:33