15.11.2007, 01:46
общий
это ответ
Здравствуйте, Ben Jamin!
Все верно. Дело в том, что нужное вам сообщение WM_KEYDOWN уходит активному контролу - в данном случае активной кнопке. Она его обрабатывает по своему усмотрению и далее блокирует.
Вам нужно ловить это сообщение ДО того, как оно попадет в окно.
Для этих целей можно воспользоваться компонентом TApplicationsEvent.
Напишите обработчик события OnMessage данного компонента так, как в приложении, и все у вас получится;))
Приложение:
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled){ //Если пришло сообщение WM_KEYDOWN (нажата кнопка) И этой кнопкой является <-, вперед... if(Msg.message == WM_KEYDOWN && Msg.wParam == VK_LEFT) { Shape1->Left = Shape1->Left - 1; Handled = true; //Блокируем сообщение, чтобы оно не ушло дальше... }}