2012-02-23 3 views
16

Se viene premuto un pulsante del mouse e viene visualizzata una finestra, la finestra riceverà l'evento MouseUp quando viene rilasciato il pulsante del mouse.Rileva se il pulsante del mouse è già stato premuto prima che venga visualizzato il modulo

È possibile rilevare, una volta visualizzata la finestra, se è già stato premuto o meno un pulsante del mouse?

+0

Si consiglia di esaminare GetAsyncKeyState (VK_LBUTTON) – ComputerSaysNo

+5

Si noti che 'GetAsyncKeyState' restituisce lo stato del pulsante del mouse fisico, mentre' GetKeyState' restituisce logico (rispetto a ciò che è stato impostato nell'opzione di opzione "Passa ai pulsanti primari e secondari" nel mouse impostazioni). – TLama

risposta

16

vorrei provare questo:

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

Grazie, questo è corretto .... quasi. Il risultato di GetKeyState deve essere confrontato con $ 8000 (consultare http://stackoverflow.com/a/3422706/41338) per verificare se i bit corretti sono impostati. – RobS

+0

Hai decisamente ragione. Grazie! Aggiornerò il post Ci scusiamo per fuorviando. – TLama

+2

+1 per spiegare COME – EMBarbosa

9

Per rispondere direttamente alla tua domanda, è possibile verificare lo stato per il mouse con il tasto GetKeyState o GetAsyncKeyState. Il codice chiave virtuale necessario è VK_LBUTTON.

La differenza tra questi è che GetKeyState segnala lo stato nel momento in cui il messaggio in coda attualmente attivo è stato inviato alla coda. D'altra parte, GetAsynchKeyState ti dà lo stato nell'istante in cui chiami GetAsynchKeyState.

Dalla documentazione di GetKeyState:

Lo stato della chiave tornato da questa funzione cambia come un filo legge i messaggi chiave dalla sua coda di messaggi. Lo stato non riflette lo stato a livello di interrupt associato all'hardware. Utilizzare la funzione GetAsyncKeyState per recuperare tali informazioni. Un'applicazione chiama GetKeyState in risposta a un messaggio di input da tastiera. Questa funzione recupera lo stato della chiave quando il messaggio di input è stato generato.

Ho il sospetto che si dovrebbe utilizzare GetKeyState ma non posso essere sicuro al 100%, perché io in realtà non so cosa si sta cercando di raggiungere con queste informazioni.

+0

Grazie per l'utile spiegazione della differenza tra le due funzioni. Hai ragione nel fatto che GetKeyState è ciò di cui ho bisogno. Le informazioni extra opache sul motivo per cui ho bisogno di questo è che sto creando un modulo il cui output si basa sull'ultimo pulsante del mouse rilasciato. Originariamente stavo contando i pulsanti del mouse mentre venivano premuti e contandoli come rilasciati, ma a volte uno dei pulsanti del mouse poteva essere premuto prima che il modulo fosse mostrato. Tuttavia, questo comando significa che ora posso verificare su ciascun evento mouseup se uno qualsiasi degli altri pulsanti del mouse è ancora premuto. – RobS

+2

+1 per spiegare PERCHÉ – EMBarbosa