Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2005
progmaq progmaq is offline
Miembro
 
Registrado: dic 2004
Posts: 16
Poder: 0
progmaq Va por buen camino
Thread y Form

Hola, me gustaría saber si es posible realizar lo siguiente:

Estando en un Thread, ¿como puedo crear un Form, sin que continue ejecutandose el Thread?

Código:
procedure Hilo_Cliente.Execute;
var
Ventana : TForm2;
begin
  Ventana := TForm2.Create(nil);
  Ventana.ShowModal();
  Ventana.Free;
  Exit;
end;
De la forma escrita anteriormente, creo que solo se crea y se destruye, ya que el thread continua...

Muchas gracias de antemano...
Responder Con Cita
  #2  
Antiguo 30-03-2005
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Mirate los metodos de la clase TThread (Suspend, Resume, Terminate) en la ayuda del Delphi.

Creo que con el nombre ya pagan.

Saludos,
__________________
Saludos,

Bitman
Responder Con Cita
  #3  
Antiguo 30-03-2005
progmaq progmaq is offline
Miembro
 
Registrado: dic 2004
Posts: 16
Poder: 0
progmaq Va por buen camino
Tony, la cosa es que si el form que creo es dinámico, vamos sin usar ningun form ya hecho, no hay ningun problema, va perfectamente. Pero si quiero usar un form que lo tenga definido en un dfm no hay forma...

Lo que me interesa, es crear el form dinámicamente, pero pudiendo modificar el Form desde el propio delphi...

Un ejemplo para que me entiendas mejor:
Código:
procedure Hilo_Cliente.Execute;
var
Ventana : TForm;
begin
  Ventana := TForm.Create(nil);
  Ventana.Name := 'Prueba';
  Ventana.Caption := 'Prueba ventana';
  Ventana.ShowModal();
  Ventana.Free;
  Exit;
end;
Con este código, el programa carga la thread, y cuando llega al form, lo muestra sin problemas, y hasta que no cerramos el form, no continúa con el thread, que es lo que yo necesito.

Pero lo que me interesa, es hacer lo mismo, pero envez de tenerle que meterer los datos manualmente:

Código:
  Ventana.Name := 'Prueba';
  Ventana.Caption := 'Prueba ventana';
Coger los datos de un form ya determinado...

Código:
procedure Hilo_Cliente.Execute;
var
Ventana : TForm2; Este es un form ya determinado
begin
  Ventana := TForm2.Create(nil);
  Ventana.ShowModal();
  Ventana.Free;
  Exit;
end;
Si uso esto, Delphi me da un error diciendo:

Código:
Canvas does not allow drawing
Saludos, y gracias
Responder Con Cita
  #4  
Antiguo 31-03-2005
S.M.S. S.M.S. is offline
Miembro
 
Registrado: jun 2003
Ubicación: España
Posts: 56
Poder: 21
S.M.S. Va por buen camino
Synchronize ();

Hola progmaq, todos los objetos de la biblioteca de componentes visuales creados en tiempo de diseño pertenecen al programa principal, por lo que no es posible que desde el método execute de un hilo pueda accederse de forma directa a sus propiedades o realizar llamadas a sus métodos. En estos casos es necesario utilizar el procedimiento synchronize () al que pasaremos como parámetro un método definido por nosotros. Dicho esto prueba lo siguiente (en la parte private declaras el procedimiento):
Código Delphi [-]
private
procedure MuestraVentana;
end;
luego haces en él lo que querías y lo llamas desde Execute a través de Synchronize:
Código Delphi [-]
procedure MuestraVentana;
begin
  with TForm2.Create(nil) do
  Try
    ShowModal;
  finally
    Free;
  end;
end;

procedure Hilo_Cliente.Execute;
begin
 synchronize (MuestraVentana);
 //.............
end;
Espero que así se solucionen trus problemas.Saludos.
Responder Con Cita
  #5  
Antiguo 31-03-2005
progmaq progmaq is offline
Miembro
 
Registrado: dic 2004
Posts: 16
Poder: 0
progmaq Va por buen camino
S.M.S muchísimas gracias por la ayuda ofrecida, me lleve horas buscando por google, buscando en este foro y buscando en la ayuda de los form y los thread... y si no llegas a ser por ti, no lo hubiera conseguido nunca.

Solo decirte que soy el programador de DuRiE, (no pongo la WEB por si a los moderadores les importa) y nada, que en la proxima versión, pondre que si no llega a ser por ti, la Activacion de los servidores WALLA no hubiera sido posible...

Pues nada, un saludo y "Eres un CRACK"

PD: Muy bien explicado
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:29:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi