Enter - diferenciar os 2 enter

Top  Previous  Next

An application may find it useful to differentiate between 

the user pressing the ENTER key on the standard keyboard 

and the ENTER key on the numeric keypad. Either action 

creates a WM_KEYDOWN message and a WM_KEYUP message with 

wParam set to the virtual key code VK_RETURN. When the 

application passes these messages to TranslateMessage, the 

application receives a WM_CHAR message with wParam set to 

the corresponding ASCII code 13. 

 

To differentiate between the two ENTER keys, test bit 24 of 

lParam sent with the three messages listed above. Bit 24 is 

set to 1 if the key is an extended key; otherwise, bit 24 

is set to 0 (zero). 

 

Because the keys in the numeric keypad (along with the 

function keys) are extended keys, pressing ENTER on the 

numeric keypad results in bit 24 of lParam being set, while 

pressing the ENTER key on  the standard keyboard results in 

bit 24 clear. 

} 

 

 

 The following code sample demonstrates differentiating 

 between these two ENTER keys: 

} 

 

 

procedure TForm1.WMKeyDown(var Message: TWMKeyDown); 

begin 

  inherited; 

  case Message.CharCode of 

    VK_RETURN: // ENTER pressed 

      if (Message.KeyData and $1000000 <> 0) then 

        // Test bit 24 of lParam 

        ShowMessage('ENTER on numeric keypad'

      else 

        ShowMessage('ENTER on Standard keyboard'); 

  end

end