![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#3
|
||||
|
||||
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); begin if Inicializado then Exit; Inicializado := True; Proceso_a_lanzar; end;
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#4
|
||||
|
||||
![]() 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. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
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 ![]() Por lo descrito, Juan Antonio, no nos sirve ni a Marc ni a mi el OnShow ya que lo que queremos lograr (almenos yo ![]() Bueno, pues a falta de otras soluciones.... haré lo de la variable Gracias a todos ![]() |
#6
|
||||
|
||||
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 CM_AFTERSHOW = WM_USER + 84; type TForm1 = class(TForm) private procedure CMAfterShow(var Msg: TMessage); message CM_AFTERSHOW; end; 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 |
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
|||
|
|||
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); begin if condicion then Timer1.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=false; Showmessage('Hola cadetill'); end; ![]() Saludos |
#9
|
||||
|
||||
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); begin form2.tag:=form2.tag+1; if form2.Tag < 2 then ShowMessage('Salut Cadetill'); end; Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#10
|
||||
|
||||
Hola.
Alla voy con otra propuesta : Código:
procedure TForm1.FormActivate(Sender: TObject); begin Proceso_a_lanzar; Self.OnActivate := nil; end; Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#11
|
||||
|
||||
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.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#12
|
|||
|
|||
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 ![]() Dentro de 3 semanas ya veré cual de estas implemento (si es que me acuerdo ![]() De nuevo gracias a todos |
#13
|
|||
|
|||
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..
|
#14
|
||||
|
||||
![]() Solo quiero comentar que este hilo me ha parecido un derroche de ingenio y talento!
Bravo por el club! ![]() ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
![]() |
|
|
![]() |
|