Ответ 1
Я бы попробовал это:
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;
Если нажата кнопка мыши, и окно будет показано, что окно будет получать событие MouseUp при отпускании кнопки мыши.
Можно ли обнаружить, как только окно отобразится, была ли нажата кнопка мыши?
Я бы попробовал это:
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;
Чтобы ответить на ваш вопрос напрямую, вы можете проверить состояние кнопки мыши с помощью GetKeyState
или GetAsyncKeyState
. Виртуальный key code вам нужен VK_LBUTTON
.
Разница между ними заключается в том, что GetKeyState
сообщает состояние в то время, когда текущее сообщение с ожидающей очередью было отправлено в вашу очередь. С другой стороны, GetAsynchKeyState
дает вам состояние в тот момент, когда вы вызываете GetAsynchKeyState
.
Из документации GetKeyState
:
Статус ключа, возвращаемый этой функцией, изменяется, когда поток считывает ключевые сообщения из очереди сообщений. Состояние не отражает состояние уровня прерывания, связанного с оборудованием. Используйте функцию GetAsyncKeyState для получения этой информации. Приложение вызывает GetKeyState в ответ на ввод ввода с клавиатуры. Эта функция извлекает состояние ключа при создании входного сообщения.
Я подозреваю, что вы должны использовать GetKeyState
, но я не могу быть на 100% уверен, потому что я действительно не знаю, чего вы пытаетесь достичь с помощью этой информации.