Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Evento después de la creación de un control (https://www.clubdelphi.com/foros/showthread.php?t=28991)

lucasarts_18 10-01-2006 03:04:40

Evento después de la creación de un control
 
Hola a todos:

Necesito ver la forma de saber cuando todos los controles de un formulario hayan sido creados.
Estuve leyendo sobre OnPaint pero no me sirve:

Cita:

OnPaint occurs before any controls on the form are painted.:eek:
Necesito algún método que se produzca después de haberse creado los controles. ;)

Saludos...

vtdeleon 10-01-2006 03:16:52

Saludos

Mira a ver el evento OnActiv del Formulario.

lucasarts_18 10-01-2006 03:39:53

Primero que nada, gracias por tu interés nuevamente

Cita:

Empezado por vtdeleon
Saludos

Mira a ver el evento OnActiv del Formulario.

Los eventos se generan en este orden

1. OnCreate
2. OnShow
3. OnActivate
4. OnPaint

Por lo tanto el OnActivate está antes del OnPaint y por razones ya mencionadas los controles tampocos estarán disponibles.
A pesar de todo esto, lo que necesito hacer es básico como al momento de inicializarse un form mando a setear los controles (habilitado o deshabilitado, seteo de variables, color, etc..), es una función que tengo en otra unidad y le paso como parametro un tipo TForm y, por ende no puedo acceder a los controles de este form ya que aún sus controles no han sido creados..

Espero haberme explicado bien..

Hasta Luego -

roman 10-01-2006 03:53:45

Cita:

Empezado por lucasarts_18
Por lo tanto el OnActivate está antes del OnPaint y por razones ya mencionadas los controles tampocos estarán disponibles.

Que no estén pintados no significa que no estén disponibles. En condiciones normales, para cuando ocurre el evento OnCreate del formulario, ya todos los controles han sido creados.

Es posible que se presenten algunos problemas al asignar propiedades que dependan de que los controles ya sean visibles, pero en general puedes ajustar propiedades en el evento OnCreate.

// Saludos

dec 10-01-2006 03:57:07

Hola,

Cita:

Empezado por lucasarts_18
(...) el OnActivate está antes del OnPaint y por razones ya mencionadas los controles tampocos estarán disponibles. (...)

Creo que habría que tener en cuenta que es posible que los controles ya estén creados, pero no sean visibles aún. De hecho el evento "OnCreate" del formulario ocurre antes que el evento "OnShow", es decir, el formulario es creado antes de que se vea: ¡y parece lógico que sea así!

Cita:

Empezado por lucasarts_18
A pesar de todo esto, lo que necesito hacer es básico como al momento de inicializarse un form mando a setear los controles (habilitado o deshabilitado, seteo de variables, color, etc..), es una función que tengo en otra unidad y le paso como parametro un tipo TForm y, por ende no puedo acceder a los controles de este form ya que aún sus controles no han sido creados..

Cuando alguna vez he tenido el mismo problema que tú (función en otra unidad que recibe un formulario sobre el cual hay que llevar a cabo determinadas tareas en sus controles) he utilizado el evento "OnShow" del formulario. Pero, ojo, hay tareas que pueden llevarse a cabo también en el evento "OnCreate".

Desde luego hay tareas que no pueden llevarse a cabo en el evento "OnCreate" y sí en el evento "OnShow", pero, sinceramente, o estoy pensando en otra cosa o no sé porqué ahora mismo no puedo ir más allá en mi explicación, esto es, en la explicación del porqué de lo que trato de explicar. Y olé. ;)

Edito: Ya Román se me ha adelantado y creo que lo ha explicado en menos palabras y mucho mejor que yo mismo. ;)

lucasarts_18 10-01-2006 04:51:59

Cita:

Empezado por roman
En condiciones normales, para cuando ocurre el evento OnCreate del formulario, ya todos los controles han sido creados.

Los controles estarán creados y me imagino que lógicamente el Formulario también o sino no podría contener esos controles, digo esto porque me sucede lo siguiente..

Código Delphi [-]
procedure TFrm_Clientes.FormShow(Sender: TObject);
begin
  DMMantenedores.MDOTbClientes.Open;
  Controles_Estado(True,Frm_Clientes);//Frm_Cliente está nil
end;

Puse un breakPoint y verifiqué el Frm_Clientes y marca nil...
y cuando llamo a esa rutina hay un momento que hago un Form.controlcount y presenta el problema típico de los objetos no creados aún..:eek:

Hasta Luego -

roman 10-01-2006 05:03:03

En lugar de

Código Delphi [-]
Controles_Estado(true, Frm_Clientes);

yo pondría

Código Delphi [-]
Controles_Estado(true, Self);

Una cosa es que el objeto ya esté creado y otra que la variable (Frm_Clientes en este caso) ya tenga asignada la referencia a dicho objeto.

No sé si realmente ésta sea la causa del problema, pero sí te comento que los métdos de una clase (TFrm_Clientes) no deben hacer referencias a instancias particulares (Frm_Clientes).

En tu caso, desde el método TFrm_Clientes.FormShow estás tratando de acceder al objeto que se está mostrando, y éste no tiene, en general, porqué coincidir con la variable por defecto que Delphi (uno de sus malos hábitos) crea por defecto.

// Saludos

lucasarts_18 10-01-2006 05:18:35

Cita:

Empezado por roman
En tu caso, desde el método TFrm_Clientes.FormShow estás tratando de acceder al objeto que se está mostrando, y éste no tiene, en general, porqué coincidir con la variable por defecto que Delphi (uno de sus malos hábitos) crea por defecto.

Este era el problema, caso resuelto, por cierto roman, muy clara tu explicación.
Gracias a todos :)

Nos vemos...


La franja horaria es GMT +2. Ahora son las 22:26:24.

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