> -- Александр Ильин писал(а):
> Я немного поэкспериментировал и вот что выяснил. С "горячим фокусом" или с обычным, встроенные View не получают сообщения мыши, если курсор находится не над ними. Сообщения мыши всегда приходят только к тому View, над которым находится курсор. Это означает, что в фреймворке на сегодня нет вообще никакой возможности узнать о выходе мыши за пределы View, кроме как с помощью цикла Rider.Input.

Ну, почему же нельзя, можно, если доработать. Смотрим HostWindows
DocWinHandler:

| USER32.WMLButtonDown, USER32.WMRButtonDown, USER32.WMMButtonDown:
IF wnd # USER32.GetFocus() THEN
res := USER32.SendMessageA(client, USER32.WMMDIActivate, wnd, 0);
res := USER32.SetFocus(wnd)
END;
//Захват мыши
res := USER32.SetCapture(wnd);
Kernel.Try(HandleMouse, wnd, wParam + 256, lParam);
это на до убрать
(*IF USER32.GetCapture() = wnd THEN res := USER32.ReleaseCapture() END;*)
Controllers.ResetCurrentPath();
RETURN 0
| USER32.WMLButtonUp, USER32.WMRButtonUp, USER32.WMMButtonUp:
Kernel.Try(HandleMouse, wnd, wParam, lParam);
освобождаем мышь
IF USER32.GetCapture() = wnd THEN res := USER32.ReleaseCapture() END;
Controllers.ResetCurrentPath();
RETURN 0
| USER32.WMMouseMove:
здесь мы будем получать сообщения от мыши не зависимо от того, за окном она или нет
Kernel.Try(HandleMouse, wnd, wParam + (2 * 256), lParam);
Controllers.ResetCurrentPath();
RETURN 0

Далее можно ввести для View свойство типа CaptureMouse.
Доработать HandleMouse, ForwardCtrlMsg, HandleCtrlMsg с учетом того,
что, если CaptureMouse  = TRUE, то Controllers.PollCursorMsg тоже обрабатывается не зависимо от того где сейчас мышь. Причем
Controllers.PollCursorMsg получает только тот View над которым был произведен щелчок мыши (MouseDown)
ввести сообщение типа Controllers.MouseUpMsg
избавиться от кода типа: REPEAT f.Input(x, y, m, isDown) UNTIL ~isDown; в модулях Blackbox и все будет работать корректно.
Лучше все-таки перевести Blackbox на режим:

нажата_мышь: Захват мыши, если CaptureMouse = TRUE
мыши_движется:  Обработка движения во View
мышь_отпущена: ReleaseMouse

Простота обработок типа REPEAT f.Input(x, y, m, isDown) UNTIL ~isDown; только кажущаяся, проблем от этого наоборот еще больше.