Показать сообщение отдельно
  #9  
Старый 13.10.2014, 23:51
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 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 в.д.
Ответить с цитированием