Tienes que usar el metodo Synchronize. Por ejemplo:
Código Delphi
[-]
TMyThread = class(TThread)
private
NuevoCaption: String;
procedure Actualizar;
protected
procedure Execute; override;
end;
procedure TMyThread.Actualizar;
begin
Form1.Caption:= NuevoCaption;
end;
procedure TMyThread.Execute;
var
i: integer;
begin
for i:= 1 to 100 do
begin
NuevoCaption:= IntToStr(i);
Synchronize(Actualizar);
Sleep(100);
end;
end;
El thread anterior, al ejecutarse, va cambiando el caption del formulario (form1) cada 100 milisegundos.