Показать сообщение отдельно
  #2  
Старый 05.12.2017, 22:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну не знаю...
Если делать в лоб, то попробуй так:
1. Кидаешь таймер, там настраиваешь проверку каждые, пусть, 0.5 сек (значение Interval = 500).
2. В обработчике проверяешь формы, а потом курсор по координатам формы. Типа как-то так:
Код:
procedure TForm1.Timer1Timer(Sender : TObject);
var
  pt : TPoint;
begin
  // Form2 or Form7 is active - do nothing
  If (Form2.Visible Or Form7.Visible) Then Exit;
  
  // Get cursor position
  pt := Mouse.CursorPos;
  
  // Check that cursor is over the Form1
  If PtInRect(Rect(Self.Left, Self.Top, Self.Right, Self.Bottom),pt)
    Then EnableDB
    Else DisableBD;
end;

PS. Наверное, можно придумать что-то более навороченное, основанное на событиях. Когда-то эксперементировал с MOUSE_MOVE сообщениями, но, как оказалось, там все-таки они приходят с пропусками, особенно, если мышом быстро возить. Можно мышку хукнуть, но это гораздо сложнее, а суть будет примерно та же.
Ответить с цитированием