Вверх ↑
Этот топик читают: Гость
Ответов: 5125
Рейтинг: 578
#16: 2022-02-08 20:45:06 ЛС | профиль | цитата
Gunta, не, у меня не работает почему то
Другая область захватывается от отмеченной захватывается...

Редактировалось 2 раз(а), последний 2022-02-08 21:46:03
карма: 5
0
Ответов: 412
Рейтинг: 66
#17: 2022-02-08 21:27:12 ЛС | профиль | цитата
andrestudio, Я понял. Я всегда выделяю сверху в низ. Схему поправил.

Add(MainForm,11788041,595,126)
{
Width=479
Height=417
Position=1
Point(SizeHeader)
Point(Handle)
Point(doSendToBack)
Point(doBringToFront)
}
Add(Button,7184611,406,175)
{
Width=463
Align=2
Caption="Вырезать"
link(onClick,1712484:doEvent1,[])
}
Add(Image,3179763,595,182)
{
Top=20
Width=463
Height=358
Align=5
Color=16777215
}
Add(Hub,1712484,462,175)
{
link(onEvent1,11788041:doSendToBack,[(487,181)(487,160)])
link(onEvent2,5508976:doWork1,[])
}
Add(ChildForm,5508976,497,182)
{
link(onEvent1,2186279:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,987769,21,21)
{
EventCount=1
WorkCount=1
Width=1077
Height=774
link(doWork1,6757584:doEvent1,[(74,27)(74,76)])
}
Add(MainForm,5179513,273,210)
{
Align=5
Visible=1
BorderStyle=0
Point(doWidth)
Point(doHeight)
Point(doVisible)
}
Add(ScreenShort,4529928,175,70)
{
link(onCapture,7956552:doEvent1,[])
link(Handle,7983328:Value,[])
}
Add(Hub,6757584,77,70)
{
OutCount=5
link(onEvent1,4529928:doCapture,[])
link(onEvent2,13915281:doData,[(137,83)(137,202)])
link(onEvent3,3287052:doData,[(130,90)(130,230)])
link(onEvent4,10332740:doWork1,[(109,97)])
link(onEvent5,10063086:doTimer,[(102,104)(102,482)])
}
Add(Memory,7983328,175,28)
{
Default=Integer(0)
}
Add(Image,9543904,364,133)
{
Top=20
Width=463
Height=358
Align=5
Color=16777215
link(Bitmap,8478335:Var2,[])
}
Add(Timer,10063086,133,476)
{
Interval=100
Enable=1
link(onTimer,1211224:doEvent1,[])
}
Add(Keyboard,5470852,224,483)
{
Key=1
link(onReadKey,8341088:doEvent1,[])
}
Add(IndexToChanel,5304455,357,497)
{
link(onEvent1,3534223:doEvent1,[])
link(onEvent2,9610324:doValue,[(396,510)(396,265)])
}
Add(ChangeMon,9840715,315,497)
{
Data=Integer(0)
link(onData,5304455:doEvent,[])
}
Add(MouseEvent,11503216,567,175)
{
Point(Handle)
}
Add(Screen,10393990,147,147)
{
}
Add(DoData,13915281,147,196)
{
link(onEventData,5179513:doWidth,[(249,202)(249,244)])
link(Data,10393990:Width,[])
}
Add(DoData,3287052,189,224)
{
link(onEventData,5179513:doHeight,[(242,230)(242,251)])
link(Data,10393990:Height,[(195,187)(160,187)])
}
Add(Hub,3534223,420,497)
{
OutCount=5
link(onEvent1,14176835:doValue,[(445,503)(445,300)])
link(onEvent2,1491303:doCalc,[(452,510)(452,412)])
link(onEvent3,5569383:doCopy,[])
link(onEvent4,5219379:doData,[(459,524)(459,545)])
link(onEvent5,10063086:doStop,[(445,531)(445,545)(123,545)(123,489)])
}
Add(DoData,5219379,462,539)
{
Data=Integer(0)
link(onEventData,10332740:doWork3,[(504,545)(504,581)(109,581)])
}
Add(HubEx,10332740,105,252)
{
link(onEvent,5179513:doVisible,[(111,258)])
}
Add(Memory,9610324,518,259)
{
Point(Data)
link(onData,3475940:doValue,[])
link(Data,8283538:Var1,[(524,222)])
}
Add(Memory,3475940,560,259)
{
Point(Data)
link(Data,14248791:Var1,[(566,229)])
}
Add(MathParse,4812601,630,406)
{
MathStr="abs(%1 - %2)"
link(onResult,13522895:doCalc,[])
link(X1,7646194:Var2,[])
link(X2,868674:Var3,[(643,362)])
}
Add(GetDataEx,8283538,567,217)
{
link(Data,11503216:MouseX,[])
}
Add(MathParse,13522895,686,406)
{
MathStr="abs(%1 - %2)"
link(X1,13761145:Var2,[])
link(X2,4665790:Var3,[(699,383)])
}
Add(GetDataEx,14248791,574,224)
{
link(Data,11503216:MouseY,[])
}
Add(Img_Rectangle,10137405,875,476)
{
LineStyle=3
Point(Point1)
Point(Point2)
link(Bitmap,9543904:ImageBitmap,[(881,250)(370,250)])
link(Point1,11092645:Point,[])
link(Point2,7833549:Point,[(902,432)(937,432)])
}
Add(Hub,1211224,182,476)
{
link(onEvent1,14129593:doEvent2,[(207,482)(207,326)(323,326)(323,146)])
link(onEvent2,5470852:doReadKey,[])
}
Add(PointXY,7833549,931,385)
{
link(X,15225189:Var3,[(937,222)])
link(Y,12749511:Var3,[(944,229)])
}
Add(Bitmap,3779324,364,70)
{
}
Add(Hub,7956552,301,70)
{
link(onEvent1,3779324:doLoad,[])
link(onEvent2,14129593:doEvent1,[(326,83)(326,139)])
}
Add(Hub,14129593,336,133)
{
InCount=2
OutCount=1
link(onEvent1,9543904:doLoad,[])
}
Add(Img_Copy,5569383,525,511)
{
Point(Width)
Point(Height)
link(onCopy,987769:onEvent1,[(1014,517)(1014,27)])
link(Source,8478335:Var3,[(531,117)])
link(X,1491303:Result,[])
link(Y,10519634:Result,[(545,446)(587,446)])
link(Width,4812601:Result,[(552,453)(636,453)])
link(Height,13522895:Result,[(559,460)(692,460)])
}
Add(GetDataEx,8478335,364,112)
{
link(Data,3779324:Bitmap,[])
}
Add(Hub,8341088,273,483)
{
link(onEvent1,3681755:doEvent,[(310,489)(310,475)])
link(onEvent2,9840715:doData,[(305,496)(305,503)])
}
Add(IndexToChanel,3681755,826,469)
{
link(onEvent2,10137405:doDraw,[])
}
Add(Memory,14176835,602,294)
{
Point(Data)
link(onData,15013925:doValue,[])
link(Data,15225189:Var2,[])
}
Add(Memory,15013925,651,294)
{
Point(Data)
link(Data,12749511:Var2,[])
}
Add(PointXY,11092645,889,385)
{
link(X,7646194:Var3,[(895,376)])
link(Y,13761145:Var3,[(902,369)])
}
Add(GetDataEx,15225189,602,217)
{
Angle=3
link(Data,8283538:Var3,[])
}
Add(GetDataEx,12749511,651,224)
{
Angle=3
link(Data,14248791:Var3,[])
}
Add(MathParse,1491303,532,406)
{
MathStr="min(%1, %2)"
link(onResult,10519634:doCalc,[])
link(X1,15341832:Var2,[(538,397)(524,397)])
link(X2,868674:Var1,[(545,362)])
}
Add(GetDataEx,15341832,518,371)
{
link(Data,9610324:Value,[])
}
Add(MathParse,10519634,581,406)
{
MathStr="min(%1, %2)"
link(onResult,4812601:doCalc,[])
link(X1,5044620:Var2,[(587,397)(566,397)])
link(X2,4665790:Var1,[(594,383)])
}
Add(GetDataEx,5044620,560,364)
{
link(Data,3475940:Value,[])
}
Add(GetDataEx,7646194,630,371)
{
Angle=3
link(Data,15341832:Var3,[])
}
Add(GetDataEx,868674,602,357)
{
link(Data,14176835:Value,[])
}
Add(GetDataEx,13761145,686,364)
{
Angle=3
link(Data,5044620:Var3,[])
}
Add(GetDataEx,4665790,651,378)
{
link(Data,15013925:Value,[])
}
END_SDK
Add(Hub,2186279,553,182)
{
link(onEvent1,3179763:doLoad,[])
link(onEvent2,11788041:doBringToFront,[(578,195)(578,167)])
}

карма: 9

0
Ответов: 5125
Рейтинг: 578
#18: 2022-02-08 21:45:37 ЛС | профиль | цитата
Gunta, о, теперь работает
Отлично, держи в замен другую (в компонент лень оборачивать)

Add(MainForm,11788041,329,49)
{
Width=479
Height=417
Position=1
Point(SizeHeader)
Point(Handle)
Point(doSendToBack)
Point(doBringToFront)
}
Add(Button,7184611,140,98)
{
Width=463
Align=2
Caption="Вырезать"
link(onClick,1712484:doEvent1,[])
}
Add(Image,3179763,329,105)
{
Top=20
Width=463
Height=358
Align=5
Color=16777215
}
Add(Hub,1712484,196,98)
{
link(onEvent1,11788041:doSendToBack,[(221,104)(221,83)])
link(onEvent2,16364808:doCapture,[])
}
Add(Hub,2186279,287,105)
{
link(onEvent1,3179763:doLoad,[])
link(onEvent2,11788041:doBringToFront,[(312,118)(312,90)])
}
Add(InlineCode,16364808,238,105)
{
WorkPoints=#9:doCapture|
EventPoints=#5:onScr|
Code=#25:// autor andrestudio 2021|15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,windows,Share,Debug;|0:|5:const|12: PSIZE = 2;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|27: f1,f2,f3,f4: PControl;|16: t1: PTimer;|9: public|22: onScr: THI_Event;|51: procedure doCapture(var dt: TData; idx: word);|73: procedure onMouseDown(Sender: PControl; var Mouse: TMouseEventData);|71: procedure onMouseUp(Sender: PControl; var Mouse: TMouseEventData);|31: procedure Timer(Obj:PObj);|22: procedure GetBMP;|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.GetBMP;|3:var|10: dc: HDC;|19: Bmp: Kol.PBitmap;|19: w,h,x,y: integer;|14: pos: TPoint;|5:begin|18: dc := GetDC(0);|21: GetCursorPos(pos);|59: w := Max(f2.Left,f4.Left) - Min(f2.Left,f4.Left) -PSIZE;|55: h := Max(f1.Top,f3.Top) - Min(f1.Top,f3.Top) -PSIZE;|35: x := Min(f2.Left,f4.Left)+PSIZE;|33: y := Min(f1.Top,f3.Top)+PSIZE;|3: |25: Bmp := NewBitmap(w,h);|69: BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,x,y,SRCCOPY);|26: _hi_OnEvent(onScr,bmp);|23: bmp.CopyToClipboard;|12: bmp.Free;|54: // пришлось отказатся от пересоздания из за FPC |40: //f1.Free; f2.Free; f3.Free; f4.Free;|13: //t1.Free;|4:end;|0:|34:procedure THiAsmClass.onMouseDown;|5:begin|38: if Mouse.Button <> mbLeft then Exit;|14: t1.Tag := 2;|20: f3.Show; f4.Show; |4:end;|0:|32:procedure THiAsmClass.onMouseUp;|5:begin|38: if Mouse.Button <> mbLeft then Exit;|33: if f2.Left = f4.Left then Exit;|31: if f1.Top = f3.Top then Exit;|22: t1.Enabled := False;|37: f1.Hide; f2.Hide; f3.Hide; f4.Hide;|9: GetBMP;|4:end;|0:|38:procedure THiAsmClass.Timer(Obj:PObj);|3:var|14: pos: TPoint;|5:begin|20: GetCursorPos(pos);|21: if Obj.Tag = 1 then|7: begin|20: f1.Top := Pos.y;|21: f2.Left := Pos.x;|6: end;|21: if Obj.Tag = 2 then|7: begin|20: f3.Top := Pos.y;|21: f4.Left := Pos.x;|8: end; |4:end;|0:|32:procedure THiAsmClass.doCapture;|6:begin |34: if not Assigned(f1) then begin |28: f1 := NewForm(Applet,'');|22: f1.GetWindowHandle;|25: f1.Style := 101187584;|23: f1.ExStyle := 65536;|27: f1.Width := ScreenWidth;|22: f1.Height := PSIZE;|19: f1.Color := 255;|16: f1.Left := 0;|13: //f1.Show;|38: f1.onMouseDown := onMouseDown; end;|0:|34: if not Assigned(f2) then begin |28: f2 := NewForm(Applet,'');|22: f2.GetWindowHandle;|25: f2.Style := 101187584;|23: f2.ExStyle := 65536;|29: f2.Height := ScreenHeight;|21: f2.Width := PSIZE;|19: f2.Color := 255;|15: f2.Top := 0;|13: //f2.Show;|38: f2.onMouseDown := onMouseDown; end;|3: |35: if not Assigned(f3) then begin |28: f3 := NewForm(Applet,'');|22: f3.GetWindowHandle;|25: f3.Style := 101187584;|23: f3.ExStyle := 65536;|27: f3.Width := ScreenWidth;|22: f3.Height := PSIZE;|19: f3.Color := 255;|16: f3.Left := 0;|11: f3.Hide;|34: f3.onMouseUp := onMouseUp; end;|0:|34: if not Assigned(f4) then begin |28: f4 := NewForm(Applet,'');|22: f4.GetWindowHandle;|25: f4.Style := 101187584;|23: f4.ExStyle := 65536;|29: f4.Height := ScreenHeight;|21: f4.Width := PSIZE;|19: f4.Color := 255;|15: f4.Top := 0;|11: f4.Hide;|42: f4.onMouseUp := onMouseUp; end; |3: |34: if not Assigned(t1) then begin |22: t1 := NewTimer(25);|28: t1.OnTimer := Timer; end;|15: t1.Tag := 1;|23: t1.Enabled := True; |11: f1.Show;|16: f2.Show; |4:end;|0:|4:end.|
link(onScr,2186279:doEvent1,[])
}

карма: 5
1
Голосовали:prostov
Разработчик
Ответов: 26048
Рейтинг: 2110
#19: 2022-02-08 22:29:25 ЛС | профиль | цитата
Gunta писал(а):
Всё работает

О! Пока писал исправили. Да, вроде работает. Но это опять те же бесячие ножницы

--- Добавлено в 2022-02-08 22:34:26

andrestudio писал(а):
Отлично, держи в замен другую (в компонент лень оборачивать)

Оригинально, такого я еще не видел.

P.S. А мне все же рамочная больше нравится. Сконструирую-ка я себе рамочную, заодно компоненты проверю, надоело что-то их мусолить уже.

Редактировалось 8 раз(а), последний 2022-02-08 22:38:20
карма: 22

0
Ответов: 5125
Рейтинг: 578
#20: 2022-02-09 01:01:27 ЛС | профиль | цитата
nesco, в отличии от рамочной тут прицел 100% С рамочной как обычно либо лишку хватанёшь либо не захватишь чего.
Где то ещё лупа была к этой примочке для точного прицела как в FastStone Image View (делал для работы) искать надо.
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#21: 2022-02-09 01:17:48 ЛС | профиль | цитата
andrestudio писал(а):
Где то ещё лупа была к этой примочке для точного прицела

Вы че там, микрометры рассматриваете Да плюс-минус лаптя, попало что главное в захват, остальное мимо проходило.

Редактировалось 1 раз(а), последний 2022-02-09 01:18:29
карма: 22

0
Ответов: 23
Рейтинг: 0
#22: 2022-02-09 06:34:56 ЛС | профиль | цитата
Gunta писал(а):
prostov, Я тоже что-то намудрил. Работает как ножницы. После нажатия кнопки ЛКМ выделяем копируемую область.



спасибо, но мне уже nesco помог.

неплохо получилось только я замел он берёт только с лево на право вне зависимости от направления берёт от начальной точки к последней точке параллельно и вертикально курсору, то есть если взять с право на лево он возьмёт область с лево на право от начальной точки.
карма: 0

0
Ответов: 5125
Рейтинг: 578
#23: 2022-02-09 08:45:38 ЛС | профиль | цитата
nesco писал(а):
Вы че там, микрометры рассматриваете Да плюс-минус лаптя, попало что главное в захват, остальное мимо проходило.

Да нет конечно, я просто уже слепошарый видать, прицеливаться трудно стаёт...
карма: 5
0
Ответов: 5125
Рейтинг: 578
#24: 2022-02-20 19:03:58 ЛС | профиль | цитата
Сделал рамочную на хуке. (как то поживей работает)
Кому надо пользуйтесь.

Add(MainForm,2953706,42,91)
{
Width=435
Height=333
Point(Handle)
}
Add(Button,14735506,140,91)
{
Left=10
Top=15
Width=65
Height=40
Caption="GetSCR"
link(onClick,16364808:doCapture,[])
}
Add(InlineCode,16364808,217,91)
{
WorkPoints=#9:doCapture|
EventPoints=#5:onScr|
Code=#25:// autor andrestudio 2022|15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,windows,Share,Debug,Messages;|0:|5:const|34: COLORRECT = clRed; // цвет рамки|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: onScr: THI_Event;|52: procedure doCapture(var dt: TData; idx: word); |22: procedure GetBMP;|5: end;|1: |91: function HookMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): integer; stdcall;|51: procedure SetMouseHook(const IsEnabled: Boolean);|0:|14:implementation|0:|4:type|25: TMouseMoveHook = record|19: case Integer of|21: 0: (Hook: HHOOK);|24: 1: (Timer: THandle);|6: end;|0:|39: PMouseHookStruct = ^TMouseHookStruct;|36: tagMOUSEHOOKSTRUCT = packed record|15: pt: TPoint;|21: mouseData: DWORD;|17: flags: DWORD;|16: time: DWORD;|24: dwExtraInfo: PDWORD;|6: end;|40: TMouseHookStruct = tagMOUSEHOOKSTRUCT;|0:|3:var|15: f1: PControl;|32: MouseMoveHook: TMouseMoveHook;|18: sClass: LongInt;|21: OldX,OldY: integer;|24: x1,x2,y1,y2: integer; |18: Canvas: PCanvas;|17: Start: boolean;|2: |49:procedure SetMouseHook(const IsEnabled: Boolean);|5:const|19: WH_MOUSE_LL = 14;|5:begin|19: if IsEnabled then|85: MouseMoveHook.Hook := SetWindowsHookEx(WH_MOUSE_LL, @HookMouseProc, HInstance, 0)|6: else|44: UnhookWindowsHookEx(MouseMoveHook.Hook);|9:end; |2: |89:function HookMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): Integer; stdcall;|5:begin|70: Result := CallNextHookEx(MouseMoveHook.Hook, nCode, WParam, LParam);|52: if (WParam = WM_MOUSEMOVE) and (Start = True) then|7: begin|41: x2 := PMouseHookStruct(LParam)^.pt.X;|41: y2 := PMouseHookStruct(LParam)^.pt.Y;|41: Canvas.Rectangle(x1, y1, oldx, oldy);|37: Canvas.Rectangle(x1, y1, x2, y2);|27: OldX := x2; OldY := y2;|6: end;|5: |34: if WParam = WM_LBUTTONDOWN then |7: begin|41: x1 := PMouseHookStruct(LParam)^.pt.X;|41: y1 := PMouseHookStruct(LParam)^.pt.Y;|27: OldX := x1; OldY := y1;|16: // подложили|20: f1.Left := x1-1;|22: f1.Top := y1-1; |18: Start := True;|6: end;|2: |54: if (WParam = WM_LBUTTONUP) and (Start = True) then |8: begin |41: Canvas.Rectangle(x1, y1, oldx, oldy);|30: THiAsmUnit(sClass).GetBMP;|25: SetMouseHook(False); |6: end;|7: |6:end; |0:|29:procedure THiAsmClass.GetBMP;|3:var|10: dc: HDC;|19: Bmp: Kol.PBitmap;|19: w,h,x,y: integer;|14: pos: TPoint;|5:begin|35: x := Min(x1,x2); y := Min(y1,y2);|39: w := Max(x1,x2)-x; h := Max(y1,y2)-y;|17: dc := GetDC(0);|24: Bmp := NewBitmap(w,h);|68: BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,x,y,SRCCOPY);|25: _hi_OnEvent(onScr,bmp);|22: bmp.CopyToClipboard;|12: bmp.Free; |14: Canvas.Free;|10: f1.Hide;|4:end;|0:|32:procedure THiAsmClass.doCapture;|6:begin |17: Start := False;|34: if not Assigned(f1) then begin |64: f1 := NewForm(Applet,''); // подложка для защиты от выделения|56: f1.GetWindowHandle; // элементов редактирования|25: f1.Style := 101187584;|23: f1.ExStyle := 65536;|17: f1.Width := 2;|18: f1.Height := 2;|41: f1.AlphaBlend := 1; // 0 не сработает!|8: end; |10: f1.Show;|2: |32: Canvas := NewCanvas(GetDC(0));|37: Canvas.Brush.BrushStyle := bsClear;|40: Canvas.Pen.Color := COLORRECT; |32: Canvas.Pen.PenStyle := psDash;|34: Canvas.Pen.PenMode := pmNotXor; |0:|26: sClass := LongInt(Self);|23: SetMouseHook(True); |4:end;|0:|0:|4:end.|
link(onScr,10459537:doLoad,[])
}
Add(Image,10459537,294,91)
{
Left=90
Top=20
Width=315
Height=255
Color=15793151
}
Add(InfoTip,3902747,105,28)
{
Info=#0:|24:Как и в прошлом варианте|35:картинка уже будет в буфере обмена!|
Font=[MS Sans Serif,10,1,8421376,1]
Width=316
Height=116
}

карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#25: 2022-02-20 19:22:44 ЛС | профиль | цитата
andrestudio писал(а):
Сделал рамочную на хуке

Это не рамочная, это обычные ножницы. Рамочная -- это где двигают рамку по экрану, а не захват-отпускание.



Мне хочется ее подарить сообществу (она полностью сделана на HiAsm-e, без IC), но схему пока скомпилировать не удастся, тк некоторых переделанных элементов пока нет в доступе. Но я обязательно ее выложу, когда закончу правки и тестирование. В этой схеме, кроме формы, больше нет ни одного контрола, все сделано на графике, вся схема -- один большой графический контрол.

Редактировалось 2 раз(а), последний 2022-02-20 19:33:26
карма: 22

0
Ответов: 412
Рейтинг: 66
#26: 2022-02-21 05:52:55 ЛС | профиль | цитата
Переделал пример для выделения области экрана рамкой.
Управление:
ЛКМ – перемещение выделенной области по экрану
Колёсико – изменение размеров выделенной области
Тянуть Левой кнопкой край рамки - изменение формы
ПКМ – сделать снимок
Add(MainForm,11788041,644,175)
{
Width=479
Height=417
Position=1
Point(SizeHeader)
Point(Handle)
Point(doSendToBack)
Point(doBringToFront)
}
Add(Button,7184611,455,224)
{
Width=463
Align=2
Caption="Вырезать"
link(onClick,1712484:doEvent1,[])
}
Add(Image,3179763,644,259)
{
Top=20
Width=463
Height=358
Align=5
Color=16777215
link(Bitmap,5508976:Var1,[(650,250)(636,250)(636,299)(552,299)])
}
Add(Hub,1712484,511,224)
{
link(onEvent1,11788041:doSendToBack,[(536,230)(536,209)])
link(onEvent2,5508976:doWork1,[(536,237)(536,265)])
}
Add(ChildForm,5508976,546,259)
{
link(onEvent1,2186279:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,987769,21,21)
{
EventCount=1
WorkCount=1
VarCount=1
Width=475
Height=375
link(doWork1,6757584:doEvent1,[(39,27)(39,76)])
link(Var1,6706602:Result,[(27,355)(321,355)])
}
Add(MainForm,5179513,259,147)
{
Align=5
Visible=1
BorderStyle=0
Point(doWidth)
Point(doHeight)
Point(doVisible)
}
Add(ScreenShort,4529928,175,70)
{
link(onCapture,7956552:doEvent1,[])
link(Handle,7983328:Value,[])
}
Add(Hub,6757584,63,70)
{
OutCount=5
link(onEvent1,4529928:doCapture,[])
link(onEvent2,13915281:doData,[(123,83)(123,139)])
link(onEvent3,3287052:doData,[(116,90)(116,167)])
link(onEvent4,1889271:doWork2,[(109,97)(109,195)])
link(onEvent5,6706602:doVisible,[(102,104)(102,293)])
}
Add(Memory,7983328,175,28)
{
Default=Integer(0)
}
Add(Image,9543904,392,133)
{
Top=20
Width=463
Height=358
Align=5
Color=16777215
}
Add(Screen,10393990,133,84)
{
}
Add(DoData,13915281,133,133)
{
link(onEventData,5179513:doWidth,[(235,139)(235,181)])
link(Data,10393990:Width,[])
}
Add(DoData,3287052,175,161)
{
link(onEventData,5179513:doHeight,[(228,167)(228,188)])
link(Data,10393990:Height,[(181,124)(146,124)])
}
Add(Bitmap,3779324,343,70)
{
}
Add(Hub,7956552,280,70)
{
link(onEvent1,3779324:doLoad,[])
link(onEvent2,12410429:doGamma,[(305,83)(305,139)])
}
Add(Gamma,12410429,343,133)
{
link(onResult,9543904:doLoad,[])
link(Bitmap,11041717:Var2,[])
}
Add(HubEx,1889271,224,189)
{
link(onEvent,5179513:doVisible,[])
}
Add(ChildFormEx,6706602,315,287)
{
link(onEvent1,1889271:doWork3,[(361,293)(361,279)(228,279)])
link(onEvent3,987769:onEvent1,[(431,300)(431,27)])
link(Source,11041717:Var1,[(321,110)])
}
BEGIN_SDK
Add(EditMultiEx,3506928,21,21)
{
WorkCount=#9:doVisible|
EventCount=#8:onEvent1|8:onEvent3|0:|
VarCount=#6:Result|
DataCount=#6:Source|
Width=895
Height=368
link(doVisible,4723942:doEvent1,[])
link(Result,13733629:Result,[(27,257)(391,257)])
}
Add(MainForm,15725282,392,70)
{
Left=35
Top=105
Width=589
Height=386
Color=16777215
Font=[MS Sans Serif,8,0,16777215,1]
Visible=1
BorderStyle=7
DragForm=0
TransparentColor=8421504
Point(onMouseWheel)
Point(Left)
Point(Top)
Point(doVisible)
Point(onMouseDown)
Point(doWidth)
Point(doHeight)
Point(Width)
Point(Height)
Point(doPicture)
Point(onResize)
link(onMouseWheel,5664209:doOperation,[(431,97)(431,62)(193,62)(193,111)])
link(onMouseDown,12090705:doEvent,[])
link(onResize,14839810:doWork3,[(446,111)(446,225)(375,225)])
}
Add(Math,7255170,273,105)
{
link(onResult,15725282:doWidth,[])
link(Op1,14893527:Var1,[(279,89)(363,89)(363,138)])
}
Add(Math,5664209,203,105)
{
OpType=3
Op2=30
link(onResult,512495:doEvent1,[])
}
Add(Hub,512495,245,105)
{
link(onEvent1,7255170:doOperation,[])
link(onEvent2,13955688:doOperation,[])
}
Add(Math,13955688,315,112)
{
link(onResult,15725282:doHeight,[])
link(Op1,13551567:Var1,[(321,96)(356,96)(356,145)])
}
Add(GetDataEx,14893527,406,133)
{
link(Data,15725282:Width,[])
}
Add(GetDataEx,13551567,413,140)
{
link(Data,15725282:Height,[])
}
Add(IndexToChanel,12090705,483,98)
{
link(onEvent2,5067805:doPopupHere,[])
}
Add(PopupMenu,5067805,546,105)
{
Menu=#16:Создать скриншот|8:Прервать|
link(onClick,10699968:doEvent,[])
}
Add(IndexToChanel,10699968,602,105)
{
Count=3
link(onEvent1,15785721:doEvent1,[])
link(onEvent2,12509764:doWork3,[(669,118)(669,132)(718,132)])
}
Add(Img_Copy,13733629,385,182)
{
Point(Result)
Point(Width)
Point(Height)
link(onCopy,15725282:doPicture,[(436,188)(436,160)(382,160)(382,125)])
link(Source,3506928:Source,[(391,173)(27,173)])
link(X,15725282:Left,[])
link(Y,15725282:Top,[])
link(Width,14893527:Var2,[])
link(Height,13551567:Var2,[])
}
Add(Timer,10063086,203,182)
{
Interval=50
Enable=1
link(onTimer,14839810:doWork2,[])
}
Add(Hub,4723942,70,21)
{
link(onEvent1,12682471:doWork2,[])
link(onEvent2,10063086:doTimer,[(95,34)(95,188)])
}
Add(HubEx,14839810,371,182)
{
link(onEvent,13733629:doCopy,[])
}
Add(DoData,16684823,735,112)
{
Data=Integer(0)
link(onEventData,12873231:doEvent1,[])
}
Add(Hub,12873231,784,112)
{
OutCount=4
link(onEvent1,12682471:doWork3,[(809,118)(809,27)])
link(onEvent2,3506928:onEvent1,[(816,125)(816,27)])
link(onEvent3,10063086:doStop,[(809,132)(809,230)(193,230)(193,195)])
}
Add(HubEx,12682471,364,21)
{
Angle=1
link(onEvent,15725282:doVisible,[(368,104)])
}
Add(Hub,15785721,679,105)
{
link(onEvent1,3506928:onEvent3,[(704,111)(704,34)])
link(onEvent2,12509764:doWork2,[])
}
Add(HubEx,12509764,714,112)
{
link(onEvent,16684823:doData,[])
}
END_SDK
Add(GetDataEx,11041717,343,105)
{
link(Data,3779324:Bitmap,[])
}
END_SDK
Add(Hub,2186279,602,259)
{
link(onEvent1,3179763:doLoad,[])
link(onEvent2,11788041:doBringToFront,[(627,272)(627,216)])
}


Редактировалось 2 раз(а), последний 2022-02-21 06:39:24
карма: 9

0
Разработчик
Ответов: 26048
Рейтинг: 2110
#27: 2022-02-21 06:05:14 ЛС | профиль | цитата
Gunta писал(а):
Переделал пример для выделения области экрана рамкой

Да, быстродействие "внушает". А так -- ничего, прикольно.
карма: 22

0
Ответов: 412
Рейтинг: 66
#28: 2022-02-21 06:27:59 ЛС | профиль | цитата
nesco писал(а):
Да, быстродействие "внушает".

Я начинал делать схему на рисовании этой области и её заполнении, но схема что-то слишком сложная получалась. Переделал. Сейчас проще, но заметно притормаживает.
карма: 9

0
Ответов: 5125
Рейтинг: 578
#29: 2022-02-21 07:36:02 ЛС | профиль | цитата
nesco, интересно конечно как твоей рамкой к примеру область с часиками в правом нижнем углу сфотать
карма: 5
0
Ответов: 5125
Рейтинг: 578
#30: 2022-02-21 09:35:43 ЛС | профиль | цитата
Попробовал без канвы на чистом API сделать выделение инверсией цветов но получить картинку без инверсии так и не получилось.
Может кому повезёт больше чем мне
Add(MainForm,2953706,56,77)
{
Width=539
Height=391
Point(Handle)
}
Add(Button,11970534,119,77)
{
Left=20
Top=35
Width=90
Height=35
link(onClick,16364808:doCapture,[])
}
Add(InlineCode,16364808,189,77)
{
WorkPoints=#9:doCapture|
EventPoints=#5:onScr|
Code=#25:// autor andrestudio 2022|15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,windows,Share,Debug,Messages;|0:|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: onScr: THI_Event;|52: procedure doCapture(var dt: TData; idx: word); |22: procedure GetBMP;|5: end;|1: |91: function HookMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): integer; stdcall;|51: procedure SetMouseHook(const IsEnabled: Boolean);|0:|14:implementation|0:|4:type|25: TMouseMoveHook = record|19: case Integer of|21: 0: (Hook: HHOOK);|24: 1: (Timer: THandle);|6: end;|0:|39: PMouseHookStruct = ^TMouseHookStruct;|36: tagMOUSEHOOKSTRUCT = packed record|15: pt: TPoint;|21: mouseData: DWORD;|17: flags: DWORD;|16: time: DWORD;|24: dwExtraInfo: PDWORD;|6: end;|40: TMouseHookStruct = tagMOUSEHOOKSTRUCT;|0:|3:var|15: f1: PControl;|32: MouseMoveHook: TMouseMoveHook;|18: sClass: LongInt;|21: OldX,OldY: integer;|24: x1,x2,y1,y2: integer; |17: Start: boolean;|2: |49:procedure SetMouseHook(const IsEnabled: Boolean);|5:const|19: WH_MOUSE_LL = 14;|5:begin|19: if IsEnabled then|85: MouseMoveHook.Hook := SetWindowsHookEx(WH_MOUSE_LL, @HookMouseProc, HInstance, 0)|6: else|44: UnhookWindowsHookEx(MouseMoveHook.Hook);|9:end; |2: |89:function HookMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): Integer; stdcall;|3:var|10: DC: HDC;|11: R: TRect;|13: h: THAndle;|5:begin|70: Result := CallNextHookEx(MouseMoveHook.Hook, nCode, WParam, LParam);|52: if (WParam = WM_MOUSEMOVE) and (Start = True) then|7: begin|41: x2 := PMouseHookStruct(LParam)^.pt.X;|41: y2 := PMouseHookStruct(LParam)^.pt.Y;|19: dc := GetDC(0);|57: //h := WindowFromPoint(PMouseHookStruct(LParam)^.pt);|27: SetROP2(dc, R2_XORPEN);|37: Rectangle(dc,x1, y1, oldx, oldy);|38: Rectangle(dc, x1, y1, x2, y2); |20: ReleaseDC(0,dc);|27: OldX := x2; OldY := y2;|6: end;|5: |34: if WParam = WM_LBUTTONDOWN then |7: begin|41: x1 := PMouseHookStruct(LParam)^.pt.X;|41: y1 := PMouseHookStruct(LParam)^.pt.Y;|27: OldX := x1; OldY := y1;|16: // подложили|20: f1.Left := x1-1;|25: f1.Top := y1-1; |18: Start := True;|6: end;|2: |54: if (WParam = WM_LBUTTONUP) and (Start = True) then |8: begin |24: SetMouseHook(False);|34: R := MakeRect(x1, y1, x2, y2);|31: InvalidateRect(0,@R,False);|30: THiAsmUnit(sClass).GetBMP;|6: end;|7: |6:end; |0:|29:procedure THiAsmClass.GetBMP;|3:var|10: dc: HDC;|19: Bmp: Kol.PBitmap;|19: w,h,x,y: integer;|14: pos: TPoint;|5:begin|35: x := Min(x1,x2); y := Min(y1,y2);|39: w := Max(x1,x2)-x; h := Max(y1,y2)-y;|17: dc := GetDC(0);|24: Bmp := NewBitmap(w,h);|68: BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,x,y,SRCCOPY);|25: _hi_OnEvent(onScr,bmp);|22: bmp.CopyToClipboard;|12: bmp.Free; |10: f1.Hide;|4:end;|0:|32:procedure THiAsmClass.doCapture;|6:begin |17: Start := False;|34: if not Assigned(f1) then begin |64: f1 := NewForm(Applet,''); // подложка для защиты от выделения|56: f1.GetWindowHandle; // элементов редактирования|25: f1.Style := 101187584;|23: f1.ExStyle := 65536;|17: f1.Width := 2;|18: f1.Height := 2;|41: f1.AlphaBlend := 1; // 0 не сработает!|8: end; |12: f1.Show; |0:|26: sClass := LongInt(Self);|23: SetMouseHook(True); |4:end;|0:|0:|4:end.|
link(onScr,12267643:doLoad,[])
}
Add(Image,12267643,252,77)
{
Left=155
Top=45
Width=300
Height=215
}



Редактировалось 3 раз(а), последний 2022-02-21 10:11:46
карма: 5
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)