Hola
Cita:
Empezado por diegofhernando
win:= TChat.Create(Self);
|
Aca esta tu problema
Cita:
Empezado por jachguate
Si te das cuenta, la sentencia TChat.Create(Self) se ejecuta en el hilo de la conexión, y no en el hilo principal de la aplicación.
|
jachguate tiene mucha razon este hilo se esta ejecutando en la conexión no en la aplicación. Asi que la forma como podrias hacer que esto se evite seria de la siguiente forma
Código:
procedure Tmain.sockExecute(AThread: TIdPeerThread);
var
cont: integer;
texto: string;
win: TChat; // form que se crea dinamiamente para cada conversacion
begin
text:= AThread.Connection.ReadLn();
win:= TChat.Create(Application);
win.name:= nombre_aleatorio;
win.caption:= nombre_usuario;
win.Show; // esto ya no debe ser un problema
end;
Pasando el objeto
Application como parametro de
Create pues haras que tu formulario este directamente ligado a la aplicación y no a tu formulario lo que le dará independencia.
Pero no te olvides de poner el siguiente codigo en el evento
OnClose de tu formulario
TChat
Código:
procedure TChat.Close(Sender : TObject; var Action : TCloseAction);
begin
Action := caFree;
end;
lo que eliminara tu formulario de la memoria y te permitira crear otro mas luego.
Suerte