Вверх ↑
Ответов: 5227
Рейтинг: 586
#1: 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
}

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0