Bueno no pones el código completo, pero puedo intentar adivinar lo que pasa. Si dentro del bucle no utilizas el valor de la variable i la optimización del compilador hace que la variable i disminuya en vez de incrementarse ya que esta esta manera es mas eficiente. Es decir, si tenemos esto:
Código Delphi
[-]
var
i: integer;
begin
for i:= 0 to 3 do
begin
Windows.Beep(200,100);
end;
end;
Y ejecutamos nuestro programa paso a paso veremos que i toma el valor 4, 3, 2, 1 debido a la optimización del compilador. En principio el pitido se sigo oyendo 4 veces así que lo que haga el compilador no nos importa. Sin embargo si tenemos esto otro:
Código Delphi
[-]
var
i: integer;
begin
for i:= 0 to 3 do
begin
Windows.Beep(200*i,100);
end;
end;
Y lo vuelves a ejecutar paso a paso, veras que ahora la i toma los valores correctos, 0, 1, 2, 3.