Es normal que no puedas escribir nada.
Tal y como te he comentado antes, lo que pones a ejecutar en el synchronize, es código que no se ejecuta en paralelo.
Para que me entiendas es algo así. Cuando llamas al synchronize, el thread detiene el programa original, ejecuta lo que hay dentro del synchronize y luego vuelve a el control al programa principal.
Por eso he comentado que en el synchronize hay que poner el mínimo código posible.
Según la explicación anterior, tú has hecho justo TODO lo contrario. Has colocado TODO el código del hilo en el synchronize. Por lo tanto tu hilo, tal y como está, no saca ningún provecho a las ventajas de ejecutar código en paralelo.
Cambia tu código por este, y aprecia las diferencias:
Código Delphi
[-]
procedure tHilo.execute;
var
i:integer;
begin
synchronize(updatEdit);
for i := 0 to form1.progressBar1.max -1 do begin
cont := i;
synchronize(updatEdit);
sleep(10);
end;
end;
procedure tHilo.updatEdit;
begin
form1.progressBar1.max:= 1000;
form1.progressBar1.position:= cont;
end;