2013-11-25 3 views
2

Delphi XEЛюбой способ определить, была ли нажата форма?

Есть ли способ определить, получил ли форма клик мыши? Событие OnClick в форме запускается только в пустых частях формы. Любые части, у которых есть элементы управления, не будут отвечать.

+0

Извините, но я этого не сделал. Можете ли вы прочитать заголовок и первый абзац, который не изменился, ни одной буквы. Я сделал ошибку в добавлении фона, который оказался несущественным для конкретного вопроса. Пожалуйста, верните мои изменения, чтобы задать вопрос, чтобы другие не были непреднамеренно запутаны, как вы были, когда вы дали ответ (на другой вопрос). Вы ответили на вопрос о OnActivate, я задал вопрос о OnClick. – rhody

+0

Пожалуйста, прочитайте мой вопрос еще раз. Я смутил вас на фоне, это была моя ошибка. Просто сосредоточьтесь на названии и первом абзаце. Вот в чем вопрос. Возможно, вы пропустили его, но в первом предложении есть знак вопроса. – rhody

+0

Нет проблем. Удачи. –

ответ

6

Вам нужно будет фильтровать сообщения в очереди для обнаружения событий мыши на глобальном уровне.

  1. Добавить обработчик для TApplication.OnMessage.
  2. Слушайте WM_MOUSEDOWN или WM_MOUSEUP, как вам угодно, и ответьте, если дескриптор целевого окна соответствует форме или дочернему элементу управления.
  3. Убедитесь, что параметр Handled сообщения указан как False, чтобы сообщение дошло до его цели.

Если вы действительно пытаетесь обнаружить активацию формы, используйте OnActivate.

+0

Я попробовал OnActivate, но по какой-либо причине он срабатывает только один раз. Я должен добавить, что форма находится в DLL, что может осложнять вопросы. Благодарю за предложение, однако, я отдам его. – rhody

+0

OnActivate - это ответ. Мы должны просто исправить ваш код, чтобы он работал. –

+0

Для тех, кому может быть интересно, мне удалось заставить OnActivate работать с моим кодом для использования пакетов. Извините мое невежество, если это неуместно упоминать здесь. – rhody

Смежные вопросы