У меня есть несколько курсоров (которые на самом деле являются формами), которыми можно управлять с помощью соответствующей мыши. (1 курсор для 1 пользователя).
Я использую SetCursorPos
, чтобы поместить курсор по умолчанию (исходный системный курсор) в положение, которое не будет отвлекать фокус от моего приложения, и использовать ShowCursor(false)
, чтобы скрыть его.
У меня есть класс, который получает указатель мыши и координаты .
Когда пользователь нажимает, я использую SetCursorPos
и mouse_event
для имитации щелчков в этой конкретной позиции.
Мои смоделированные щелчки мыши работают только с событием OnClick определенных компонентов (это должны были быть только кнопки и метки, но я экспериментировал с вещами в своем проекте, просто чтобы знать, что будет или не будет работать):
Работает на:
- Кнопки (TButton, TBitBtn, TAdvSmoothButton)
- TAdvGrid
- TMenuItem (но прямой потомок только для TMainMenu)
- TRadioButton
Не работает на:
- TLabel
- Панели (TPanel, TAdvSmoothPanel)
- TCoolBar
- TMenuItem (не прямой потомок TMainMenu)
Это мой код:
SetCursorPos(currentX , currentY);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Почему он не работает на некоторых компонентах? Есть ли обходной путь (потому что я хотел бы иметь возможность нажимать на ярлыки, используя mouse_event).
EDIT:
Я попытался проверить, действительно ли была вызвана функция щелчка, поэтому я поставил ShowMessage('clicked');
перед SetCursorPos и mouse_event ... но странным образом все (незначительное редактирование: все, кроме MenuItems) теперь работает нормально (за исключением того факта, что у меня появляется сообщение каждый раз, когда я пытаюсь что-то щелкнуть). У кого-нибудь есть идея, почему так себя ведет?