Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2006
grone35 grone35 is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
grone35 Va por buen camino
Smile

Gracias Sudamericano, creo que vamos avanzando positivamente con este tema! Tambien gracias a roman por sus aportes y si tiene razon en cuanto al aporte sobre la aparicion del formulario tipo modal

(FrmCliente.ShowModal;)

pues presento el error que el menciona, pero pues si suprimimos esta linea el codigo funciona.

Continuando con el tema mientras aplicaba evento "Close" del formulario "FrmCliente" tuve el problema que no podia volver a abrir el formulario. De casualidad se me ocurrio adicionar una linea en el codigo de creacion del formulario hijo de esta manera :


procedure TFrmKey.ShowFrmCliente;
begin
FrmCliente := nil;
if not Assigned( FrmCliente) then
FrmCliente:=TFrmCliente.Create(Application);
FrmCliente.ShowModal;
end;


Y con esto pude solucionar el invonveniente, pero no se que problemas pueda traer y pues quiesiera saber que significa el "nil".

Sudamericano, yo estoy usando Delphi 7 y pues creo que podemos ir avanzando en lo del ordenamiento de los formularios secundarios (cascada,..)


Muchas Gracias!
Responder Con Cita
  #2  
Antiguo 02-08-2006
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
Además de que en el código que pegas sigues usando el ShowModal, el problema es que al poner FrmCliente := nil, la sdiguiente condición siempre va a ser cierta así que siempre vas a crear la ventana, exista previamente o no. El nil significa simplemente que la variable FrmCliente no apunta a nada, que no tiene ninguna referencia.

// Saludos
Responder Con Cita
  #3  
Antiguo 02-08-2006
Sudamericano Sudamericano is offline
Miembro
 
Registrado: feb 2004
Posts: 41
Poder: 0
Sudamericano Va por buen camino
Como primer punto quiero aclarar porque pongo
Código Delphi [-]
Frmcliente.Show;



primer caso :si no existe; se crea y se muestra
segundo caso : si si hubiran varios form hijos lo que logra la linea mencionada es que el formulario "FrmCliente" se muestre por encima de todos.


otro punto es que en el evento close debes destruir el formulario,

Código Delphi [-]
 
procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := Cafree;
 FrmCliente := nil;
end;


con eso te aseguraas de destruir el frmcliente

saludos
Responder Con Cita
  #4  
Antiguo 02-08-2006
grone35 grone35 is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
grone35 Va por buen camino
Smile

Gracias Roman, que pena lo de la ultima linea se me paso lo del ShowModal ya lo he entendido. Y pues entiendo lo que me quieres decir con respecto al "nil". Entonces como se prodria resolver el problema que despues de cerrar el formulario lo pueda volver a abrir.

Saludos
Responder Con Cita
  #5  
Antiguo 02-08-2006
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
Código Delphi [-]
if not Assigned(FrmCliente) then
  FrmCliente := TfrmCliente.Create(Application)
else
  FrmCliente.Show;

Sólo es necesario usar Show si ya está creado para ponerlo al frente (equivale a poner BringToFront) pues el Create automáticamente hará el Show y pondrá el formulario al frente.

// Saludos
Responder Con Cita
  #6  
Antiguo 02-08-2006
Sudamericano Sudamericano is offline
Miembro
 
Registrado: feb 2004
Posts: 41
Poder: 0
Sudamericano Va por buen camino
codigo roman = 4 lineas
Código Delphi [-]
 
if not Assigned(FrmCliente) then  FrmCliente := TfrmCliente.Create(Application)else  FrmCliente.Show;

Mi codigo = 3 lineas

Código Delphi [-]
 
 if not Assigned(FrmCliente) then  FrmCliente := TfrmCliente.Create(Application)  FrmCliente.Show;

ambos codigos son equivalentes
Responder Con Cita
  #7  
Antiguo 02-08-2006
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
Las líneas al compilador le son indistintas. El punto es que hay un paso de más en la otra manera (Show después de Create). Claro que- como dije al principio -no afecta y seguro que en este caso concreto nadie notará un ciclo más del procesador, pero yo prefiero como norma evitar redundancias. Desde luego es más cuestión de gustos.

// Saludos
Responder Con Cita
  #8  
Antiguo 03-08-2006
grone35 grone35 is offline
Miembro
 
Registrado: jul 2006
Posts: 16
Poder: 0
grone35 Va por buen camino
Smile

Muy buen debate!! Pero compañeros, he tenido el mismo problema con cualquiera de los dos codigos!!! Despues de que cierro el formulario secundario no lo puedo volver a abrir.

saludos!!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Diferencia entre aplicacion Clx y aplicación normal??? JorgeBec Varios 1 27-10-2004 17:30:49
aplicacion vertical? aplicacion horizontal? maruenda Varios 3 28-02-2004 23:23:20


La franja horaria es GMT +2. Ahora son las 05:39:34.


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