|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запрет выхода курсора за форму
Кто подскажет как запретить выходить курсору за форму если форма написана на api. Знаю как реализовать в VLC, но в api не могу ее перевести или просто не понимаю как.
Как я реализовываю в VLC: Код:
var aRect: TRect; begin aRect:=BoundsRect; ClipCursor(@myr); end; Кто поможет перевести в api? |
#2
|
||||
|
||||
Код:
var ARect: TRect; begin GetWindowRect(Handle, ARect); ClipCursor(@ARect); end; Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
а как правильно применить если форма на api |
#4
|
||||
|
||||
Посмотреть исходники ClipCursor религия не позволяет?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
Цитата:
Код:
var Handle: THandle; ... Handle:=CreateWindow() ... GetWindowRect() ClipCursor() Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 13.10.2014 в 18:35. |
#7
|
||||
|
||||
Похоже ТСу нужна инфа про отлов сообщений нахождения курсора в пределах "самопальной" формы, есть непонятки как эта форма вообще создется, без кода не видно какие описатели к ней применимы, если аффтар данное святотатство покажет, то можно кое-что и подсказать ему, ясен пень, имхо (оффтоп - тема по-тихоньку во флудильню переходит:-)
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
вот в таком форме нужно отловаить, пробывал как написано выше но увы не отловил(
Код:
program Project1; uses windows, messages; var wc: TWndClass; hWindow: HWND; Msg: TMsg; function MainWndProc(hWindow: HWND; Msg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall; export; var ps: TPaintStruct; begin Result := 0; case Msg of WM_PAINT: begin BeginPaint(hWindow, ps); SetBkMode(ps.hdc, TRANSPARENT); EndPaint(hWindow, ps); end; WM_DESTROY: PostQuitMessage(0); else begin Result := DefWindowProc(hWindow, Msg, wParam, lParam); Exit; end; end; end; begin wc.lpszClassName := 'YourAppClass'; wc.lpfnWndProc := @MainWndProc; wc.Style := CS_VREDRAW or CS_HREDRAW; wc.hInstance := hInstance; wc.hIcon := LoadIcon(0, IDI_APPLICATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := (COLOR_WINDOW + 1); wc.lpszMenuName := nil; wc.cbClsExtra := 0; wc.cbWndExtra := 0; RegisterClass(wc); hWindow := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE, 'YourAppClass', 'API', WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 400, 300, 0, 0, hInstance, nil); ShowWindow(hWindow, CmdShow); UpDateWindow(hWindow); while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; Halt(Msg.wParam); end. |
#9
|
||||
|
||||
Ну и что непонятно? Обработку курсора можно "повесить" на активность окна:
Код:
program Project1; uses Windows, Messages; const szAppName = 'YourAppClass'; var wc : TWndClassEx; Wnd : HWND; Msg : TMsg; aRect : TRect; function MainProc(Wnd : HWND; Msg : Integer; wParam, lParam : Longint) : Integer; stdcall; var ps : TPaintStruct; begin Result := 0; case Msg of WM_ACTIVATEAPP : begin if Boolean(wParam) then begin GetWindowRect(Wnd, aRect); ClipCursor(@aRect); end else ClipCursor(NIL); end; WM_PAINT : begin BeginPaint(Wnd, ps); SetBkMode(ps.hdc, TRANSPARENT); EndPaint(Wnd, ps); end; WM_DESTROY : begin PostQuitMessage(0); Exit; end; end; Result := DefWindowProc(Wnd, Msg, wParam, lParam); end; begin FillChar(wc, SizeOf(TWndClassEx), 0); wc.cbSize := SizeOf(TWndClassEx); wc.Style := CS_VREDRAW or CS_HREDRAW; wc.lpszClassName := szAppName; wc.lpfnWndProc := @MainProc; wc.hInstance := hInstance; wc.hIcon := LoadIcon(0, IDI_APPLICATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := (COLOR_WINDOW + 1); if RegisterClassEx(wc) = 0 then Halt(255); Wnd := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE, szAppName, 'API', WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW, 0, 0, 400, 300, 0, 0, hInstance, NIL); ShowWindow(Wnd, SW_SHOW); UpDateWindow(Wnd); while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; Halt(Msg.wParam); end. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |