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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.10.2014, 19:20
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию Запрет выхода курсора за форму

Кто подскажет как запретить выходить курсору за форму если форма написана на api. Знаю как реализовать в VLC, но в api не могу ее перевести или просто не понимаю как.
Как я реализовываю в VLC:
Код:
var
aRect: TRect;
begin
aRect:=BoundsRect;
ClipCursor(@myr);
end;

Кто поможет перевести в api?
Ответить с цитированием
  #2  
Старый 12.10.2014, 09:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  ARect: TRect;
begin
  GetWindowRect(Handle, ARect);
  ClipCursor(@ARect);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 12.10.2014, 23:35
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

Цитата:
Сообщение от NumLock
Код:
var
  ARect: TRect;
begin
  GetWindowRect(Handle, ARect);
  ClipCursor(@ARect);
end;

а как правильно применить если форма на api
Ответить с цитированием
  #4  
Старый 12.10.2014, 23:41
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Посмотреть исходники ClipCursor религия не позволяет?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 13.10.2014, 00:11
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от PhoeniX
Посмотреть исходники ClipCursor религия не позволяет?
Это практически нереально для начинающего, так как это уже функция API.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 13.10.2014, 18:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от HTTqp
а как правильно применить если форма на api
Код:
var
  Handle: THandle;
...
Handle:=CreateWindow()
...
GetWindowRect()
ClipCursor()
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 13.10.2014 в 18:35.
Ответить с цитированием
  #7  
Старый 13.10.2014, 20:04
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Похоже ТСу нужна инфа про отлов сообщений нахождения курсора в пределах "самопальной" формы, есть непонятки как эта форма вообще создется, без кода не видно какие описатели к ней применимы, если аффтар данное святотатство покажет, то можно кое-что и подсказать ему, ясен пень, имхо (оффтоп - тема по-тихоньку во флудильню переходит:-)
Ответить с цитированием
  #8  
Старый 13.10.2014, 21:50
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

вот в таком форме нужно отловаить, пробывал как написано выше но увы не отловил(
Код:
 
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  
Старый 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, время: 15:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter