hola!!
el problema que te surge es porque al activar el TIMER se inicia una especie de "ejecución en paralelo" sin llegar a ser un hilo como tal, y mientras en el hilo principal del programa entras en un bucle sin esperas y sin darle descanso a la CPU, a ejecutar el proceso del timer.
Esto lo puedes soluciona llamando a application.processmessages en el bucle de espera, pero el problema que te va a surgir es que si ejecutas el bucle muy rápido, llamando a processmessages continuamente sin esperas intermedias puedes llegara a saturar el S.O., Para evitar eso, te recomiendo que pongas además un sleep
Prueba con este código:
Código Delphi
[-]
procedure TForm2.Button2Click(Sender: TObject);
var
i, Nrep: Integer;
begin
i := StrToInt(Edit1.Text);
for Nrep := 0 to 5 do begin
Label2.Caption := format('Ciclo #%d:', [Nrep]);
Timer1.Enabled := True;
N := 0;
while (n < i) do begin
application.processMessages;
sleep(200);
end;
Timer1.Enabled := False;
end;
Label2.Caption := 'Parado';
end;