Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2010
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Gracias amigo, tu última solución creo que es lo mejor.

Para ver si entiendo con el código OnShow:= nil;
haces que el evento OnShow se omita, para luego lanzarlo con FormShow(nil). porque todo al parecer resulta que al momento del onshow las variables no se encuentran disponibles cuando el formulario es de tipo fsMDIChild.

Pero me quedan las dudas, será un bug del delphi ?? o quizás lo erroneo es lo que estaba haciendo, pero siguiendo una lógica si uno ya tiene instanciada la clase (create(nil)) esta ya se encuentra totalmente accesible, lo raro es que el evento onshow no se entere de estos valores ni por si acaso.

Gracias estimado, por ahora me parece una solución fantastica, aunque igual que a ti, el por qué de tal comportamiento no me lo explico ya que el evento onpaint si tiene conocimientos de estos valores.

Saludos .-
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 02-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lucasart.

Si correcto, lo de OnShow:= nil, es por que cuando realiza el OnCreate inmediatamente dispara el OnShow y no está el valor aún.

Pero como te dije antes, lo averigué probando. Y al igual que vos no tengo idea del por que de este comportamiento.
Deberíamos consultarlo en un nuevo hilo, quizá algún compañero tenga el dato...

La property no es para embrollar la cosa... , me quedó de una prueba...

Saludos.

Última edición por ecfisa fecha: 02-11-2010 a las 02:09:42.
Responder Con Cita
  #3  
Antiguo 02-11-2010
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Estimado.

Segun la ayuda de delphi.

Código:
Use OnCreate to perform special processing when the form is created and is invoked by TCustomForm’s constructor. Either implement this event or override the constructor of the form; do not do both. Any objects created in the OnCreate event should be freed by the OnDestroy event.
When a form is being created and its Visible property is true, the following events occur in the order listed:
1. OnCreate
2. OnShow
3. OnActivate
4. OnPaint
Al parecer cuando la propiedad está visible=true se disparan los eventos de más arriba, quizás teniendo la propiedad visible=false funcione, bueno, mañara haré pruebas de esto y ver si estableciendo la propiedad a false los valores logren asignarse.

Saludos .-
__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 02-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Amigo... ¡¡¡ Felicitaciones, diste justo en el clavo !!!

Código Delphi [-]
class procedure TForm2.Mostrar(Num: Integer);
begin
  if not Assigned(Form2) then
    Form2:= Create(nil);
  with Form2 do
  begin
    Visible:= False;
    f_id_Ajuste:= Num;
    Visible:= True;
  end;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  Caption:= IntToStr(f_id_Ajuste);
end;

Saludos.
Responder Con Cita
  #5  
Antiguo 02-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo lucasart.

Me parece que me apuré a alegrarme, quedaba tan sencillo ajustando la propiedad Visible...
Despues de tanta prueba olvidé poner como MDIChild a Form2, fué por eso que no me dío error. Pero no se puede ocultar un Form MDIChild.

Esto no funciona:
Código Delphi [-]
  with Form2 do
  begin
    Visible:= False;
    f_id_Ajuste:= Num;
    Visible:= True;
  end;

La solución hasta el momento, sigue siendo:
Código Delphi [-]
procedure TForm2.FormCreate(Sender: TObject);
begin
   OnShow:= nil;
end;

class procedure TForm2.Mostrar(Num: Integer);
begin
  if not Assigned(Form2) then
    Form2:= Create(nil);
  with Form2 do
  begin
    f_id_Ajuste:= Num;
    OnShow:= FormShow;
    FormShow(nil);
  end;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  Caption:= IntToStr(f_id_Ajuste);
end;

Si encontrás alguna otra solución, agradecido si la pones.

Un saludo.

Última edición por ecfisa fecha: 02-11-2010 a las 21:15:23.
Responder Con Cita
  #6  
Antiguo 04-11-2010
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Estimado.

No he encontrado otra manera de hacerlo, bueno también está la opción de sobreescribir el constructor del formulario y pasarle un parametro adicional para utilizar (solución propuesta a mí en el mismo club hace unos par de años).

Mientras tanto para pantallas MDIChild estoy usando tu solución.

Saludos .-
__________________
No todo es como parece ser...
Responder Con Cita
  #7  
Antiguo 04-11-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
No se si entendi mal, pero igual va mi solucion.

Si f_id_Ajuste es una variable publica se puede asignar valor en cualquier momento. Por lo tanto antes de crear el formulario MDI, se le puede dar un valor {1}.

En este ejemplo incluso la sentencia Show, se puede obviar e igualmente se mostrara el formulario.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
    Unit2.f_id_Ajuste:=999;  {1}

    with TForm2.Create(nil) do
    try
        Show;
    finally
      //Free;
    end;
end;

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda en declaracion de variables Paulao Varios 7 24-09-2010 10:25:51
Inicialización de variables booleanas noob Varios 7 16-12-2008 14:34:30
Duda con el ámbito de variables cardomjar Varios 6 16-03-2005 12:45:52
Inicializacion de variables xerkan OOP 3 24-05-2004 16:21:48
Frames y inicialización de variables __cadetill OOP 6 25-11-2003 18:22:54


La franja horaria es GMT +2. Ahora son las 04:45:48.


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