FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Form Desastroso
Que tal foro....
Al parecer la solucion a mi problema es imposible , o definitivamente a nadie le ha sucedido, de nuevo pongo mi problema en el foro para que me contribuyan con alguna solucion. Estoy trabajando una aplicacion con las Indy, especificamente un programa de mensajeria y quiero que un pequeño form se cree dinamicamente cada que se recibe un mensaje, el problema es que las benditas Indy no me permiten crear y mostrar mi formulario dentro de sus eventos, es decir que mi unica solucion es crear el formulario en otro hilo que se debe llamar desde los eventos de los componentes Indy... que lio... no se como crear un tthread que me permita crear un mostrar un form, como paso parametros a ese thread???? ya son casi 2 meses intentando hacer esto y estoy a punto de mandar mi PC para la m!#$%!@, agradezco su colaboracion. Salu2
__________________
Diego. Colombia es pasión. |
#2
|
||||
|
||||
Cómo que un evento de las Indy no te permite crear un formulario???? que mensaje de error tenes.
Creo que te conviene leer sobre TThread en el help, amigo. Hay un método llamado Sinchronize, que te puede ayudar a interactuar con el hilo principal de la aplicación de forma segura. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Cita:
http://www.clubdelphi.com/foros/showthread.php?t=6844 http://www.clubdelphi.com/foros/showthread.php?t=6731 En lo futuro te vamos a pedir que continues con el hilo original en lugar de abrir otros. Muchas veces cuando no recibimos respuesta de una pregunta es porque no está bien planteada o no es clara, cosa que tú mismo puedes corroborar leyendo tus hilos anteriores en donde cada vez has ido especificando y aclarando más. // Saludos |
#4
|
||||
|
||||
tienes razon Roman, y pido disculpas... ademas ya me he leido la guia de estilo en el foro y se especifican este tipo de conductas... lo cierto es que no he podido solucionar mi problema con expuesto en los otros hilos... haber si ahora con un poco mas de calma me pueden colaborar. El codigo que utilizo lo pongo en el evento OnExecute de un TidTCPServer de las Indy:
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(Self); win.name:= nombre_aleatorio // este nombre se lo asigno de acuerdo al usuario win.caption:= nombre_usuario // este es el nombre de la persona que envia el mensaje win.show; // aqui es donde se ponen mal las cosas, se congela y simplemente no sucede nada // ya probe con: Synchronize(win.show); // pero sucede lo mismo. end; los otros valores se generan en otro codigo que no pongo por que simplemente no tiene que ver con el problema... haber si me dan una mano con esto... Salu2
__________________
Diego. Colombia es pasión. |
#5
|
||||
|
||||
Debieras tener una rutina que cree la ventana. 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.
La llamada a esta rutina, debiera estar dentro de Synchronize. digamos Synchronize(CrearVentanaChat); Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
|||
|
|||
Hola
Cita:
Cita:
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; 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; Suerte
__________________
La practica y solo la practica hace al maestro |
#7
|
||||
|
||||
Agradezco sinceramente sus recomendaciones, en estos momentos voy a probar con el código que me recomiendan, de nuevo muchas gracias.
Salu2
__________________
Diego. Colombia es pasión. |
|
|
|