Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 13-09-2005
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
Pare entenderlo basta examinar un poco el código de la VCL:

Por un lado el método ShowModal, a grandes rasgos, es así:

Código Delphi [-]
...
Show;
...
ModalResult := 0;
repeat
  Application.HandleMessage;
  if Application.FTerminate then ModalResult := mrCancel else
    if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
...

Es decir, básicamente efectúa un ciclo que espera y procesa mensajes, y que no termina hasta que el valor de ModalResult sea distinto de cero.

El método Close por su parte, cuando se trata de una ventana modal, lo único que hace es poner el valor de ModalResult en mrCancel.

Por tanto, en un flujo normal, el uso de Close hace que el ciclo termine y se procede a cerrar la ventana (código que sigue al ciclo).

Ahora bien, en ShowModal, si te fijas en el código, antes de que comience el ciclo se llama al método Show. Es este método quien se encarga de llamar a tu evento OnShow, desde donde llamas a Close. Pero justo antes de comenzar el ciclo, ModalResult se inicializa a 0, de manera que poner ModelResult en mrCancel dentro de Close no tiene ningún efecto.

Moraleja: no llames a Close dentro de OnShow.

Lo lógico, al menos partiendo de lo que expones, es quitar la pregunta al usuario del formulario modal. Pregunta antes de crear el formulario, y sólo si su respuesta es afirmativa, creas y muestras el formulario:

Código Delphi [-]
with TfrmGestioUsuarios.Create(nil) do
begin
  if MessageBox(...) = IDOK then
    with TfrmGestioUsuaris.Create(nil) do
    begin
      ShowModal;
      Free;
    end;
end;

// Saludos
Responder Con Cita
 


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 20:00:00.


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