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 17-01-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Como me entero de ke delphi termino de crear la forma?

Hola,

Necesito saber si existe alguna propiedad ke me diga si ya termino de crear la form1. La principal.

Lo ke me pasa es que cuando se crea la forma se me activan varios procedimientos que tengo en onclick de varios componentes y kiero ponerle como condicion ke se ejecuten solo despues de creada la forma.

Lo hice creando una variable boolean que cuando se crea la forma se hace true. pero kisiera saber si delphi me lo puede decir sin tener ke crear una variable adicional.

saludos y gracias
Responder Con Cita
  #2  
Antiguo 17-01-2012
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
Pues ¿qué no para eso es el evento OnCreate?

// Saludos
Responder Con Cita
  #3  
Antiguo 17-01-2012
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
Cita:
y kiero ponerle como condicion ke se ejecuten solo despues de creada la forma.
Hola.

Una opción podría ser:
Código Delphi [-]
...
const
  WM_AFTER_CREATE = WM_USER + 100;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
  public
  end;
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Acciones que se ejecutarán en la creación
  PostMessage(Self.Handle, WM_AFTER_CREATE, 0, 0);
end;

procedure TForm1.WmAfterCreate(var Msg: TMessage);
begin
  // Acciones que se ejecutarán después de la creación
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 17-01-2012
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
Sigo sin ver la necesidad de esto. En Delphi, a menos que OldCreateOrder sea true, el evento OnCreate se llama una vez que el formulario y sus componentes se han terminado de construir. De hecho, la VCL, una vez terminado el constructor Create, llama al método AfterConstruct (que vendría siendo el equivalente al PostMessage) y desde ahí se llama al evento OnCreate.

// Saludos
Responder Con Cita
  #5  
Antiguo 17-01-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

Hola,

parece ke no me explike bien.

por supuesto ke pasa por el oncreate. pero eso es un evento y necesito una propiedad.

lo ke me pasa es ke cuando pasa por el oncreate actualizo varios componentes y entonces se me activan varios eventos onclick.

lo ke kisiera es ke en esos eventos onclick comprobar si ya la forma esta creada para ke se ejecuten sus acciones si no, no.

hasta ahora tengo un boolean que se hace true al finalizar el oncreate. lo ke kiero saber es si delphi tiene alguna propiedad ke me indike ke la la forma principal se creo sin tener ke programar nada adicional, ni crear variables nuevas, ni constantes.

algo asi como:

if sender.abierto then ...

gracias mil
Responder Con Cita
  #6  
Antiguo 17-01-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Hola,

bueno si es como dice roman, entonces lo ke necesito es enterarme si Delphi cambia alguna propiedad luego de ejecutarse el oncreate.

Gracias
Responder Con Cita
  #7  
Antiguo 17-01-2012
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 Anel.

Veo que no comprendí lo que buscabas en tu primer mensaje y debo reconocer que todavía no termino de entender lo que deseas hacer...


Cita:
una vez terminado el constructor Create, llama al método AfterConstruct (que vendría siendo el equivalente al PostMessage) y desde ahí se llama al evento OnCreate.
Roman, con respecto al órden que mencionas, y por favor corrígeme si estoy equivocado, siempre tuve la idea que el órden era: Create -> OnCreate -> AfterConstruction.

Hice una pequeña prueba y pareciera comportarse de ese modo.
Código Delphi [-]
...
constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  ShowMessage('Create');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('OnCreate');
end;

procedure TForm1.AfterConstruction;
begin
  inherited;
  ShowMessage('AfterConstruction');
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 17-01-2012
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
Je, je, claro. Pero estás haciendo trampa

Ponlo así:

Código Delphi [-]
procedure TForm1.AfterConstruction;
begin
  ShowMessage('AfterConstruction');
  inherited;
end;

Tal como lo tienes, se ejecuta primero tu AfterConstruction pero antes del ShowMessage llamas a inherited y éste llama a tu FormCreate y por eso ves antes el ShowMessage del OnCreate. Pon puntos de ruptura en los begin correspondiente y verás el orden real.

En cuanto a la pregunta de la compañera, pues no vería cuál es el problema, esto es, no habría que verificar nada pues el sólo hecho de que ejecute el OnClick de un componente en el OnCreate del formulario, ya garantiza que el formulario ha sido creado.

// Saludos
Responder Con Cita
  #9  
Antiguo 17-01-2012
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
Para mayor claridad, este es el código de TCustomForm.AfterConstruction:

Código Delphi [-]
procedure TCustomForm.AfterConstruction;
begin
  if not OldCreateOrder then DoCreate;
  if fsActivated in FFormState then
  begin
    Activate;
    Exclude(FFormState, fsActivated);
  end;
end;

mientras que DoCreate es así:

Código Delphi [-]
procedure TCustomForm.DoCreate;
begin
  if Assigned(FOnCreate) then
  try
    FOnCreate(Self);
  except
    if not HandleCreateException then
      raise;
  end;
  if fsVisible in FFormState then Visible := True;
end;

Ahí es donde se llama a OnCcreate, a menos, que OldCreateOrder sea true.

// Saludos
Responder Con Cita
  #10  
Antiguo 18-01-2012
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
Cita:
Empezado por roman Ver Mensaje
Tal como lo tienes, se ejecuta primero tu AfterConstruction pero antes del ShowMessage llamas a inherited y éste llama a tu FormCreate y por eso ves antes el ShowMessage del OnCreate
Muchas gracias por la aclaración, nunca es tarde para corregir conceptos .

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 18-01-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Hola,

de nuevo y con otras palabras.

en mi aplicacion, en el evento oncrete tengo varias asignaciones a propiedades de componentes:

text1.edit:=... parametro ke leo de fichero
text2.edit:=... idem
checkbox1.checked:= true si del fichero se lee una condicion que lo pone en true
etc....

y asi le asigno propiedades a varios componentes.

al hacer esto, se activan varios eventos .onclick de los componentes actualizados. yo desearia ke esos eventos onclick se activaran solo cuando se diera click sobre ellos y no cuando se esta lanzando el programa y se ejecuta el evento .oncreate de la form principal.

la idea ke se me ocurrio fue poner una variable boolean global (abierto) ke se le asigna true al final del .oncreate y en los .onclick de los componentes la condicion if abierto then etc.

La pregunta es si hay alguna propiedad de la forma principal, o de algun componente de mi aplicacion ke me permita determinar si ya se concluto de lanzar mi aplicacion y no tener ke crear una nueva variable.

La pregunta tambien pudiera ser si hay alguna manera de ke no se ejecuten los eventos .onclick cuando se esta lanzando la aplicacion de alguna otra via.

gracias mil
Responder Con Cita
  #12  
Antiguo 18-01-2012
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 Anel.

Ahora creo entenderte... me parece que de este modo vas a lograr lo que buscas, por ejemplo:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ...
    procedure FormCreate(Sender: TObject);
    ...
    procedure FormDestroy(Sender: TObject);
  private
    procedure Edit1Change(Sender: TObject);
    ...
  public
  end;
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Asignar valores a propiedades de componentes
  Edit1.Text:= 'xxxx';
  ...
  // Asignar eventos
  Edit1.OnChange:= Edit1Change; // Evento asignado posteriormente (no se dispara OnChange)
  ...
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  ShowMessage('CHANGE');
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
   // Desasignar
   Edit1.OnChange:= nil;
  ...
end;
Claro que previamente tendrías que quitar los eventos asignados por código desde el Object Inspector

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-01-2012 a las 00:37:30.
Responder Con Cita
  #13  
Antiguo 18-01-2012
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
Cita:
Empezado por Anel Hernandez Ver Mensaje
yo desearia ke esos eventos onclick se activaran solo cuando se diera click sobre ellos y no cuando se esta lanzando el programa y se ejecuta el evento .oncreate de la form principal.
¡Ah pues! Esto es mucho más claro. Una forma de comprobar podría ser, en los eventos OnClick examinar la proiedad Visible del formulario, que estará en false en el OnCreate.

// Saludos
Responder Con Cita
  #14  
Antiguo 18-01-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otra opción diferente a las comentadas, es utilizar el procedimiento Loaded.
Sobreescribirlo e inicializar lo que necesitas después del inherited.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #15  
Antiguo 18-01-2012
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
Pero viene a ser lo mismo. Una asignación como

Código Delphi [-]
CheckBox1.Checked := true;

en el método Loaded de todas maneras activa el evento OnClick del CheckBox por lo que se tendría aún que verificar si se activó por el usuario o por la asignación.

// Saludos
Responder Con Cita
  #16  
Antiguo 18-01-2012
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

A mi solo me quedó la duda: ¿será que al teclado de Anel le falla la tecla Q?


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #17  
Antiguo 20-01-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Hola,

gracias. Al final he resuelto con la propiedad visible. Muchas Gracias.

Lo de la K por Q se debe a Que escribo desde un lugar con una conexion muy lenta y debo escribir muy rapido porque se cae constantemente.

saludos y gracias
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
Ayuda Hay alguna forma de crear un mario bros editable en delphi 7? Gattaca Varios 4 19-02-2009 23:57:38
Como Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA Internet 2 02-07-2007 16:26:41
Crear dll para un programa del que no tengo entero el código fuente entero seduerey Varios 1 02-05-2007 13:58:08
Como crear un modulo de seguridad antes de iniciar una forma xXx OOP 3 09-03-2007 15:57:38
Como crear una forma MDI? bustio OOP 3 12-10-2005 12:29:50


La franja horaria es GMT +2. Ahora son las 01:02:56.


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