![]() |
Mostrar un mensaje despues de la visualización de un form
Hola
Esto creo que ya se ha preguntado, pero no he logrado encontrarlo en la búsqueda :( Bueno, pos lo que quiero es mostrar un mensaje después de la visualización de un Formulario según una condición dada (que la capturo en el OnShow o en el OnCreate, me da lo mismo). Si alguno tiene alguna idea o logra encontrar el hilo donde se explicaba... Muchas gracias |
Hola Cadetill:
Este es el orden en que se producen los eventos: 1. OnCreate 2. OnShow 3. OnPaint 4. OnActivate 5. OnResize 6. OnPaint again Un Saludo. |
Hola. Que fas treballant ?
No sé si te he entendido bien, pero creo que tengo un problema parecido, y el único evento que he encontrado adecuado es el OnActivate. Pare que solo se ejecute la primera vez, (y no si cambias a otra aplicación y luego vuelves), tengo una variable privada en el formulario llamada Inicializado, que evita que entre más de una vez. (No es nada bonito tener que declarar una variable en el módulo solo para eso, pero a la espera de encontrar una solución mejor, funciona). Código:
procedure TForm1.FormActivate(Sender: TObject); |
Marc... creo que te valdria usar el OnShow, que se dispara una sola vez cuando el formulario es mostrado. Has tenido algun problema con este evento?
Hasta luego. ;) |
Bueno, gracias a todos por responder y, precisamente lo que quería evitar era eso, Marc, lo de la variable global.
Pensé que el Loaded me podría servir, pero poniendo puntos de ruptura me saltaba antes el Loaded que el Create. Por otro lado, Marcos, el orden lo tenía más o menos claro :p Pero con Create o Show, el formulario todabía no se ha mostrado y, los demás (Paint y Activate) tienen el problema que comenta Marc. Y el Resize no me sirve ya que no se produce ningún cambio de tamaño en el form por lo que no se me dispara. Por lo descrito, Juan Antonio, no nos sirve ni a Marc ni a mi el OnShow ya que lo que queremos lograr (almenos yo :p) es que el mensaje se muestre despues de la visualización del formulario. Bueno, pues a falta de otras soluciones.... haré lo de la variable Gracias a todos ;) |
Cita:
En alguna ocasión di un respuesta para algo que creo es similar. No era para mostrar un mensaje pero sí para ejecutar algo una vez que el formulario se mostrado completamente. A grandes rasgos la idea es definir un mensaje propio: Código:
const Código:
PostMessage(Handle, CM_AFTERSHOW, 0, 0); El punto aquí es usar PostMessage en lugar de SendMessage ya que de esta manera el mensaje no se procesará sino hasta que terminen de procesarse los demás y de esta manera el formulario ya se habrá mostrado. // Saludos |
Cita:
// Saludos |
Hola a todos, una posible solución podría ser el uso de un timer, claro habría que hacer un balance del uso de los recursos entre las soluciones propuestas ya que todas 'consumen' recursos en mayor o menor medida.
Con el uso del timer se puede usar tanto el OnCreate como el OnShow y sería ajustar enabled a false, y poner el tiempo adecuado. Quedaría mas o menos así: Código:
procedure TForm1.FormShow(Sender: TObject); Saludos |
Otra solución a parte de las ya propuestas, pudiera ser, si es que el formulario no se cierra durante la vida de la aplicación, utilizar su propiedad Tag.
Código:
procedure TForm2.FormPaint(Sender: TObject); Un Saludo. |
Hola.
Alla voy con otra propuesta : Código:
procedure TForm1.FormActivate(Sender: TObject); Saludos. |
A eso se le llama cortar por la sano, anulas el evento y se acabo.
Tirando de refranero quedaría: "Muerto el perro se acabo la rabia" Un Saludo. |
Cita:
Con lo referente al Loaded, pues puse puntos de ruptura en él y en el OnCreate y OnShow y se paraba primero en el Loaded, luego Create y para terminar en el Show. También decir que la respuesta de Marc me ha gustado :D Dentro de 3 semanas ya veré cual de estas implemento (si es que me acuerdo :p) De nuevo gracias a todos |
Catedill, te iba sugerir la propuesta de marc (desactivar el onactivate) pq la habia probado hace tiempo en una aplicacion y funciona perfectamente y no me dio ningun efecto secundario..
|
Solo quiero comentar que este hilo me ha parecido un derroche de ingenio y talento!
Bravo por el club! :cool: :cool: |
La franja horaria es GMT +2. Ahora son las 02:14:10. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi