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 18-11-2008
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Frames. ¿Existe un evento similar a onActivate?

Hola.

Tal como digo en el título, ¿existe en un Frame un evento similar al onActivate de un Form?.

El caso es que necesito que, una vez presentado un Frame, se ejecute un cierto código. Pero debe ejecutarse una vez se haya visualizado el Frame y no antes. El evento onResize se ejecuta antes de visualizarse el frame pero no después.

Gracias.
Adolfo Bonis
Barcelona
Responder Con Cita
  #2  
Antiguo 18-11-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Tuve el mismo problema que tú y la única manera de solucionarlo que encontré fue usar OnEnter
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 18-11-2008
kasper kasper is offline
Miembro
 
Registrado: feb 2008
Posts: 20
Poder: 0
kasper Va por buen camino
Yo lo que hice fue realizar un procedimiento o función, dependiendo del caso, que realice lo que quieres hacer antes de que se muestre y después, invocarla.

Espero que te haya ayudado. Saludos.
Responder Con Cita
  #4  
Antiguo 18-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El frame estará en un contenedor, muy posiblemente un Form, allí puedes usar el OnShow y llamar al procedimiento que hizo kasper.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 18-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola adebonis, yo utilizo el OnShow del formulario si es que mi Frame ya esta cargado en el formulario en cuestion y el procedimiento estaría en el Frame, el cual lo llamo en el OnShow del formulario. Ahora si el frame se cargara en ejecución, lo haría justamente despues de haber insertado el Frame en el formulario.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 18-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Ahora si el frame se cargara en ejecución, lo haría justamente despues de haber insertado el Frame en el formulario.
Casi mejor modificar el constructor del Frame, así no tienes ni que llamarlo.

Código Delphi [-]
public
   constructor create(AOWner:TComponent);override;


implementation

constructor TFrame.create(AOWner:TComponent);
begin
   inherited;
   Tu_función_a_ejecutar;
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 18-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Casi mejor modificar el constructor del Frame, así no tienes ni que llamarlo.
Sería muchísimo mejor pero no me esta funcionando, entiendo lo sobrescribir el constructor, puse el codigo tal cual lo pones arriba y en la creación e inserción del Frame lo hago de esta forma.

Código Delphi [-]
 Frame : TFrame2;

begin
 Frame := TFrame2.Create(Self);
 InsertControl(Frame);

pero no me muestra el Frame en el formulario, si lo hago sin sobreescribir el constructor lo muestra.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 18-11-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
debes forzar la entrada al control usando SetFocus, así puedes controlar el evento OnEnter

Otra solución puede ser creando un derivado de TFrame y creando una función que maneje el mensaje CM_VISIBLECHANGED, con un poco de código lo tienes resuelto.
__________________
self.free;
Responder Con Cita
  #9  
Antiguo 19-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En ese caso concreto no vale mi respuesta, ¡tenías que poner la excepción que cumple la regla!

La función a ejecutar debe estar definida dentro del Frame. InsertControl (en este caso concreto) pertenece a la ventana donde será insertada el frame. Tu código es equivalente a :
Código Delphi [-]
Form1.InsertControl(Frame)

que podría ejecutarse así:
Código Delphi [-]
constructor TFrame.create(AOWner:TComponent);
begin
   inherited;
   self.Parent := AOWner;
end;
Cita:
Empezado por Ayuda de InsertControl
Applications should not need to call InsertControl directly. Child controls are automatically inserted and removed when added or deleted at design time. At runtime, use the Parent property of the child control to insert it in the Controls array. I
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 19-11-2008
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
A mi me gustaría ver cuál es la operación que usa Caro en el constructor. Según yo entendí, no es que ahí use InsertControl, sinio que ésta es la forma en que inserta el marco.

Yo hice una pequeña prueba redefiniendo el constructor del marco y no tuve ningún problema; se visualiza correctamente, tanto usando InsertControl como asignando el Parent.

// Saludos
Responder Con Cita
  #11  
Antiguo 19-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Holitas Roman y Lepe, les adjunto la pruebita que hice, con el parent si funciona, me muestra el Frame, pero con InsertControl no, he probado con InsertControl, self.InsertControl, Form1.InserttControl y nada, no muestra el Frame, tengo una pregunta mas, me he creado dos instancias de TFrame3, pero cuando se crea una y al crear la otra me sale "A component named Frame3 already exists", ¿no se puede crear mas instancias de un Frame?.

Saluditos
Archivos Adjuntos
Tipo de Archivo: zip Frames.zip (5,6 KB, 19 visitas)
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #12  
Antiguo 19-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
échale una visual al calendario con frames, es el mismo frame creado 30 veces.

Básicamente, antes de asignar el Parent, debes darle un nombre único en todo ese Form. Puedes usar un contador en esa ventana que se va incrementando:
Código Delphi [-]
Frame2 := Tframe2.Create(self);
Frame2.Name := 'Frame'+ inttostr(contador);
inc(contador); // variable global en este Form
Frame2.setBounds(0, 0, 100,100);

 // ahora que ya tiene un nombre único, lo añadimos al padre.
Frame2.Parent := self;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 19-11-2008 a las 14:30:17. Razón: completar con código
Responder Con Cita
  #13  
Antiguo 19-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Básicamente, antes de asignar el Parent, debes darle un nombre único en todo ese Form. Puedes usar un contador en esa ventana que se va incrementando:
Pense que le había dado nombres, que verguenza , en que estare pensando. Sobre el SetBound no lo conocía. Muchísimas gracias Lepe.

¿Sobre el Frame que no aparece con InsertControl, lo has probado?

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 19-11-2008 a las 14:56:52.
Responder Con Cita
  #14  
Antiguo 19-11-2008
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
Hola,

No hace falta pelearse con nombres únicos. Basta poner Name := ''.

// Saludos
Responder Con Cita
  #15  
Antiguo 19-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Basta poner Name := ''.
Que interesante, eso tampoco lo sabía, acabo de hacer la prueba y si funciona, muchas gracias amiguito.

Roman has probado sobre esta parte:

Cita:
Empezado por Caro Ver Mensaje
.....les adjunto la pruebita que hice, con el parent si funciona, me muestra el Frame, pero con InsertControl no, he probado con InsertControl, self.InsertControl, Form1.InserttControl y nada, no muestra el Frame
Solo es curiosidad, ya que como funciona con el parent lo hare de esa forma al final.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #16  
Antiguo 19-11-2008
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 Caro Ver Mensaje
Roman has probado sobre esta parte:
Ya probé y, en efecto, falla, je, je, pero todavía no sé bien porqué. Ayer cuando hice la prueba me limité a poner:

Código Delphi [-]
constructor TFrame2.create(AOWner:TComponent);
begin
 inherited;
end;



con lo cual no fallaba. Es al poner el método limpiar que falla. Haciendo una traza de SetParent (cuando se pone Parent := Self):

Código Delphi [-]
  if Parent <> nil then UpdateActionLists(opRemove);

  if (Parent = nil) and HandleAllocated then
    DestroyHandle;

  inherited;
  if Parent <> nil then UpdateActionLists(opInsert);

veo que si no se usa limpiar, el condicional de enmedio no se ejecuta, mientras que al usar limpiar, en algún momento se fuerza a crear el Handle del marco lo que obliga la llamada al DestroyHandle. Pero hasta ahí he llegado, todavía no sé en qué parte exactamente afecta.

// Saludos
Responder Con Cita
  #17  
Antiguo 19-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo me echo a temblar cada vez que leo eso de "Applications should not need to call xxx directly", sobre todo cuando he usado ese xxx desde hace mucho .

Ya me ha pasado "cosas raras" como las que comenta Caro.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #18  
Antiguo 19-11-2008
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
Y sí, claro. Si la documentación lo dice, por algo será . Pero como dice Caro, ya es más que nada por curiosidad.

// Saludos
Responder Con Cita
  #19  
Antiguo 21-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Perdon por responder recien, como les dije no hay problema, con el Parent ya es suficiente, muchas gracias amiguitos.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #20  
Antiguo 21-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Y sí, claro. Si la documentación lo dice, por algo será . Pero como dice Caro, ya es más que nada por curiosidad.

// Saludos
Ah, creí que yo era el único "curiosón" en este foro, que alegría ver que no estoy solo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, 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
¿existe un Extract Week? o algo similar amadis SQL 2 05-02-2007 14:19:32
Existe algo similar al DBRadioGroup pero con CheckBox ??? arieliten Varios 1 18-03-2005 22:24:33
dudas evento OnActivate triniti OOP 6 26-08-2004 19:57:41
existe algo similar a TFileListBox para Http? miguel_fr Internet 1 14-04-2004 06:15:35
El evento OnActivate esquerda21 Varios 8 18-06-2003 18:03:35


La franja horaria es GMT +2. Ahora son las 14:02:12.


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