Нужно вставлять
Delay в цикле обработки нажатий, т.е. что-то типа
repeat
key:=GetKeyPressed;
Delay(100);
if key=...
until key=0;
иначе система не успевает корректно обработать нажатие. Тут хватит 100-200 мс, юзер такую задержку реально не заметит, зато система успеет отреагировать.