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 |
Tuve el mismo problema que tú y la única manera de solucionarlo que encontré fue usar OnEnter
|
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. |
El frame estará en un contenedor, muy posiblemente un Form, allí puedes usar el OnShow y llamar al procedimiento que hizo kasper.
|
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 |
Cita:
Saludos |
Cita:
pero no me muestra el Frame en el formulario, si lo hago sin sobreescribir el constructor lo muestra. Saluditos |
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. |
En ese caso concreto no vale mi respuesta, ¡tenías que poner la excepción que cumple la regla! :p
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 :
que podría ejecutarse así:
Cita:
|
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 |
1 Archivos Adjunto(s)
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 |
é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:
Saludos |
Cita:
¿Sobre el Frame que no aparece con InsertControl, lo has probado? Saluditos |
Hola,
No hace falta pelearse con nombres únicos. Basta poner Name := ''. // Saludos |
Cita:
Roman has probado sobre esta parte: Cita:
Saluditos |
Cita:
:D con lo cual no fallaba. Es al poner el método limpiar que falla. Haciendo una traza de SetParent (cuando se pone Parent := Self):
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 |
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 :D.
Ya me ha pasado "cosas raras" como las que comenta Caro. Saludos |
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 |
Perdon por responder recien, como les dije no hay problema, con el Parent ya es suficiente, muchas gracias amiguitos.
Saluditos |
Cita:
Saludos |
La franja horaria es GMT +2. Ahora son las 20:40:41. |
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