Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2003
jdiazan jdiazan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Málaga
Posts: 33
Poder: 0
jdiazan Va por buen camino
Como salir del create con modalresult

Hola a todos:
Tengo un gran problema, cuando creo una ficha, quiero o en el create o en el activate poder salir de la ficha pero no tengo forma ocea.. si hago esto no sale

With tform1.create( application ) do
begin

case showmodal of

mrok:tal y tal;
mryes:tal y tal;

end;
free;

end;

ahora en el create de la tform1 esto por ejemplo claro.

constructor tform1.create( owner : tcomponent )
Begin
inherited create( owner );
// llamo a un procedimiento
//ahora me salgo

modalresult := mrok; //ó Close
{ se queda la ventana mostrandose pero no sale como puedo hacer que salga en este punto }

end;

Muchas gracias de antemano...
__________________
Juan Díaz
Domain, S.A.
Responder Con Cita
  #2  
Antiguo 27-06-2003
nachoasensio nachoasensio is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 61
Poder: 22
nachoasensio Va por buen camino
Hola:

Me parece que estás haciendo un uso muy extraño de ModalResult y ShowModal. En principio ShowModal deberías utilizarlo para mostrar otro formulario distinto, no para tí mismo.


// Este código está en Form1

retorno := Form2.ShowModal;

if retorno = mrOk then
begin
...
end
else
begin
...
end;



Y, cuando quieras salir del formulario Form2 haces


// Este código está en Form2
ModalResult := mrOk;


Una pregunta: ¿buscáis programadores en Delphi en Domain?

Un saludo

Nacho
Responder Con Cita
  #3  
Antiguo 27-06-2003
jdiazan jdiazan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Málaga
Posts: 33
Poder: 0
jdiazan Va por buen camino
Gracias nacho por la respuesta.
Pero, Prueba hacer el modalresult dentro del create a ver que ocurre...
Verás que la ventana Form2 sigue viendose.

Por cierto con el método que te expongo,
1 te ahoras una variable de retorno
2 el uso de case es mas rápido que el if, almenos eso tengo entendido de los tiempos de turbo-pascal, aunque claro es tan válido como otro cualquiera el uso del if, ya que las máquinas son tanrápidas ahora que.....
3 incluso te ahoras la variable form2

Gracias nacho...
prueba eso y me dices...

Lo del trabajo aún no necesitamos pero quién sabe...
__________________
Juan Díaz
Domain, S.A.
Responder Con Cita
  #4  
Antiguo 27-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
El tema es que el create se ha ejecutado antes del ShowModal, si pones un BreakPoint en el evento Create del TForm y otro en donde haces el ShowModal te darás cuenta de lo que sucede, digamos que el formulario no es modal hasta que se ejecute el ShowModal.
Pero igualmente, si ven el código del método ShowModal, se darán cuenta que se ModalResult se evalúa una ves mostrado el Form, o sea que ni en el Activate puedes hacer lo que quieres.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 27-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una forma de hacerlo:

Código:
const
  CM_CLOSE = WM_USER + 1;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure CMClose(var Message: TMessage); message CM_CLOSE;
  end;

implementation

procedure TForm2.CMClose(var Message: TMessage);
begin
  ModalResult := mrOk;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  PostMessage(Handle, CM_CLOSE, 0, 0);
end;
PostMessage manda el mensaje pero sólo hasta que se procese el resto de mensajes, en este caso hasta que todos los mensajes necesarios para que el formulario termine de cargarse se procesen. Así, en el manejador del mensaje CM_CLOSE pones ya el valor deseado para ModalResult.

// Saludos
Responder Con Cita
  #6  
Antiguo 30-06-2003
jdiazan jdiazan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Málaga
Posts: 33
Poder: 0
jdiazan Va por buen camino
Gracias a todos..
Roman tu solución no la he probado aún, ya que al final y dentro de mi desesperación por solucionar mi problema, he capturado el evento OnPaint y parece que funciona, de hecho ya está puesto en el cliente y parece que va bien.

De nuevo muchas gracias.

Saludos
Juan Díaz.
__________________
Juan Díaz
Domain, S.A.
Responder Con Cita
  #7  
Antiguo 30-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por jdiazan
... dentro de mi desesperación por solucionar mi problema, he capturado el evento OnPaint y parece que funciona, de hecho ya está puesto en el cliente y parece que va bien.
Sólo ten en cuanta que el evento OnPaint se genera cada vez que la ventana necesita redibujarse. Esto incluye cada vez que la ventana se oculta por otra aplicación y vuelve a aparecer. Esto ocasionará que el código se va a ejecutar varias veces y quizá esto no sea lo que desees.

// Saludos
Responder Con Cita
  #8  
Antiguo 30-06-2003
jdiazan jdiazan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Málaga
Posts: 33
Poder: 0
jdiazan Va por buen camino
Efectivamente Roman,
lo que he hecho es poner esto


Begin

@onpaint := nil;
// Y ademas con una variable de la ficha private ventana_activada
if not ventana_activada then
begin

ventana_activada := true;
ejecuta_el_procedimiento;

end;

end;


Gracias roman.
__________________
Juan Díaz
Domain, S.A.
Responder Con Cita
Respuesta



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 08:03:31.


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