
13.10.2014, 23:51
|
 |
.
|
|
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
|
|
Ну и что непонятно? Обработку курсора можно "повесить" на активность окна:
Код:
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 в.д.
|