No voy a criticar tu forma de interactuar con el usuario, auque como h a dicho lepe, puede ser un poco incomodo estar haciendo clic, clic, clic.....
Fijate que lo que te sucede es cuando un thread termina repentinamente es porque ha ocurrido una acepción en este y normalmente delphi no te informa sobre las ecepciones en los threads [solo cuando estás en modo debugger].
Exception class EOSError with message 'System Error. Code: 1400.
El identificador de la ventana no es válido'.
esto sucede a como lo ha dicho lepe a que no destruyes la ventana a utilizar.
A mi punto de vista tienes dos alternativas:
Esta es la que te recomiendo:
Código Delphi
[-]
procedure TForm2.IdThreadComponent2Run(Sender: TIdThreadComponent);
begin
if ADOtable2.RecordCount > 0 then
begin
ADOTable2.First;
Try
Form23 := TForm23.Create(self);
while not ADOtable2.eof do
begin
Form23.showModal;
ADOTable2.Delete;
end;
Finally
Form23.Free;
end;
end;
end;
Ó:
Código Delphi
[-]
procedure TForm2.IdThreadComponent2Run(Sender: TIdThreadComponent);
begin
if ADOtable2.RecordCount > 0 then
begin
ADOTable2.First;
while not ADOtable2.eof do
begin
Form23 := TForm23.Create(self);
Form23.showModal;
ADOTable2.Delete;
Form23.Free;
end;
end;
end;