![]() |
Manejo de Msnpopup
Buenos dias amigos del foro, la consulta que tengo es la siguiente:
Antes les comento que hice un sistema para una clinica,en la que tengo varios modulos (caja.laboratorio,enfermeria,etc)por cada modulo tiene su propio menu Trabajo con delphi 7,firebird 2.1,componentes MDO, es un sistema cliente servidor. Ahora les comento el problema que tengo, mi cliente me dijo que quiere que cuando hagan el registro de los resultados de un paciente en el modulo de laboratorio aparesca un mensaje tipo messenger en el modulo de caja para que de esa manera la cajera sin necesidad de acceder a un formulario ya sepa que se tiene que cobrar al paciente. Vi en el foro que para eso hay el componente tmsnpopup, no pude encontrar ejemplos sobre el componente. Agradeceria a los amigos del foro sus comentarios o ejemplos sobre el componente, mil gracias amigos foreros. |
Bueno básicamente al MSNPopUp debes ponerle un título(Propiedad Title),un texto(Propiedad texto) y el tiempo (en segundos) que permanecerá en pantalla(Propiedad TimeOut), desde luego tiene muchas otras propiedades, es solo ir haciendo la prueba con cada una de ellas y ver que sucede...;):D
Para mostrar el MSNPopUp en pantalla se hace así: Espero te sirva de ayuda...:) Saludos...:) |
Aclarando la pregunta
Muchas gracia por responder amigo forero
Pero para aclarar la duda les explico lo siguiente, cuando ejecuto el sistema me muestra una venta de validacion de acceso que dependiendo del area de registro el usuario ingresa al menu del modulo(caja,enfermeria,etc) Mi duda es que evento de que formulario es llamar al componente pues, la enfermera tiene su propio modulo de trabajo en el cual realiza un registro que simultaneamente la cajera esta con su modulo y en el cual quiero que le aparesca el mensaje tipo messenger del registro que se hizo en el modulo de enfermeria, ya lo he visto el componente pero no me ubico en que formulario o en que evento tendria que llamar al componente. Gracias por responder y si no se me entendio volvere a consultares, mil gracias |
Bueno... segun entiendo..lo que tratas de hacer es una especie de mensajería entre dos host(PC) clientes, cuando uno de ellos inserte un nuevo registro en la Base de dato.
Pues básicamente la idea es que despues que se inserte el registro nuevo, la aplicacion detecte eso desde la base de dato, y eso se puede lograr por ejmplo: 1.-Usando Trigger o procedimiento almacenado en la BD que notifique a un componente identico al TIBEvents de la paleta "InterBase" de delphi;que a ocurrido una insercion nueva ;) ;personalmente no conosco los componentes MDO que mencionas, pero verifica o averigua si tiene algo similar al TIBEvents.;) 2.-Otra opcion es que te crees una miniaplicacion usando Socket para comunicarte entre las diferentes PC de tu red.;) Pueda que hayas otras opciones... pero creo que por ahí va la cosa...;):D Saludos...:) |
Creo que seria con la primera opcion
Muchas gracias por tu comentario y ayuda,justamente es eso lo que quisiera lograr tipo mensajeria entre pcs, te comento que los componentes MDO cuentan con el componente MDOEvent, pero la verdad no tengo idea de como utilizarlo , te pido porfavor que si tuvieras un ejemplo me puedas indicar. mil gracias por todo
|
Has un a búsqueda con palabras clave como "IBEvents" de de seguro encontrarás muchos hilos(Temas) que hablan de su uso.;)
Saludos...:) |
Otra forma un poco mas sencilla que no te requerirá mucha programacion:
1.- Creamos una tabla que llamaremos "mensajes" y ahi defines como va a ser el mensaje (de quien para quien, fecha y hora, etc.) 2.- En los módulos donde quieras "mandar un mensaje" simplemente haces una inserción en la tabla anterior y llenas con los datos necesarios. 3.- En los módulos coloca un timer que cada x segundos vaya y con un select vea si hay mensajes sin leer en la tabla "mensajes", si es así mandas el aviso y das oportunidad de leerlo. Una vez leído, marcas el registro para que la próxima vez que se dispare el timer ya no vuelva a "avisar". Es un método muy sencillo pero funciona bien, además de que adicionalmente puedes mantener un historial de mensajes si así lo quieres. Y como "enviar" un mensaje es una mera inserción de un registro, puedes colocar esta rutina en cualquier parte de tu sistema donde lo requieras. |
Interesante sugerencia
Muchas gracias amigo AzidRain del foro por la sugerencia, lo pruebo y luego comento como me va.
Antes indicarle que gracias a las anteriores sugerencias y ejemplos de ibevent en el foro pude hacerlo, el problema era que podia mostrar el mensaje con un showmessage, mi intencion era mostrar con un tmsnpopup el nombre del paciente registrado en el otro modulo, pero cuando colocaba el codigo de popup.showpopup no mostraba nada, lo cambie por un showmessage y funciono, el problema era que cuando queria cerrar el otro modulo me daba un error con codigo 1400 y no sabia que hacer. Esta ultima opcion la probare y luego les comento amigos del foro, mil gracias |
Cita:
Bueno algo que le veo en contra es el hecho de estar cada "x" segundo haciendo un "SELECT" al base de dato, ésto me no me parece acertado, ya que estariamos saturando la red y el servidor demasiado, y peor aun si existen muchos usuarios conectados, si bien los servidores de BD de hoy en día son muy eficientes y potentes, pero no podemos (en mi opinion) darlos el lujo de lanzar cada x segundo una consulta nada más para hacer eso;), pues no me perece muy óptimo, lo ideal para mí sería que cuando se inserte o edite un registro en la BD, el servidor de BD notifique de dicho cambio a la aplicación desde donde se ha hecho la insercion o Modificacion y es exactamente lo que logra el componente "IBEvents" atraves de algun Triggers;) Es solo mi opinion personal...;) Nuestro amigo Choclito es quien toma la decision de la manera que lo va a hacer?;):D Saludos...:) |
aclarando sobre msnpopup
Gracias amigos del foro comentarles lo siguiente:
aplicando mdoevent les cuento que tengo los siguientes problemas: Antes nuevamente decirles que lo que quiero es que en enfermeria registran a un paciente y quiero que en el modulo de caja me muestre un mensaje Con los ejemplos de manejo de ibevent lo adecue a mi aplicacion pero tengo los siguientes problemas: 1.- En principio queria que el mensaje que se muestre en el modulo de caja sea con un msnpopup pero no daba nada, el codigo es el siguiente:
, luego para verificar si realmente trabaja el componente probe con un showmessage y dio el mensaje, pero luego como tengo una unidad para personalizar mis mensajes(esto gracias al foro tambien) entonces lo que hice es llamar al form del mensaje para mostrar el mensaje,el problema esta es que tengo varios botones que llaman al form del mensaje , el sistema me da error de debuger exception notification "el identificador de la ventana no es valido", donde esta el error ,el codigo es este: Código PHP:
|
aclarando
aclarando cuando se da de alta al paciente en el modulo de enfermeria , con el siguiente codigo:
Código PHP:
|
Duda con el msnpopup
Disculpen que nuevamente consulte,que es lo que me faltaria hacer (codigo) para que me muestre o se ejecute el popup.showpopup pues llamando al showmessage comprobe que el ibevent funciona
Ahora creo q utilizando el msnpopup seria mas visual los mensajes es por eso que hago la consulta, mil gracias por las sugerecias brindadas amigos foreros |
Pues me parece bastante raro que no se te muestre el "MSNPopUp", a mi me funciona perfecto.;)
En todo caso puedes probar con otros componentes por ejemplo el componente"Alert WinPupUp";) u otro similar.;) Tambien en éste hilo hay una version modificada del componente "WinAlert" para ponerle sonido.;) Desde luego tambien puedes crearte una Ventana(formulario) propia para mostrar tus mensaje.;) Saludos...:) |
Nuevamente consultado
Muchas gracias por la respuesta amigo rgstuamigo comentarte lo siguiente:
1.-En mi aplicacion tengo una unidad donde personalizo mis mensajes entonces para llamar a los mensajes llamo a una funcion de la unidad unitshowmesage 2.- NO me habia percatado que cuando llamo al popup.showpopup lo primero es que no me muestra nada y lo segundo es que cuando hago click en un boton que llama a la unidad de mensajes me sale el siguiente mensaje: Debuger Exception Notification El identificador de la ventana no es valido,Process stoped Use step o run to continue Donde esta el error ?? que estaria haciendo mal?? estare muy agradecido por la ayuda que me brinden,mil gracias Sera por eso que no me muestra el popup??? |
Sin ver tú código no se puede hacer nada...:o:o tan solo especular..;)
Saludos...:) |
Ahi va el codigo
Tienes razon amigo, este es el codigo en firebird en el triger donde llamo al evento ALTA si cumple la condicion
Tengo un componente evento (tmdoevent) y un popup(msnpopup) en el formulario menu_caja y en el evento onshow tengo este codigo: tambien probe en el evento oncreate pero tampoco pasaba nada, el siguiente codigo:
luego en el evento onevent del componente evento tengo el siguiente codigo:
ademas tengo una unidad donde personalizo mis mensajes en mi aplicacion el codigo es el siguiente: que como veran solo llamo a la funcion MsgBox de esta unidad para mostrar mi mensaje personalizado. El formulario asociado a esta unidad lo creo cuando se ejecuta la aplicacion, Ahora me puse un boton en el formulario menu_caja para llamar al popup y me da bien. El evento se genera en otro modulo(menu_enfermeria) que esta en otro ambiente que una vez que guarden los datos del paciente, quisiera que me muestre los datos de este paciente en el menu_caja con el popup pero no me muestra,probe con un showmessage y da bien , probe con la unidad q tengo para mis mensajes personalizados y da, pero como en el menu_caja tengo un boton para salir del sistema el cual llama a la funcion msgbox me da el error que anteriormente te comente. Particularmente nose como hacer para que me muestre en el popup,creo q seria mas visual para el usuario,agradesco comentarios amigo o amigos |
La franja horaria es GMT +2. Ahora son las 09:47:46. |
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