Вверх ↑
Ответов: 263
Рейтинг: 18
#1: 2022-09-27 11:50:30 ЛС | профиль | цитата
andrestudio писал(а):
fox-video, безысходность может заключаться только в том что бы не пробовать исправить это самостоятельно. Не всё в руках божьих.

Код писать не умею, потому и выбрал HiAsm для разработок простых утилит\приложений.

Попробовал разобраться сам... и получилось! Нужно изменить строки 271, 279 и 284

procedure THiMonitors._work_doScreenShotMonitor;
var
M: TMonitor;
i: integer;
DC: HDC;
bmp, tmp: PBitmap;
begin
i := ReadInteger(_Data, _data_Monitor, _prop_Monitor);
if (i < -1) or (i > FMonitors.Count - 1) then exit;
DC := GetDC(0);
tmp := NewBitmap(GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));
BitBlt(tmp.Canvas.Handle, 0, 0, tmp.Width, tmp.Height, DC, (GetSystemMetrics(SM_XVIRTUALSCREEN)), (GetSystemMetrics(SM_YVIRTUALSCREEN)), SrcCopy);

if i <> -1 then
begin
M := TMonitor(FMonitors.Items[i]);
if _prop_WorkArea then
begin
bmp := NewBitmap(M.GetWorkWidth, M.GetWorkHeight);
BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, DC, (M.GetWorkRect.Left), (M.GetWorkRect.Top), SrcCopy);
end
else
begin
bmp := NewBitmap(M.GetWidth, M.GetHeight);
BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, DC, (M.GetWorkRect.Left), (M.GetWorkRect.Top), SrcCopy);
end;
_hi_onEvent(_event_onScreenShot, bmp);
bmp.free;
end
else
_hi_onEvent(_event_onScreenShot, tmp);

ReleaseDC(0, DC);
tmp.free;
end;

Схема для тестирования

Add(MainForm,2953706,42,49)
{
Width=728
Height=397
}
Add(Monitors,4460692,210,56)
{
Point(doWorkArea)
link(onScreenShot,6864150:doLoad,[])
}
Add(Button,3603329,91,49)
{
Left=15
Top=5
Caption="Весь"
Data=Integer(-1)
link(onClick,10004233:doEvent1,[])
}
Add(Image,6864150,273,56)
{
Left=90
Top=5
Width=610
Height=345
}
Add(Hub,10004233,161,49)
{
InCount=3
link(onEvent1,6864150:doClear,[(256,55)(256,69)])
link(onEvent2,4460692:doScreenShotMonitor,[])
}
Add(Button,8386685,91,91)
{
Left=15
Top=35
Caption="1"
Data=Integer(0)
link(onClick,10004233:doEvent2,[(142,97)(142,62)])
}
Add(Button,699764,91,133)
{
Left=15
Top=65
Caption="2"
Data=Integer(1)
link(onClick,10004233:doEvent3,[(142,139)(142,69)])
}
Add(CheckBox,12037815,91,175)
{
Left=5
Top=95
Width=70
Caption="WorkArea"
link(onCheck,4460692:doWorkArea,[(187,181)(187,69)])
}
карма: 3

0