procedure TSell.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.Message=WM_KEYDOWN)and(Msg.wParam=VK_CONTROL+VK_HOME)then
begin
end;
答案 0 :(得分:10)
要检查VK_CONTROL虚拟键的状态,您必须使用GetKeyState
功能。
试试这个样本
procedure TSell.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.Message=WM_KEYDOWN) then
if (GetKeyState(VK_CONTROL) < 0) and (Msg.wParam=VK_HOME) then
//do your stuff
end;
答案 1 :(得分:7)
VK_CONTROL
+ VK_HOME
= 17 + 36 = 53 = Ord('5')
。您正在检查用户是否按下了键盘顶行的 5 。 (这不是你想要的吗?你的问题没有说。)
您不能只添加两个独立键的虚拟键代码来发现它们是否同时被按下。 Ctrl 和 Home 是两个不同的密钥,每个密钥都会生成自己的wm_KeyDown
和wm_KeyUp
消息。 (但是不要试图按顺序检测这两个键的按键。它会比你想要的复杂得多。检测 Home 被按下时,然后使用GetKeyState
,就像Rruz的答案演示了,在您收到当前键盘消息时检测 Ctrl 是否已经关闭。)