Ir al contenido


Foto

[RESUELTO] Pantallas en Cascada.


  • Por favor identifícate para responder
11 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

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

Escrito 23 septiembre 2010 - 10:33

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 mensajes

Escrito 23 septiembre 2010 - 11:17

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
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2010 - 11:19

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

Archivos adjuntos


  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

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

Escrito 23 septiembre 2010 - 11:24

...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
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2010 - 11:27

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
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 23 septiembre 2010 - 11:35

...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
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2010 - 11:41

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 mensajes

Escrito 23 septiembre 2010 - 11:43

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
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 23 septiembre 2010 - 11:49

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
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2010 - 11:51

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
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 septiembre 2010 - 11:57

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
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 23 septiembre 2010 - 01:41

...ESto tiene que funcionar...


Y funcionó. Gracias, Caral.
  • 0




IP.Board spam blocked by CleanTalk.