Procedure Tform1.TraiteMessages(Var msg : TMsg; Var Handled: boolean);
var
dx, dy : integer;
begin
dx := 0;
dy := 0;
With msg do
begin
IF Message = WM_KEYDOWN then
begin
Case wparam of
VK_LEFT : dx := -1;
VK_RIGHT : dx := 1;
VK_UP : dy := -1;
VK_DOWN : dy := 1;
end;
end;
end;
Mouvement(dx, dy);
Handled := ((dy <> 0) or (dx <> 0));
end;
Это очищает ваш метод ... теперь вам следует поставить точку останова в вашем операторе IF, а в другом - в ваших условиях Case, чтобы в первую очередь определить, инициируется ли когда-либо перехват вашего сообщения, но также и еслиожидаемое сообщение - это то, что вы ожидаете.
Правильно ли ваш компонент перехватывает ключевые события?У вас есть другой визуальный компонент?Вы установили для свойства формы «KeyPreview» значение True?
Возможно, вы также захотите попробовать использовать элемент управления TApplicationEvents для обработки перехвата сообщения ключа (если ваш компонент невизуальный).
Взгляните на этот блок в моем SVN-репозитории (имя пользователя и пароль оба "anon" без кавычек), поскольку он демонстрирует, как перехватывать и обрабатывать ключевые вводы даже на невизуальных компонентах.
Надеюсь, это поможет, и удачи!