Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #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 в.д.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:14.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025