Основная ошибка ваша в том, что длину строки вы вычисляете сразу, а ведь в результате удаления символов длина тоже будет меняться.
Поэтому начинать надо не с 1 позиции, а с последней, тогда даже если мы удалим символ на следующий проход это влиять не будет.
Код:
for i := Length(s) downto 1
do if s[i] = ' ' then Delete(s, i, 1);
Как вариант можно формировать новую строку копируя символы из старой но без пробелов:
Код:
s1 := '';
for i := 1 to Length(s)
do if s[i] <> ' ' then s1 := s1 + s[i];