Это не совсем так. Если вы будете быстро нажимать и отпускать клавиши, то все будет работать как задумано, а вот если вы зажмете одну клавишу и не отпуская ее нажмете вторую это уже будет не два разных нажатия а одно сложное и обрабатывать его тоже надо соответственно, а для этого есть функция GetAsyncKeyState(). Применительно к вашим шейпам делаем проверку на нажатие клавиши А:
Код:
if GetAsyncKeyState(65) < 0 then Shape2.Left := Shape2.Left - 1;
Помещать в кейс обработку в этом случае нельзя, т.к. у вас могут быть одновременно нажато намного больше 1 клавиши.