Jump to content


Photo

[RESUELTO] Pantallas en Cascada.


  • Please log in to reply
11 replies to this topic

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 23 September 2010 - 10:33 AM

Buen día, compañerit@s del foro..., ahora, tengo una consulta que hacerles respecto a algo que necesito hacer...

Tengo una aplicación que llama a una pantalla de consulta, que a su vez debe llamar a una pantalla de detalle y "desaparecer" la pantalla de consulta, bajo éste esquema:

Aplicación
    |
    |
    _______ Pantalla de consulta
                      |
                      |
                      ______ Pantalla de detalle.

Como dije, la pantalla de consulta, al momento de llamar a la pantalla de detalle, debe desaparecer, preferentemente ser cerrada, para que no se esté ejecutando al mismo tiempo que la pantalla de detalle.

La llamada de la pantalla de consulta:


delphi
  1. procedure TFrmPrn.ConsultadeExtorsinTelefnica1Click(Sender: TObject);
  2. begin
  3.   try
  4.     inherited;
  5.     with TfrmCnsltrDnncs.Create(Self) do
  6.         ShowModal;
  7.     except
  8.     on E: Exception do begin
  9.       ShowMessage(E.Message);
  10.     end;
  11.   end;
  12. end;



La llamada de la pantalla de detalle (Y aquí es donde reside la duda o problema):


delphi
  1. procedure TfrmCnsltrDnncs.dbgrdDtsDblClick(Sender: TObject);
  2. begin
  3.   with TfrmCapExt.Create(Self) do  <----- ¿Posible problema?
  4.   begin
  5.     TpoUsr(sTpoUsr);
  6.     RecbrDts(dbgrdDts.Columns.Items[0].Field.Value);
  7.     Show;
  8.   end;
  9.   frmCnsltrDnncs.Close;    <------ Arroja un error de excepción
  10. end;



Como siempre, alguna idea por loca que parezca u oreintación respecto a la resolución del problema será bienvenida. Agradeciendo de antemano.
  • 0

#2 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 posts

Posted 23 September 2010 - 11:17 AM

Creo que vas bien encaminado en tus suposiciones (por lo que veo en los comentarios que has puesto al lado), cuando creas el formulario de detalle le pasas Self como parámetro. Ese parámetro es el que actuará como propietario (owner) de la pantalla de detalles y se refiere al formulario de consulta que luego destruyes, de ahí que salte el error.

Prueba a pasarle Self.Owner para que sea el formulario principal el que actúe como propietario de la pantalla de detalle y así creo que no debería darte error.

Saludos
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 23 September 2010 - 11:19 AM

Hola
El problema viene del uso de ShowModal o Show.
Osea, o se crea la pantalla cuando se necesita o se crea al inicio.
Si bien es bueno crearla y destruirla, no funciona asi cuando esta quiere destruir a la que la creo.
Mira este ejmplo.
3 pantallas, la principal llama a la segunda, esta llama a la tercera y quita la segunda.
Saludos

Attached Files


  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 23 September 2010 - 11:24 AM

...Prueba a pasarle Self.Owner para que sea el formulario principal el que actúe como propietario de la pantalla de detalle y así creo que no debería darte error.


Aún da el error..., pero me gustó el enfoque...  (b) (b)
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 23 September 2010 - 11:27 AM

Hola
A mi usando Self.Owner no me da error, pero simplemente no elimina la segunda.
Saludos
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 23 September 2010 - 11:35 AM

...3 pantallas, la principal llama a la segunda, esta llama a la tercera y quita la segunda...


Nope, no funciona. Ya no da el error, pero no cierra la segunda, queda al fondo.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 23 September 2010 - 11:41 AM

Hola
En el ejemplo??????.
A mi me funciona perfecto, la primera llama a la segunda, la segunda llama a la tercera y quita la segunda.
Saludos
  • 0

#8 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 posts

Posted 23 September 2010 - 11:43 AM

Como dice Caral, no es una buena idea mezclar ShowModal y Show, creo que eso complica las cosas para lo que quieres hacer. Yo lo que haría es, dentro de ese procedimiento, memorizar en primer lugar en una variable el propietario de la pantalla de consulta, luego cerrar ésta con Close, y a continuación crear la pantalla de detalle pasándole como Owner la variable memorizada, así debería aparecer en primer plano, aunque no lo he probado  *-)

Saludos
  • 0

#9 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 23 September 2010 - 11:49 AM

No, Caral. El ejemplo lo estudié y llevé la idea a mi aplicación. Es ahí donde no funciona...

Como dice Caral, no es una buena idea mezclar ShowModal y Show, creo que eso complica las cosas para lo que quieres hacer. Yo lo que haría es, dentro de ese procedimiento, memorizar en primer lugar en una variable el propietario de la pantalla de consulta, luego cerrar ésta con Close, y a continuación crear la pantalla de detalle pasándole como Owner la variable memorizada, así debería aparecer en primer plano, aunque no lo he probado  *-)

Saludos


Estoy de acuerdo, simplemente que por la manera en que el cliente está pidiendo el procesamiento, infiero que es posible. A menos, claro, que sea solamente un capricho.
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 23 September 2010 - 11:51 AM

Hola
En el proyecto la pantalla 3 se crea o no?.
Si la llamas con show tiene que estar incluida si la llamas con showmodal no.
Saludos
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 23 September 2010 - 11:57 AM

Hola
ESto tiene que funcionar:

pantalla de consulta:


delphi
  1. procedure TFrmPrn.ConsultadeExtorsinTelefnica1Click(Sender: TObject);
  2. begin
  3.   try
  4.     inherited;
  5.     with TfrmCnsltrDnncs.Create(Self) do
  6.         ShowModal;
  7.     except
  8.     on E: Exception do begin
  9.       ShowMessage(E.Message);
  10.     end;
  11.   end;
  12. end;



pantalla de detalle


delphi
  1. procedure TfrmCnsltrDnncs.dbgrdDtsDblClick(Sender: TObject);
  2. begin
  3.   with frmCapExt do 
  4.   begin
  5.     TpoUsr(sTpoUsr);
  6.     RecbrDts(dbgrdDts.Columns.Items[0].Field.Value);
  7.     Show;
  8.     frmCnsltrDnncs.Close;
  9.   end;
  10. end;



Para esto el form TfrmCapExt tiene que estar incluido en el proyecto.
Saludos

EDITO: TfrmCapExt  es el nombre del form?? o es frmCapExt ???
Se tiene que poner el NOMBRE ya que como dije antes tiene que estar creado en el proyecto de antemano.
  • 0

#12 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 23 September 2010 - 01:41 PM

...ESto tiene que funcionar...


Y funcionó. Gracias, Caral.
  • 0




IP.Board spam blocked by CleanTalk.