Определить, нажата ли кнопка мыши перед показом формы - PullRequest
16 голосов
/ 23 февраля 2012

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

Можно ли определить, отображается ли окно, независимо от того,кнопка мыши уже нажата?

Ответы [ 2 ]

16 голосов
/ 23 февраля 2012

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

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;
9 голосов
/ 23 февраля 2012

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

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

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

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

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

...