2012-02-23 4 views
16

Если нажата кнопка мыши, и окно будет показано, что окно будет получать событие MouseUp при отпускании кнопки мыши.Обнаружить, если кнопка мыши уже нажата до отображения формы

Возможно ли, как только окно будет показано, можно ли определить, нажата ли кнопка мыши или нет?

+0

Возможно, вы захотите посмотреть GetAsyncKeyState (VK_LBUTTON) – ComputerSaysNo

+5

Обратите внимание, что 'GetAsyncKeyState' возвращает физическое состояние кнопки мыши, а' GetKeyState' возвращает логическое значение (в отношении того, что вы установили в опциях 'Switch primary and secondary buttons ' настройки). – TLama

ответ

16

Я хотел бы попробовать это:

procedure TForm1.FormShow(Sender: TObject); 
begin 
    if GetKeyState(VK_LBUTTON) and $8000 <> 0 then 
    ShowMessage('Left mouse button is pressed...') 
    else 
    ShowMessage('Left mouse button is not pressed...') 
end; 
+3

Спасибо, это правильно .... почти. Результат GetKeyState необходимо сравнить с $ 8000 (см. Http://stackoverflow.com/a/3422706/41338), чтобы проверить, установлены ли правильные биты. – RobS

+0

Ты определенно прав. Благодаря! Я обновлю сообщение. Извините за ввод в заблуждение. – TLama

+2

+1 для объяснения HOW – EMBarbosa

9

Чтобы ответить на ваш вопрос прямо, вы можете проверить состояние кнопки мыши с GetKeyState или GetAsyncKeyState. Необходимый код виртуального ключа: VK_LBUTTON.

Разница между ними заключается в том, что GetKeyState сообщает о состоянии в то время, когда текущее сообщение с активной очередью было отправлено в очередь. С другой стороны, GetAsynchKeyState дает вам состояние в тот момент, когда вы звоните GetAsynchKeyState.

Из документации GetKeyState:

Ключа статуса вернулся из этой функции изменяется как поток считывает ключевые сообщения из своей очереди сообщений. Состояние не отражает состояние уровня прерывания, связанного с оборудованием. Используйте функцию GetAsyncKeyState для получения этой информации. Приложение вызывает GetKeyState в ответ на сообщение ввода с клавиатуры. Эта функция извлекает состояние ключа при генерации входного сообщения.

Я подозреваю, что вы должны использовать GetKeyState, но я не могу быть уверен на 100%, потому что я на самом деле не знаю, что вы пытаетесь достичь с помощью этой информации.

+0

Спасибо за полезное объяснение разницы между двумя функциями. Вы правы в том, что GetKeyState - это то, что мне нужно. Тупая дополнительная информация о том, зачем мне это нужно, это то, что я создаю форму, выход которой основан на последней кнопке мыши. Первоначально я подсчитывал кнопки мыши, когда они были нажаты, и считая их выпущенными, но иногда одна из кнопок мыши может быть нажата до того, как будет показана форма. Тем не менее, эта команда означает, что теперь я могу проверить каждое событие mouseup, будет ли нажата любая из других кнопок мыши. – RobS

+2

+1 для объяснения ПОЧЕМУ – EMBarbosa

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